LNMP 一键包配置 NGINX 实现 HTTP 自动跳转 HTTPS 最佳方法

今天发现网站一直没有自动跳转 HTTPS,首次进入的时候如果只访问了 HTTP,那么还是会停留在 HTTP,所以研究了一下 LNMP 一键包环境下配置 NGINX 实现自动跳转 HTTPS 的方法。其实很简单,我相信我们配置完 SSL 证书之后,都希望通过 301 实现自动跳转。本文分享一下 NGINX 官方推荐的 301 跳转实现方法。

LAMP 下实现类似效果可以参考老唐之前的文章:《LAMP 环境下安装配置 SSL 证书并自动跳转到 HTTPS》。

一、NGINX 官方推荐的跳转方法

目前官方推荐的写法如下(参考:《LNMP环境下正确配置HTTP强制跳转HTTPS的方法》,以及官方文档:《Taxing Rewrites》):

# 不好的方法:
  rewrite ^/(.*)$ http://example.com/$1 permanent;
# 好的方法:
  rewrite ^ http://example.com$request_uri? permanent;
# 更好的方法:
  return 301 http://example.com$request_uri;

因此,对于 HTTP 强制自动 301 跳转 HTTPS 的写法就是:

return 301 https://$server_name$request_uri;

二、LNMP 配置自动跳转 HTTPS 方法

知道了怎么写跳转,之后就是写在哪里的问题了。

LNMP 对于每个 vhost 的配置文件在下面的目录:

/usr/local/nginx/conf/vhost/域名.conf

我们打开对应自己域名的文件,然后会看到一个类似下面这样的文件:

# https部分
server {
        listen 443 ssl;
        server_name  yourname.com;

        ssl_certificate      /dir/xx.crt;
        ssl_certificate_key  /dir/xx.key;
        ssl_dhparam          /dir/dhparam.pem;

        ssl_session_timeout  5m;

        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers   on;
        ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+EXP;

        location / {
            root   /your/wwwroot/;
            index  index.html index.htm index.jsp index.do;
        }
    }
# http部分
server {
	listen	80;
	server_name yourname.com;
	return 301 https://$server_name$request_uri;   # 将需要添加的语句添加在此
	location / {
            root   /your/wwwroot/;
            index  index.html index.htm index.jsp index.do;
        }
    # http部分的location字段可保留可删除
    }

上面文件只是示例。主要是文件分为两部分,HTTPS 部分和 HTTP 部分,我们需要把上面的那句 return 301 添加到 HTTP 部分,如上所示。

最后,重启一下 NGINX 生效:

lnmp nginx restart

这个是目前 NGINX 官方最推荐的做法,在 LNMP 一键安装包下配置也很简单,本文就分享至此。

三、建站 VPS 推荐

目前比较推荐腾讯云香港:《腾讯云香港 CN2 VPS 秒杀:428 元/3年,1核 1G 1M,三网直连,超低延迟》。

1、便宜 VPS 推荐:

更多国内 VPS 商家推荐,参考《2019 年最好用的便宜国内云服务器 VPS 主机商家排行推荐》。

2、优质的域名注册商:

更多域名注册商推荐,可以参考 搬砖部落 出品的《2019 年最好的便宜域名注册商推荐》。


【AD】美国洛杉矶CN2 VPS/香港CN2 VPS/日本CN2 VPS推荐,延迟低、稳定性高、免费备份_搬瓦工vps

【AD】RackNerd 推出的 KVM VPS 特价优惠,在纽约、西雅图、圣何塞和阿什本每年仅需 12.88 美元!