質問: リッスン443 default_serverを使用する理由nginxルールは既に構成されているルールを上書きしますか(httpルールは正常に機能します)? 私はnginxとさまざまなサブドメインを持っています:a.mydomain.com b.mydomain.com c.mydomain.com nginxには4つのルールがあります。1)書き換えルール:server { listen 80 server_name gl.udesk.org; root /nowhere; rewrite ^ https://a.mydomain.com$request_uri permanent; } 2)httpsルール:server { listen 443; server_name a.mydomain.com; root /home/a/a/public; ssl on; ssl_certificate conf.d/ssl/a.crt; ssl_certificate_key conf.d/ssl/a.key; ssl_protocols ... ssl_ciphers ... ssl_prefer_server_ciphers on; location ... } 3)httpデフォルトルール:server { listen 80 default_server; return 444; } 4)httpsデフォルトルール:server { listen 443 default_server; return 444; } だから私がnginxを起動して: ブラウザで http://a.mydomain.com にアクセスすると、リダイレクトされて https://a.mydomain.com になり、エラー107( net :: err_ssl_protocol_error):sslプロトコルエラー。 ブラウザで https://b.mydomain.com にアクセスすると、エラー444が返されると思います。しかし、代わりに同じエラー107(net :: err_ssl_protocol_error):sslプロトコルエラーを返します。 dnsプロバイダーのcnameによって登録されたすべて(つまり、a、b、c) 期待どおりに機能するすべてのhttpバージョン(例:ルール3-): http://a.mydomain.com https://バージョンにリダイレクトし、 http://b.mydomain.com および http://c.mydomain.com は、構成どおりにエラー444を返します。 では、なぜnginxのhttpsルールを設定するのが非常に難しいのか、また、httpバージョンと同じ動作をするように適切に設定するにはどうすればよいですか?更新:新しい証明書の作成と追加:ssl on; ssl_certificate conf.d/ssl/default.crt; ssl_certificate_key conf.d/ssl/default.key; 今は機能しますが、ssl証明書が不要なソリューションがあります。証明書を提供せずに、 https://a.mydomain.com を除くすべてのhttps(ポート443)サブドメインのすべての接続をリセットするだけです
回答: returnディレクティブは、書き換えモジュールの一部です。 ドキュメント をチェックすると、リクエストで機能することがわかります。 httpsでは、リクエストはハンドシェイクが完了した後にのみ行うことができます。機能のリクエストがあります: https://trac.nginx.org/nginx/ticket/195 と回避策のソリューションが提供されています。server { listen 443 ssl; server_name bbb.example.com; ssl_ciphers anull; ssl_certificate /path/to/dummy.crt; ssl_certificate_key /path/to/dummy.key; return 444; }