![](/img/trans.png)
[英]Nginx rewrite to https from http on same server_name block when ssl is handled downstream
[英]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.