当ssl和http2打开时,Nginx似乎忽略了服务器名称
我有这个nginx配置:当ssl和http2打开时,Nginx似乎忽略了服务器名称,ssl,nginx,Ssl,Nginx,我有这个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; inc
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版本工作。参数服务器名称似乎没有任何效果。我使用的是“nginx version: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\u name
指令,您可能会将其滚到端口80server
块中:
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;
}
}
我最终通过为没有www的版本添加显式重定向解决了这个问题,但仍然好奇为什么我需要这样做,而没有www代理的版本通过了?