当前位置: 首页>>系统&架构>>正文


nginx网站快速从http转https步骤

丹阳 系统&架构, 网站开发 , , , 去评论

Http的裸奔特质已经被越来越多的人所了解,当前从Http转向Https已经是大势所趋。google和百度相继宣布支持Https, 并且承诺在搜索结果中,Https网站会获得更好的排名。本文将以nginx服务器为例,介绍快速从http转https网站的完整步骤。

第一步:获得Https证书

  1. 进入专业Https服务站certbot.eff.org,如下图所示,选择服务器类型和操作系统版本。

    HTTPS选择系统配置

    假设我们选择的是centos7+nginx(当然其他服务器类型apache/http也可以!)

  2. 安装certbot程序,这个程序用来给网站下载安装Https证书。

    sudo yum install certbot
  3. 执行certbot certonly获取证书。一次可以为多个域名获取证书。其中/var/www/example/var/www/thing/分别是网站根目录, example.com/www.examplec.com/thing.is/m.thing.is是域名。

    • 已经开启Http服务的情况下, 执行下面的命令,需要保证网站根目录下的有.well-known/目录且可以访问。

      certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com -w  /var/www/thing -d thing.is -d m.thing.is

      注1:安装的过程根据提示输入自己的邮箱。
      注2:如果提示.well-known不能访问,在nginx配置中加入:location ~ /.well-known { allow all;}

    • 没有开启Http服务的情况下,执行下面的命令(推荐)。

      certbot certonly --standalone -d example.com -d www.example.com

    • 执行上面的命令之后,Http证书就成功安装了,一般位于:/etc/letsencrypt/目录,详见安装提示。
  4. Https证书一般90天过期,所以需要设置自动更新证书。

    • 更新证书的命令

      certbot renew --dry-run 
    • 一般在crontab中设置定期执行renew程序,实现Https证书自动更新。下面的命令是每天6:30/18:30点更新。

      30 6,18 * * * certbot renew --quiet

  5. 到这里,Https证书就安装成功了。注意:上面的步骤除了centos+nginx,也支持其他系统

第二步:配置nginx服务器支持Https

  1. 在服务器nginx配置中加入下面的代码即可。注意:1)Https监听的端口是443;2)初一将域名改成你自己的。

    server {
    listen       443 ssl;
    server_name  vimsky.com alias www.vimsky.com;
    root /usr/share/nginx/html/vimsky;
    
    access_log /etc/nginx/logs/www.vimsky.com-access.log;
    error_log /etc/nginx/logs/www.vimsky.com-error.log;
    
    # Nginx Https关键配置,开始位置
    #ssl (其实实际是tls)
    ssl                     on;
    ssl_prefer_server_ciphers on;
    # 支持的加密协议
    ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
    # 支持的加密套件
    ssl_ciphers             HIGH:!RC4:!3DES:!aDSS:!aNULL:!kPSK:!kSRP:!MD5:@STRENGTH:+SHA1:+kRSA;
    # 定义session缓存大小
    ssl_session_cache       shared:TLSSL:16m;
    # 定义session过期时间
    ssl_session_timeout     20m;
    # https证书公钥
    ssl_certificate         /etc/letsencrypt/live/vimsky.com/fullchain.pem;
    # https证书私钥 要注意保存!
    ssl_certificate_key     /etc/letsencrypt/live/vimsky.com/privkey.pem;
    # nginx默认会使用Diffiel-Hellman交换密钥是1024位的,相对不安全,所以需要替换使用更安全的。
    #使用 openssl dhparam -out dh4096.pem 4096 可以生成,然后我将其与网站证书的密钥放到了一起, 暂时不启用这个
    #ssl_dhparam             /etc/letsencrypt/live/vimsky.com/dh4096.pem;
    
    # 禁止被外站frame嵌入引用
    add_header X-Frame-Options SAMEORIGIN;
    # 为响应头添加要求浏览器使用https重定向的 header
    add_header Strict-Transport-Security max-age=16000000;
    # Nginx Https关键配置,结束位置
    
    location / { 
    # 后面的配置无关Https省略了.....

  2. 配置好之后,重启nginx服务器:

    service nginx restart

第三步:这是可选步骤,将Http重定向到Https,网站同时支持Http和Https是没有问题的,全部转到Https更好。

配置如下:

server{
    listen 80;
    server_name vimsky.com alias www.vimsky.com;
    return 301 https://vimsky.com$request_uri;
}

到这里,网站从Http转到Https就全部完成了。

延伸阅读: 你的https网站真的安全吗?

本文由《纯净的天空》出品。文章地址: https://vimsky.com/article/2455.html,未经允许,请勿转载。