Nginx:将自定义域名http请求重定向到https
我们希望将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;
}
我的设置有什么问题吗?
正如评论指出,下面的配置应该工作:
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;
}
它的工作原理!谢谢! –
Nginx重装很好。但在浏览器中,我看到了too_many_redirects错误。任何想法? –
然后,在'listen 443'块中发生了一些事情。你可以发布你的**完整**配置吗? –
这将重定向到域custom.com到HTTPS版本的所有请求。如果您的目标是特定的子域,请指定服务器名称。例如'server {listen 80; server_name something.custom.com; return 301 https://something.custom.com;}' –
但我只想重定向自定义域。如果我喜欢你说的话,那么我需要为其他非自定义域设置另一个条目,比如'server {listen 80; server_name _}'这不起作用。 Nginx抱怨多个入口监听端口80.你如何解决这个问题? –
只要Nginx在单独的服务器块中没有'server_name'冲突,就不应该有多个'listen 80;'指令的问题。作为答案,请参阅下面的临时解决方案。 –