以前在访问网站的时候,偶尔有一些疑惑。
1、为什么同一个网站使用3级域名(带www.)可以访问,使用2级域名(不带www.)不能访问,反之亦然。例如:www.net.cn 可以访问,net.cn 就不能访问。有的网站却都可以访问,如 www.ibm.com 或者 ibm.com 。(请使用IE或edge浏览器测试,不要使用google浏览器)
2. 有的网站其3级域名(www.)和2级域名都可以访问,在登录后浏览某个本站链接,发现提示又要登录。
你是否也意识到此类问题,想过为什么是这样吗?作为一个计科人查阅资料搞清楚域名分类、域名解析、cookie管理和各浏览器差异性后,拨云见日疑惑自然消失了。怎么跟普通用户科普?除了这些,难道还要科普HTTP、HTTPS吗?
用户:这么复杂,网站不是 www...吗? 为什么要有4个网址。
1)http://commsg.com
2)http://www.commsg.com
3)https://commsg.com
4)https://www.commsg.com
对比科普,还是来简单一点的吧。沿袭WWW的辉煌历史的惯性,并且全站HTTPS,决定将所有的访问都跳转到 https://ww.commsg.com 。这样的需求,我们要解决2个问题,80端口跳转到443端口和域名间跳转。这对于Nginx来说驾轻就熟,只需要简单配置即可。通过rewrite permanent将上面的域名1)、2)和3)进行301永久重定向到4)。另外,域名解析部分见第一篇。
server {
listen 80;
server_name www.commsg.com;
charset utf-8;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
listen 80;
server_name commsg.com;
charset utf-8;
rewrite ^(.*)$ https://www.${server_name}$1 permanent;
}
server {
listen 443 ssl;
server_name www.commsg.com;
charset utf-8;
ssl on;
ssl_certificate d:/nginx-1.12.2/conf/cert/123456789.pem;
ssl_certificate_key d:/nginx-1.12.2/conf/cert/123456789.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
access_log d:/log/commsg.access.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
proxy_read_timeout 180s;
break;
}
}
server {
listen 443;
server_name commsg.com;
charset utf-8;
rewrite ^(.*)$ https://www.${server_name}$1 permanent;
}
Tips:
请注意保证最后2个server的前后顺序,否则因为找不到CA证书问题,导致不能访问。当然你也可以把他们合并一起,例如:
server {
listen 443 ssl;
server_name commsg.com www.commsg.com;
charset utf-8;
ssl on;
ssl_certificate d:/nginx-1.12.2/conf/cert/123456789.pem;
ssl_certificate_key d:/nginx-1.12.2/conf/cert/123456789.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
access_log d:/log/commsg.access.log;
if ($http_host !~ "^www.commsg.com$") {
rewrite ^(.*) http://www.commsg.com$1 permanent;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
proxy_read_timeout 180s;
break;
}
}
全站HTTPS共3篇: