2017-07-17 121 views
1

我正在嘗試將舊的ssl域重定向到新的ssl域。但它正在向我發送重定向循環。將舊域重定向到帶有SSL的新域nginx

我已經在nginx虛擬主機中嘗試過這種配置。

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 

    server_name example.com www.example.com old-domain.com; 
    rewrite^https://www.example.com$request_uri permanent; 
} 

server { 
    #SSL Configuration 
    listen 443 ssl http2 default_server; 
    listen [::]:443 ssl http2 default_server; 
     include snippets/ssl-example.com.conf; 
     include snippets/ssl-params.conf; 

    root /home/username/example/public; 

    index index.php index.html index.htm index.nginx-debian.html; 

    server_name example.com www.example.com old-domain.com; 

    rewrite^https://www.example.com$request_uri permanent; 

    location/{ 
     try_files $uri $uri/ /index.php?q=$uri&$args; 
    } 

    location ~ \.php$ { 
      include snippets/fastcgi-php.conf; 
      fastcgi_pass unix:/run/php/php7.0-fpm.sock; 
     } 

     location ~ /\.ht { 
      deny all; 
     } 
} 

請指導如何解決此問題。

+0

你有舊域單獨的證書文件? –

+0

證書對於這兩個域都是相同的。 – Danish

回答

0

在您的問題中,第二個rewrite語句導致重定向循環。正確的解決方案是將server塊拆分爲兩個塊,並將其從一個塊重定向到另一個塊,這與您從http重定向到https的方式大致相同。您可以使用第一個server塊來實現此目的。

default_serverserver塊不需要server_name指令,因爲它無論如何都會響應所有不匹配的服務器名稱。詳情請參閱this document

假設這些是唯一https服務器在這種配置中,並且這兩個server塊共享相同的SSL配置(如您的評論暗示),該片段文件可以上面移動以繼承雙方server塊。

最後,server_name指令在主server塊只列出了重定向服務器名稱。

例如:

include snippets/ssl-example.com.conf; 
include snippets/ssl-params.conf; 

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 
    listen 443 ssl default_server; 
    listen [::]:443 ssl default_server; 
    return 301 https://www.example.com$request_uri; 
} 

server { 
    listen 443 ssl http2; 
    listen [::]:443 ssl http2; 
    server_name www.example.com; 

    ... 
} 
+0

謝謝,我搞錯了。這真的很有幫助。 – Danish

相關問題