2016-09-14 163 views
0

我们希望将something.custom.com http请求重定向到https,并保持其他请求不变。尝试下面的东西,但它没有工作:Nginx:将自定义域名http请求重定向到https

server { 
    listen 80 default_server; 
    listen [::]:80 default_server ipv6only=on; 

    server_name _; 

    if ($host ~ ^(.*?)\.custom\.com) { 
    return 301 https://$host$request_uri; 
    } 

    root /www/example/public; 
} 

server { 
    listen 443 default_server ssl; 
    listen [::]:443 default_server ipv6only=on ssl; 

    server_name _; 

    root /www/example/public; 
} 

我的设置有什么问题吗?

+0

这将重定向到域custom.com到HTTPS版本的所有请求。如果您的目标是特定的子域,请指定服务器名称。例如'server {listen 80; server_name something.custom.com; return 301 https://something.custom.com;}' –

+0

但我只想重定向自定义域。如果我喜欢你说的话,那么我需要为其他非自定义域设置另一个条目,比如'server {listen 80; server_name _}'这不起作用。 Nginx抱怨多个入口监听端口80.你如何解决这个问题? –

+0

只要Nginx在单独的服务器块中没有'server_name'冲突,就不应该有多个'listen 80;'指令的问题。作为答案,请参阅下面的临时解决方案。 –

回答

1

正如评论指出,下面的配置应该工作:

server { 
    listen 80; 
    listen [::]:80 ipv6only=on; 

    server_name something.custom.com; 
    return 301 https://something.custom.com$request_uri; 
} 

server { 
    listen 80 default_server; 
    server_name _; 

    #Rest of your config here 
} 

server { 
    listen 443 default_server ssl; 
    listen [::]:443 default_server ipv6only=on ssl; 

    server_name _; 

    root /www/example/public; 
} 
+0

它的工作原理!谢谢! –

+0

Nginx重装很好。但在浏览器中,我看到了too_many_redirects错误。任何想法? –

+0

然后,在'listen 443'块中发生了一些事情。你可以发布你的**完整**配置吗? –