如何配置Nginx托管Node.js应用并实现域名重定向至指定IP
修复后的Nginx配置方案
核心问题分析
- 原配置中
if($host = test.org)存在语法错误:if与左括号之间必须有空格 - 重定向到IP时需要指定完整的协议前缀(
https://),否则浏览器无法正确解析 - 混用同一个server块处理两个域名,逻辑易混淆,建议拆分独立server块更清晰
正确配置示例
# 处理HTTP(80端口)请求,统一重定向到HTTPS server { listen 80; listen [::]:80; server_name go.test.org test.org; # 根据请求域名跳转到对应HTTPS地址 if ($host = test.org) { return 301 https://test.org$request_uri; } return 301 https://go.test.org$request_uri; } # 处理test.org的HTTPS请求,重定向到Softr的IP server { listen 443 ssl; listen [::]:443 ssl; server_name test.org; ssl_certificate /etc/letsencrypt/live/test.org/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/test.org/privkey.pem; # managed by Certbot # 重定向到Softr的IP,保留请求路径 return 301 https://43.234.12.098$request_uri; } # 处理go.test.org的HTTPS请求,代理到Node.js应用 server { listen 443 ssl; listen [::]:443 ssl; server_name go.test.org; ssl_certificate /etc/letsencrypt/live/test.org/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/test.org/privkey.pem; # managed by Certbot location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost:3000/; proxy_ssl_session_reuse off; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; proxy_redirect off; } }
配置说明
- 拆分三个server块,分别处理HTTP跳转、test.org的HTTPS重定向、go.test.org的HTTPS代理,逻辑清晰
- 重定向时保留
$request_uri,确保用户访问的具体路径能被带到目标地址 - 避免在主代理块中使用
if,符合Nginx的配置最佳实践,减少潜在问题 - 确保SSL证书路径正确(沿用你原配置中的Certbot路径)
验证配置
修改完成后,执行以下命令检查配置语法并重启Nginx:
nginx -t systemctl restart nginx
内容的提问来源于stack exchange,提问作者sahil
相关产品推荐
相关产品推荐

