最近在折腾 https,期间遇到了一些重定向问题(导致某些地址不能访问,百度收录瞬间降了很多),所以在此记录一下。
其实我最终要实现的是,访问下面中的每个地址都会跳转到 https://www.awesomes.cn (后面的子路径就省略了)
http://awesomes.cn http://www.awesomes.cn https://awesomes.cn https://www.awesomes.cn
最终的配置如下:
http{
....
#屏蔽IP访问
server {
listen 80 default;
rewrite ^(.*) https://www.awesomes.cn permanent;
}
#https 配置
server {
listen 443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
server_name www.awesomes.cn;
.....
}
#https 跳转
server {
listen 443 ssl;
server_name awesomes.cn;
rewrite ^(.*)$ https://www.awesomes.cn$1 permanent;
}
#http 跳转
server {
listen 80;
server_name www.awesomes.cn awesomes.cn;
rewrite ^(.*)$ https://www.awesomes.cn$1 permanent;
}
....
}
其实之前我也知道,默认情况下,IP 是可以访问 Nginx 配置中的第一个 80 server 的(显示声明listen 80 default
除外)。但是考虑到没啥大问题,用 IP 访问我又咋样呢,对吧。直到今天,同事有多个域名都指向了同一台阿里云服务器,但只是做了域名解析,并没有在配置中做 server_name
声明,居然也能访问站点。
奇怪了,找了半天答案,才想到应该是所有域名其实就相当于访问这个 IP,有指定 server_name
的就访问相应的站点,没有指定的肯定就走默认站点了。
这导致的后果就是,假如百度没有做 IP 禁止访问的话,那我完全可以在没有限制的条件下把我的域名指向百度的 IP 了。
上面有一段是 https 跳转,为什么要加这个呢?如果不加的话,https://awesomes.cn 和 https://www.awesomes.cn 是两个不同的地址,而处于某些原因,是否应该将其指向一个地址?(这里我不确定该不该这样做,或者该这样做是什么原因,SEO 吗?有知道的同学麻烦提示一下)因为我看了一下,很多知名站点(不包括 Ruby China)是跳到一个地址的:
百度 * -> https://www.baidu.com/ Github * -> https://github.com/ 淘宝 * -> https://www.taobao.com/ producthunt * ->https://www.producthunt.com/