Nginx 未将自定义域请求转发到正确的端口

Nginx 未将自定义域请求转发到正确的端口

我有一个网站,允许用户为他们的网站创建投资组合,他们只需更改其域上的 A 记录并将我的服务器 IP 地址放入他们的记录中,它就会映射到他们的网站 (user1.example.com)。我的问题是,我购买了一个域名来测试它 (example.com),它会将他们路由到我实际网站的主页,您可以在此使用该服务。

用户访问其网站的唯一方式是通过:http://example.com:3000- 3000 是我的 Node.js 应用程序运行的端口。我的 Nginx 配置如下,有人能给我一些建议吗?

server {
    listen 80;
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl_certificate /etc/nginx/ssl/example.com/cert_chain.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;

    server_name example.com *.example.com "";
    access_log /var/log/nginx/nginx.vhost.access.log;
    error_log /var/log/nginx/nginx.vhost.error.log;

    root /opt/33i/;

    # Perfect forward secrecy
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/ssl/example.com/dhparams.pem;
    ssl_ciphers ;

    # HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header X_FORWARDED_PROTO https;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Url-Scheme $scheme;
        proxy_redirect off;
        proxy_max_temp_file_size 0;
    }
}

有什么想法吗?这让​​我抓狂不已!

答案1

我认为问题可能就出在线上server_name

按照目前的实现,它可以匹配以下类型的请求:

  • Host:标头example.com
  • Host:标题结尾为.example.com
  • Host:缺少标头

这意味着此配置与任意域不匹配,这看起来就像您希望发生的情况。

server现在,您的配置中很可能还有另一个块:

监听443 ssl默认服务器;

包含此指令的虚拟主机是针对未匹配的请求的综合虚拟主机。

因此,要解决您的问题,您需要从当前所在的块default_server中删除该指令,并将其添加到该块的指令中。serverdefault_serverlisten

相关内容