2015-03-08 217 views
1

我試圖讓我的網站只使用HTTPS。我已經看遍了所有的stackoverflow,並嘗試了許多建議的設置爲該網站的nginx設置文件,但我仍然無法讓所有的地址組合工作。我需要在文件中更改以使其起作用?nginx HTTPS重定向

這兩個地址組合不重定向 -

下面是設置文件看起來像 -

server { 
    listen   [::]:80; 
    server_name www.example.com; 
    return 301 https://$host$request_uri; 
} 

server { 
    listen   [::]:80; 
    server_name example.com; 
    return 301 https://$host$request_uri; 
} 

server { 
    listen [::]:443 default_server ipv6only=off; 
    server_name example.com www.example.com; 

    # rest of config file... 
} 
+0

與$服務器名稱替換$主機變量。應該管用!! – 2016-03-30 23:24:39

回答

0

我完成了th是我在下面的路服務器上:

server { 
    listen 80; 
    server_name example.com; 
    rewrite ^/(.*) https://example.com/$1 permanent; 
} 

一覽你的配置看起來不錯,但return directive documentation確實注意到了舊版本的nginx的,將您的配置可能會遇到一些限制。

最後,在安全服務器配置中,您可以包含一個HTTP Strict Transport Security指令,以使客戶端僅在未來通過TLS連接到您的域。

add_header Strict-Transport-Security max-age=31536000; 
+0

我有TLS部分。你發佈的內容幾乎相同。如果我刪除端口前面的'[::]:'部分,那麼我會覆蓋我發佈的第一個場景,但它仍然無法處理https://domain.com – Usr9751 2015-03-09 23:39:59

+0

您是否列出了'domain.com'和'servername'指令中的'www.domain.com'? – frasertweedale 2015-03-10 00:02:20

+0

在端口80服務器中,沒有。我在端口443服務器。我應該在兩個服務器區域列出嗎?謝謝! – Usr9751 2015-03-11 03:46:55

0

下面的配置將重定向的example.com https://example.com

server { 
     listen   80; 
     server_name *.example.com; 
     return   301 https://$server_name$request_uri; 
} 

server { 
     listen   443 ssl; 
     server_name *.example.com; 

     [....] 
} 

但是,如果你想所有域重定向到https:

  • 改變服務器名稱以_(服務器名_;)
  • 將重定向規則中的$ server_name變量替換爲$ host(返回301 https:// $ host $ request_uri;)
0

您可以使用這樣

server { 
    listen   192.168.1.1:443 ssl; 
    server_name  www.example.com; 
    ssl_certificate www.example.com.crt; 
    ... 
} 

server { 
    listen   192.168.1.2:443 ssl; 
    server_name  www.example.org; 
    ssl_certificate www.example.org.crt; 
    ... 
} 

http://nginx.org/en/docs/http/configuring_https_servers.html