如何配置Nginx通过SSL实现多端口反向代理以同时承接前后端服务?
配置方案
你可以通过路径前缀区分两个后端服务,直接在现有HTTPS server块中新增反向代理规则即可,不需要额外申请证书。
完整修改后的Nginx配置
# 80端口跳转HTTPS配置保持不变 server { listen 80 default_server; server_name <server_name>; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name <server_name>; ssl_certificate <location_to_certificate>; ssl_certificate_key <location_to_private_key>; # 前端静态资源配置保持不变 location / { root /var/www/html; index index.html index.htm; } # 代理5000端口后端,示例用/api/app1/作为前缀,可自行修改 location /api/app1/ { # 去掉前缀再转发到后端,如果你后端接口本身就带/api/app1/前缀可以删掉下一行rewrite规则 rewrite ^/api/app1/(.*)$ /$1 break; proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 代理5050端口后端,示例用/api/app2/作为前缀,可自行修改 location /api/app2/ { rewrite ^/api/app2/(.*)$ /$1 break; proxy_pass http://127.0.0.1:5050; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
生效操作
- 执行
nginx -t检测配置是否存在语法错误 - 检测通过后执行
systemctl reload nginx重载配置生效
访问方式
配置完成后,两个后端的HTTPS访问地址为:
- 5000端口后端:
https://<你的域名>/api/app1/+ 接口路径 - 5050端口后端:
https://<你的域名>/api/app2/+ 接口路径
可选方案
如果你不想用路径前缀区分服务,也可以使用两个子域名分别指向两个后端,每个子域名单独配置一个443 server块即可,只要你的SSL证书支持对应子域名,反向代理规则和上述配置逻辑一致。
安全优化
可以将Gunicorn的监听地址改为127.0.0.1而非0.0.0.0,避免后端端口直接暴露到公网,修改后的启动命令为:
gunicorn --workers 5 -b 127.0.0.1:5050 wsgi:appgunicorn --workers 5 -b 127.0.0.1:5000 wsgi:app
内容的提问来源于stack exchange,提问作者Shivam Sahil
相关产品推荐
相关产品推荐

