2017-08-11 162 views
0

所以我想實現的4件事:如何在Nginx中將http://www.*重定向到https:// *

  • 支持IP-v4和IP-V6
  • 支持letsencrypt SSL證書(在HTTP極致挑戰的位置)
  • 重定向WWW非WWW
  • 重定向HTTP到HTTPS

我想出了一個配置,但似乎沒有工作。嘗試訪問http://www.MY_DOMAIN.COM時,出現「頁面不存在」。 由於hsts設置,在訪問https非www版本一次後,它會起作用。

請注意,我有SSL和無WWW域的SSL證書。

我怎樣才能做到這一點/我是什麼在我的配置做錯了:

# HTTP server 
# 
server { 
    listen [::]:80; 
    server_name MY_DOMAIN.COM www.MY_DOMAIN.COM; 

    location /.well-known/acme-challenge { 
     root /var/www/letsencrypt; 
     try_files $uri $uri/ =404; 
    } 

    location/{ 
     return 301 https://MY_DOMAIN.COM$request_uri; 
    } 
} 
# HTTPS server 
# 
server { 
    listen 443 ssl; 
    listen [::]:443 ssl; 
    server_name www.MY_DOMAIN.COM; 

    ssl on; 
    ssl_certificate   /etc/letsencrypt/live/www.MY_DOMAIN.COM/fullchain.pem; 
    ssl_certificate_key  /etc/letsencrypt/live/www.MY_DOMAIN.COM/privkey.pem; 
    ssl_trusted_certificate /etc/letsencrypt/live/www.MY_DOMAIN.COM/fullchain.pem; 

    ssl_session_cache shared:SSL:50m; 
    ssl_session_timeout 5m; 
    ssl_stapling on; 
    ssl_stapling_verify on; 

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 

    add_header Strict-Transport-Security "max-age=86400; includeSubDomains"; 

    return 301 https://MY_DOMAIN.COM$request_uri; 
} 

server { 
    listen 443 ssl default_server; 
    listen [::]:443 ssl default_server ipv6only=on; 
    server_name MY_DOMAIN.COM; 

    ssl on; 
    ssl_certificate   /etc/letsencrypt/live/MY_DOMAIN.COM/fullchain.pem; 
    ssl_certificate_key  /etc/letsencrypt/live/MY_DOMAIN.COM/privkey.pem; 
    ssl_trusted_certificate /etc/letsencrypt/live/MY_DOMAIN.COM/fullchain.pem; 

    ssl_session_cache shared:SSL:50m; 
    ssl_session_timeout 5m; 
    ssl_stapling on; 
    ssl_stapling_verify on; 

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 

    add_header Strict-Transport-Security "max-age=86400; includeSubDomains"; 

    root /var/www/MY_DOMAIN.COM; 
    index index.html; 
} 

另外,我不覺得這兩個服務器塊非常漂亮的複製粘貼性。

+0

您需要將'listen 80'添加到頂部'server'塊,以便IPv4也正在偵聽。 –

+0

@RichardSmith,你是對的。改變這個之後,它按預期工作......這是一個轉儲錯誤。但是,現在沒有答案接受... – user1934514

回答

0

As @RichardSmith notes;我沒有聽到http://www變種的ipv4版本。因此,這個命令根本沒有被觸發。

修復此問題後,安裝程序正在運行。