nginx作为反向代理的特性_ssh 反向代理

nginx作为反向代理的特性_ssh 反向代理文章目录问题描述解决方案sub_filter方案使用重定向单独域名访问问题描述现在的企业服务,往往不是单体的,同时可能涉及中间件的访问如dubbo、solr、mq等。对于中间件的监控页面访问,如果直接暴露在公网,肯定这安全。需发对中间件访问进行安全加固,方法主要有:(1)限制使用IP白名单访问。(2)安全密码访问,不使用简单密码,对于没有密码的,可以使用basic认证,强密码访问。(3)…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

问题描述

现在的企业服务,往往不是单体的,同时可能涉及中间件的访问如dubbo、solr、mq等。对于中间件的监控页面访问,如果直接暴露在公网,肯定这安全。需发对中间件访问进行安全加固,方法主要有:
(1)限制使用IP白名单访问。
(2)安全密码访问,不使用简单密码,对于没有密码的,可以使用basic认证,强密码访问。
(3)屏蔽端口,通过nginx代理,减少端暴露。

本文要讲的是(3)使用nginx代理,中间可能遇到的问题。

nginx反向代理,可以配置location代理不同的服务,这里就涉及到context-path。如果代理服务本来就不是通过“http://ip:端口/”访问的,而是通过“http://ip:端口/contextpath”访问的,就不会有问题。如果服务不支持“http://ip:端口/contextpath”访问,就涉及“/”路径的问题。

location /activemq/ {
     proxy_pass http://192.168.17.19:8161/;
}

如上代码,location activemq经反向代理后,访问的实际是8161端口下面的activemq路径,而8161端口”/activemq”下没有内容,就会返回404。当然如果只是代理一个服务是没有问题的(可以用“/”location做反向代理),代理多个服务就需要多个location,必然出现问题。

解决方案

经研究和网上查询,nginx反向代理的contextpath问题(contextPath是java servlet的说法,一般就是指http://example.com/aaa/bbb/ccc.html里/aaa这个字段。)主要解决思路如下:
首先,研究服务能不能通过context-path提供。如jetty服务是否支持配置contextpath,如是war考虑部署到tomcat的contextpath访问。
如果实在不能提供contextpath部署访问,解决方案主要有:

sub_filter方案

使用nginx在jenkins返回的所有资源链接前面都加上/jenkins字段,这样用户接下来产生的GET请求都可以map到location /jenkins区块。要实现这个功能需要用到nginx的ngx_http_sub_module。参考Example,可以写出类似配置:

location /jenkins {
    sub_filter '<a href="/'  '<a href="/jenkins/';
    sub_filter '<img src="/' '<img src="/jenkins/';
    # ...其他替换规则...
    sub_filter_once off;  # 查找并替换多次
    proxy_pass http://localhost:8002;
}

案例因特殊情况,使用了这种配置(公供参考):

        #mq
        location /activemq/ {
           sub_filter '<a href="/'  '<a href="/activemq/';
           sub_filter '<a title="Manage ActiveMQ broker" href="/admin/'  '<a href="/activemq/admin/';
           sub_filter '<a title="See some Web demos" href="/demo/'  '<a href="/activemq/demo/';
           sub_filter '<img src="/' '<img src="/activemq/';
           sub_filter '<script src="/' '<script src="/activemq/';
           sub_filter "type='text/javascript' src='/" "type='text/javascript' src='/activemq/";
           sub_filter '<link href="/' '<link href="/activemq/';
           sub_filter 'url(/' 'url(/activemq/';
           sub_filter "@import url('/" "@import url('/activemq/";
           sub_filter_once off;  # 查找并替换多次
           proxy_pass http://192.168.7.19:8161/;
           allow 219.143.147.82;#访问控制
           allow 220.160.125.218;#访问控制
           allow 36.110.62.178;
           # allow for sslvpn access
           allow 36.110.218.132;
           allow 112.48.19.106;
           deny all;

        }

        #solr
        location /solr/ {
           proxy_pass http://192.168.17.18:8983/solr/;
           allow 219.143.147.82;#访问控制
           allow 220.160.125.218;#访问控制
           allow 36.110.62.178;
           # allow for sslvpn access
           allow 36.110.218.132;
           allow 112.48.19.106;
           deny all;

        }
        #dubbo-admin
        location /dubbo-admin/ {
           proxy_pass http://192.168.17.20:8090/dubbo-admin/;
           allow 219.143.147.82;#访问控制
           allow 220.160.125.218;#访问控制
           allow 36.110.62.178;
           # allow for sslvpn access
           allow 36.110.218.132;
           allow 112.48.19.106;
           deny all;

        }
        #dubbo-monitor
        location /dubbo-monitor/ {
           sub_filter '<a href="/'  '<a href="/dubbo-monitor/';
           sub_filter '<img src="/' '<img src="/dubbo-monitor/';
    	   #sub_filter_once off;  # 查找并替换多次
           proxy_pass http://192.168.17.21:8081/;
           allow 219.143.147.82;#访问控制
           allow 220.160.125.218;#访问控制
           allow 36.110.62.178;
           # allow for sslvpn access
           allow 36.110.218.132;
           allow 112.48.19.106;
           deny all;

        }

但是这样做效率很低、且filter遗漏和出错可能性大(比如=>其他2)。

使用重定向

location /activemq/ {
    return 302 http://www.domain.com:8161/; 
}

这样做的前提是开通8002的端口映射,还是涉及端口暴露问题。

单独域名访问

如果条件允许的话,应该是分配一个子域名(子域名都是单独的公网IP),比如activemq.domain.com会更合理和方便。nginx同一80端口,支持多域名监听配置。

配置参考

server {
        listen       443;
        server_name  activemq.domain.com;
        add_header X-Frame-Options SAMEORIGIN;
        #rewrite ^(.*)$ http://${server_name}$1 permanent;
                ssl on;
                ssl_certificate /etc/nginx/sslkey/_.XXX.com_bundle.crt;
                ssl_certificate_key /etc/nginx/sslkey/XXX.com.key;
                ssl_session_timeout 5m;
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
                ssl_prefer_server_ciphers on;
        add_header X-Via nginx;
        #static path
       location / {
         proxy_pass http://192.168.17.19:8161/;
       }
    }

臭味相投的朋友们,我在这里:
猿in小站:http://www.yuanin.net
csdn博客:https://blog.csdn.net/jiabeis
简书:https://www.jianshu.com/u/4cb7d664ec4b
微信免费订阅号“猿in”
猿in

参考:https://blog.csdn.net/silvita/article/details/72781266

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192559.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎样发外链,使网站能快速收录,秒收录

    怎样发外链,使网站能快速收录,秒收录本文来自:优优蜘蛛池(http://www.zhizhuchi.vip)1.首先就是大家都熟知的百度网站提交2.利数桥带族用的周边产品添加网站的外链吸引蜘蛛进入你的网站。3.写一篇原创文章加上自己的网站链接后投稿到大型的站长网站。4.到高权重的论坛注册账号,这个人签名里添加上自己网站的超链接,发发贴,顶顶贴,就能无形中增加了。2:利用公司名字和地址在分类信息做外链。3:利用论坛昵称做高质量外链。4:在帖子内容中巧带二级域名链接。SEO优化之网站怎么实现百度秒收录何谓”秒收录”?大家可以经常

    2022年5月17日
  • harris角点检测_那就更详细一点吧

    harris角点检测_那就更详细一点吧1.不同类型的角点在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。从图像分析的角度来定义角点可以有以下两种定义:角点可以是两个边缘的角点; 角点是邻域内具有两个主方向的特征点;前者往往需要对图像边缘进行编码,这在很大程度上依赖于图像的分割与边缘提取,具有相当大的难度和计算量,且一旦待检测目标局部发生变化,很可能导致操作的失败。早期主要有Rosenfeld和Freema…

    2022年10月9日
  • Android 绑定服务 bindService[通俗易懂]

    Android 绑定服务 bindService[通俗易懂]绑定服务是客户端–服务器接口中的服务器。组件(如activity)和服务进行绑定后,可以发送请求、接收响应、执行进程间通信(IPC)。不会无限期在后台运行。要提供服务绑定,必须实现onBind()回调方法,该方法返回的IBinder对象定义了客户端用来与服务进行交互的编程接口。客户端可以通过调用bindService()绑定到服务。调用时,必须提供ServiceConnection的实现,后者会…

    2022年6月10日
  • spark flatmap

    spark flatmapflatMap算子,在java中,接收的参数是FlatMapFunction,我们需要自己定义FlatMapFunction的第二个泛型类型,即,代表了返回的新元素的类型      call()方法,返回的类型,不是U,而是Iterable,这里的U也与第二个泛型类型相同      flatMap其实就是,接收原始RDD中的每个元素,并进行各种逻辑的计算和处理,返回可以返回多个元素

    2022年5月4日
  • PHP开发环境的搭建——XAMPP的安装与配置(Windows)

    PHP开发环境的搭建——XAMPP的安装与配置(Windows)安装XAMPP进入https://www.apachefriends.org/zh_cn/index.html页面下载XAMPP打开XAMPPControlPanel在XAMPP控制面板中,我们可以看到Service一列的单选框略有不同,“X”表示相应组件还没有设为Windows系统服务;“空白”表示没有安装该组件;此外还有“

    2022年7月12日
  • elasticsearch

    elasticsearch

    2021年5月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号