You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Nginx托管Node.js应用并实现域名重定向至指定IP

修复后的Nginx配置方案

核心问题分析

  1. 原配置中if($host = test.org)存在语法错误:if与左括号之间必须有空格
  2. 重定向到IP时需要指定完整的协议前缀(https://),否则浏览器无法正确解析
  3. 混用同一个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:07:38