2016-10-18 2 views
1

にあるときにサーバー名を無視するようだ:nginxのは、SSLとHTTP2は、私はこの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.comhttps://www.example.comにリダイレクトされます。問題は、https://example.comも機能し、ポート8888へのプロキシパスを処理することです。どのように私はそれが動作するのを防ぐことができますか?私は動作するにはwwwとちょうどバージョンが必要です。パラメータserver_nameは効果がないようです。私は "nginx version:nginx/1.10.1"を使用しています。

+0

私は渡されたWWWプロキシなしでそのバージョンを行うために必要な、なぜ私は最終的には、WWWなしバージョンの明示的なリダイレクトを追加することで、これを固定し、それでも好奇心? – Ondra

答えて

2

ポート443のデフォルトサーバーを明示的に定義しない限り、nginxは最初に一致するserverブロックを使用して要求を処理します。詳細については、this documentを参照してください。

ソリューションは、明示的に例えば、目的の動作で、デフォルトのサーバーを定義することです:あなたはserver_nameディレクティブを削除した場合

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

実際には、あなたはおそらく、あなたのポートに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; 
    } 
} 
関連する問題