nginx反向代理本地多个服务外部一个端口

先讲需求,客户有内网服务器一台,通过外网防火墙 将对外网某端口映射到内网服务器8692 端口,但是服务器上要部署两套小程序后台服务,和web管理后台服务,从外部访问这些服务都要通过一个端口8692 实现,想来想去使用nginx 进行进行反向代理+rewrite URL最经济实惠。

直接上配置文件

#usernobody; worker_processes1; events { worker_connections1024; } http { include mime.types; default_typeapplication/octet-stream; sendfileon; keepalive_timeout65; server { listen 8692 ssl; #以SSL方式 监听8692端口,外部统一访问端口 server_namewww.xxx.com; #监听该域名 ssl_certificatecert/full_chain.pem; #指定证书,在 nginxconf/cert目录 ssl_certificate_keycert/server.key; #指定证书秘钥 ssl_session_cacheshared:SSL:1m; ssl_session_timeout5m; ssl_ciphersHIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;#指定SSL协议 ssl_prefer_server_cipherson; location / { root /app/jf/dist/;#指定静态资源路径 try_files $uri $uri/ /index.html; indexindex.html index.htm; set $flag 0;#初始化标记,判断访问设备类型 if ( $http_user_agent ~* "Android") {#判断是来自安卓设备 set $flag "${flag}1"; } if ( $http_user_agent ~* "iPhone") {#判断是来自iphone设备 set $flag "${flag}1"; } if ( $request_uri ~* "xyfw" ){ #判断访问的URL里包含 xyfw关键字 set $flag "${flag}1"; } if ($flag = "011" ){ #综合判断是 来自安卓或iPhone的设备 且访问的xyfw服务,尽心反向代理转发到:90 proxy_pass :90; # 重写URL 把URL里的字符串/xyfw/ 替换成/ rewrite ^/xyfw/(.*) /$1 break; } if ( $flag = "01"){#综合判断是 来自安卓或iPhone的设备 且访问的 非 xyfw服务 proxy_pass :443; } } location /prod-api/ { #匹配 URL开始为 /prod-api/ 的请求服务,进行反向代理转发到:90/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass :90/; } #location /xyfw { #proxy_set_header Host $http_host; #proxy_set_header X-Real-IP $remote_addr; #proxy_set_header REMOTE-HOST $remote_addr; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #proxy_pass :90; #rewrite ^/xyfw/(.*) /$1 break; #} } }

关于ngixn的深坑,nginx开始安装的时候一定要指定安装SSL模块,SSL证书使用的时候一定注意nginx.conf 里的ssl_certificatecert/full_chain.pem 这里的full_chain.pem 包含证书和中间证书,否则小程序访问该服务的时候回报 SSL证书错误异常。

这里原来的证书是springbootjks证书,所以要转换一下

细节参考以下

HTTPS证书文件格式转换_phris的博客-CSDN博客​blog.csdn.net/phris/article/details/

综上,这都是资源不足惹的祸,要想不这么苦哈哈的直接用A10最爽。