Nginxを使用してローカルホストでSSLを構成しようとしています。自己署名証明書を作成しました。Nginxの構成は次のとおりです。
server {
listen 443 ssl;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ =404;
}
}
しかし、アクセスしようとすると、次のエラーが表示されます
$ curl -i https://localhost
curl: (7) Failed to connect to localhost port 443: Connection refused
このエラーの考えられる原因は何でしょうか?
これは、コマンド 'netstat-tuplen'の出力です。
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 0 71662 -
listen
ディレクティブがありません:
listen [::]:443 ssl;
これは、nginxにIPv6接続をリッスンするように指示します。既存のlisten
ディレクティブはIPv4接続のみをリッスンし、これはnetstat
出力で確認されます。
これが必要な理由(既存のlisten
ディレクティブに加えて)は、localhost
がIPv6アドレスに解決されるためです::1
過去のIPv4アドレスに加えて127.0.0.1
。ただし、IPv6は接続を確立するための推奨プロトコルです。したがって、curl
はIPv6経由でnginxに接続しようとして失敗します。
もちろん、(おそらく)最終的にサイトを配置するグローバルインターネットでは、現在または近い将来、IPv6も使用する必要があります。ですから、今日はこれに備える必要があります。