繁体   English   中英

当ssl和http2打开时,Nginx似乎忽略server_name

[英]Nginx seems to ignore server_name when ssl and http2 is on

我有这个nginx配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name www.example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.example.com;
    include snippets/ssl-params.conf;
    client_max_body_size 5G;
                location / {
                        proxy_pass http://127.0.0.1:8888;
                }
}

因此http://www.example.com被重定向到https://www.example.com 问题是, https://example.com也可以工作并提供代理传递到端口8888 我怎样才能防止它起作用? 我需要只有www的版本才能工作。 参数server_name似乎没有任何效果。 我使用的是“nginx版本:nginx / 1.10.1”。

除非您为端口443明确定义默认服务器,否则nginx将使用第一个匹配的server块来处理请求。 请参阅此文档了解详细信息

解决方案是显式定义具有所需行为的默认服务器,例如:

server {
    listen 443 ssl http2 default_server;
    return 301 https://www.example.com$request_uri;
    include snippets/ssl-params.conf;
}    

实际上,如果删除server_name指令,则可以将其滚动到端口80 server块中:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    listen 443 ssl http2 default_server;
    return 301 https://www.example.com$request_uri;
    include snippets/ssl-params.conf;
}

server {
    listen 443 ssl http2;
    server_name www.example.com;
    include snippets/ssl-params.conf;
    client_max_body_size 5G;
    location / {
        proxy_pass http://127.0.0.1:8888;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM