Nginx将所有[http / www / https www]重定向到[https non-www]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx将所有[http / www / https www]重定向到[https non-www]相关的知识,希望对你有一定的参考价值。
我在https上有以下要访问的服务器名称:
example.com
test.example.com
api.example.com
api.test.example.com
# And I might add more, all on example.com of course
# ...
我想将所有http
,http://www
和https://www
重定向到https://non-www
喜欢:
http://example.com => https://example.com
http://test.example.com => https://test.example.com
http://api.example.com => https://api.example.com
http://api.test.example.com => https://api.test.example.com
http://www.example.com => https://example.com
http://www.test.example.com => https://test.example.com
http://www.api.example.com => https://api.example.com
http://www.api.test.example.com => https://api.test.example.com
https://www.example.com => https://example.com
https://www.test.example.com => https://test.example.com
https://www.api.example.com => https://api.example.com
https://www.api.test.example.com => https://api.test.example.com
看一下我在网上发现的一个简单例子,我尝试了以下方法:
server {
listen 80;
server_name example.com test.example.com www.example.com www.test.example.com api.example.com api.test.example.com www.api.example.com www.api.test.example.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443;
server_name www.example.com www.test.example.com www.api.example.com www.api.test.example.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443;
server_name example.com test.example.com api.example.com api.test.example.com;
#
# The rest of the config that that follows is indeed for the names
# that I want to redirect everything to
# ...
}
我认为$host
意味着在/
和没有www
之前的网址的一部分。就像我访问www.api.test.example.com
然后$ host将是api.test.example.com
。等等。
但是,在注意到它的行为方式和检查nginx变量后,似乎我认为错了。虽然它没有非常清楚地解释并且没有提供示例,但它们也没有说明使用哪个变量来获得没有www的完整域(子域包括)。
答案
有多种方法可以做到这一点,但如果此服务器只处理example.com
的子域,则可以使用正则表达式和默认服务器进行简化,而不是为server_name
指令指定长列表。
例如:
server {
listen 80;
listen 443 ssl;
server_name ~^www.(?<domain>.+)$;
return 301 https://$domain$request_uri;
}
server {
listen 80 default_server;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl default_server;
...
}
第一个server
块仅匹配以www.
开头的主机名。第二个服务器块使用http
匹配其他所有内容。第三个server
区块使用https
匹配其他所有区域。
假设此服务器具有通配符证书,对所有子域都是通用的。有关更多信息,请参阅this document。
以上是关于Nginx将所有[http / www / https www]重定向到[https non-www]的主要内容,如果未能解决你的问题,请参考以下文章