我有一个网站,允许用户为他们的网站创建投资组合,他们只需更改其域上的 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
中删除该指令,并将其添加到该块的指令中。server
default_server
listen