配置Nginx实现SSL加密下子域名分别服务Angular前端与Node.js后端
配置步骤
1. 替换Nginx配置文件(default.conf)
你的原有配置缺少子域名匹配、后端反向代理规则,且存在语法遗漏(第一个server块未闭合),直接替换为以下内容即可:
# 所有80端口请求统一重定向到HTTPS server { listen 80; server_name demo.example.com demo-api.example.com; return 301 https://$host$request_uri; } # 前端子域名配置 server { listen 443 ssl; ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; server_name demo.example.com; server_tokens off; location / { root /usr/share/nginx/html; index index.html index.htm; # 适配Angular路由的重写规则 try_files $uri $uri/ /index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } # 后端子域名配置 server { listen 443 ssl; ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; server_name demo-api.example.com; server_tokens off; location / { # 替换为你后端Node容器的实际访问地址:如果后端容器映射到宿主机3000端口,用docker网关地址172.17.0.1即可 proxy_pass http://172.17.0.1:3000; 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; } }
注意:将配置里proxy_pass的端口改为你后端Node.js容器实际暴露的端口
2. 修改前端API调用地址
把Angular项目里所有调用后端API的前缀,从原来的HTTP地址改为https://demo-api.example.com,重新打包后替换S3里的静态文件,再重新构建前端Nginx镜像即可。
3. 调整容器启动参数
- 启动后端Node.js容器时,确保端口映射正确,比如你的后端服务监听3000端口,启动命令添加参数
-p 127.0.0.1:3000:3000,避免后端端口直接暴露到公网 - 启动前端Nginx容器时,添加端口映射参数
-p 80:80 -p 443:443,确保HTTP和HTTPS端口正常对外
可选优化
生产环境建议替换自签名证书为Let's Encrypt等机构颁发的可信证书,避免浏览器安全告警。
内容的提问来源于stack exchange,提问作者Dataneers
相关产品推荐
相关产品推荐

