nginx 配置多个 server 的问题,查了 2 天了,没结果,有大佬知道是怎么回事么。

2021-12-01 13:51:08 +08:00
 Rebron1900

同一个 vps 下用 nginx 代理了两个站点,

  1. www.demo.com
  2. server.demo.com

第一个没证书,第二个有证书。

问题:

现在访问 https://demo.com 会跳转到第二个站点, 显示的内容为第二个站点的内容。

访问 http://demo.com 可以正常第一个站点的内容。

第一个站点的 nginx 文件

server {
    listen 80;
    listen [::]:80;
    server_name www.demo.com;
    root /var/www/ghost/system/nginx-root; 

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;
        
    }


    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}

第二个站点的 nginx 文件

server {
    listen              443 ssl;  
    server_name        server.demo.com;
    ssl_certificate     /data/_ssl/tmserver.crt;  
    ssl_certificate_key /data/_ssl/tmserver.key;
    ssl_session_cache   shared:SSL:1m;  
    ssl_session_timeout 5m;  
    ssl_ciphers         HIGH:!aNULL:!MD5;         
    ssl_prefer_server_ciphers  on;
   
    location / {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
    }




    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}
1520 次点击
所在节点    问与答
17 条回复
gam2046
2021-12-01 13:58:33 +08:00
除了这两个 server 是否还存在其他的配置项,类似这样的内容

server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
Rebron1900
2021-12-01 14:07:07 +08:00
@gam2046
我之前也想着是不是引入了其他配置文件,所以去过去核对过 nginx 的主配置文件。
我这边的 server 都是通过 include 引入的,主配置文件没有其他 server ,引入代码:
```
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
```
blackeeper
2021-12-01 14:20:40 +08:00
https://demo.com 是 443 端口,有证书的网站是 server.demo.com 。nginx 是匹配端口之后,再匹配域名,443 的端口只有一个网站,那访问 https://demo.com 会跳转到第二个站点, 显示的内容为第二个站点的内容。
Rebron1900
2021-12-01 14:28:38 +08:00
@blackeeper 这种情况我要怎么改配置文件呢。
shenqi
2021-12-01 14:35:05 +08:00
https 优先走了 443 ,将 www.demo.com 加 443 监听就行。顺路监听 demo.com

listen 80;
listen [::]:80;
listen 443 ssl;
listen 80;
listen [::]:433 ssl;
server_name www.demo.com demo.com;
root /var/www/ghost/system/nginx-root;
ssl 配置之类 xxxxxx
cnrting
2021-12-01 14:37:49 +08:00
加一个 443 给 demo.com 就行了
Rebron1900
2021-12-01 14:52:33 +08:00
@shenqi @cnrting 但是我 demo.com 没有 ssl ,我监听 443 后重载配置文件失败,提示:
nginx: [emerg] no "ssl_certificate" is defined for the "listen ... ssl" directive in /etc/nginx/sites-enabled/1900.live.conf:1
cnrting
2021-12-01 15:22:12 +08:00
@Rebron1900 用 let's encrypted 签一个
canbingzt
2021-12-01 15:39:53 +08:00
感觉是 default_server 的问题,分别给 80 和 443 配置 default_server 试试
Vegetable
2021-12-01 15:41:48 +08:00
你 443 端口就只有一个 server ,访问 https 当然不可能到 demo.com
Rebron1900
2021-12-01 15:53:56 +08:00
@cnrting 我现在这个站点就是不想搞 ssl ,有没有不绑定证书的办法
Rebron1900
2021-12-01 15:56:17 +08:00
@canbingzt 刚刚测试了,显示定义 default_server 也不行。
zelin44913
2021-12-01 16:10:34 +08:00
明显的 default_server 问题
zelin44913
2021-12-01 16:13:02 +08:00
添加
server {
listen 443 default;
server_name _;
root /data;
}
Rebron1900
2021-12-01 16:20:04 +08:00
@zelin44913 修改原有的,还有新增一个。
hahahahahahahah
2021-12-01 22:34:29 +08:00
http 走四层
Rebron1900
2021-12-02 10:49:24 +08:00
结帖了。
我通过在 server.deme.com 里写 if 来判断 servername ,
如果请求的域名是 demo.com 就跳过去,如果是 server.demo.com 就直接给与访问。
不知道是不是最优解,不过问题算是处理好了。
谢谢各位大佬关注。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819287

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX