我有这个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"。
答案 0 :(得分:3)
除非您为端口443明确定义默认服务器,否则nginx
将使用第一个匹配的server
块来处理请求。有关详细信息,请参阅this document。
解决方案是明确定义具有所需行为的默认服务器,例如:
server {
listen 443 ssl http2 default_server;
return 301 https://www.example.com$request_uri;
include snippets/ssl-params.conf;
}
实际上,如果删除server
指令,您可能会将其滚动到端口80 server_name
块中:
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;
}
}