簡體   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