MENU

Nginx http跳转到https, 不带www跳转到www域名

2019 年 01 月 04 日 • 阅读: 1791 • 运行环境

nginx

现在SSL站点是大势所趋, Google更青睐https网站. 另外基于网址唯一性, 减少网站重复内容等需求, 最好将网站做下301跳转, http跳转到https, 以及不带www和带www之间的跳转.
以下是具体步骤. 基于LNMP、Nginx环境。

1. 编辑网站配置文件 (域名按你自己的改)
修改前记得备份, 万一出错的话可以还原.

vim /usr/local/nginx/conf/vhost/www.wmsoho.com.conf

1.1 首先将所有http请求(80端口) 跳转到https(443端口)
只要是http开头的, 不管带还是不带www, 通通跳转到https://www.wmsoho.com

添加以下代码 (域名改成自己的)

return 301 https://www.wmsoho.com$request_uri;

具体看截图:
1.png
补充: 关于不带www跳转到www, 不考虑https的情况:
网上很多文章的代码是这样:
将两个域名写在同一个server中,
然后通过if语句判断域名进行rewrite跳转:
2.png
Nginx官方并不推荐使用if语句 (原文可查看此处).
因为每次访问都要判断一遍, 低效且复杂。
其推荐的做法是将带www和不带www分开写成2个server, 再根据需要进行跳转.
另外使用return语句正则匹配性能更优秀.

1.2 然后是https请求 (443端口)中, 不带www跳转到带www的域名

比如https://wmsoho.com 跳转到 https://www.wmsoho.com
这里建议写成两个server:
一个是www的, 不用做跳转, 只要删掉server_name中不带www的域名就好了.
另一个是不带www的, 需要跳转到带www.

1.2.1 https & 带www 配置

找到443端口的代码段, 删掉wmsoho.com, 注意分号别删了.
3.png

1.2.2 https & 不带www 配置

在文件末尾新建一个server (你可以直接复制上面443端口的server代码再修改), 注意不要出错. 完整代码如下:
4.png

server
{
    listen 443 ssl http2;
    #listen [::]:443 ssl http2;
    server_name wmsoho.com;
    return 301 https://www.wmsoho.com$request_uri;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.wmsoho.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.wmsoho.com/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
    ssl_session_cache builtin:1000 shared:SSL:10m;
    # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
    ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
}

改完之后保存.

重启Nginx
输入命令lnmp restart或者lnmp nginx restart
如果配置文件有问题, nginx会有错误提示.

最后通过浏览器访问, 测试一下是否跳转成功.