2017-07-17 87 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

相关问题