shusheng007
Published on 2022-10-28 / 11 Visits
0
0

如何为Nginx启用HTTPS

[版权申明] 非商业目的注明出处可自由转载 出自:shusheng007

前言

前端时间有个小伙伴在我的博客上留言,说:我的博客是http的他感觉很害怕,建议我为博客开启https,于是我抽点时间升级了一下,特此记录一下。

查看 nginx 是否安装 http_ssl_module 模块

nginx -V

查看输出的编译参数中是否包含 --with-http_ssl_module,如果不包含你还要去下载nginx安装包,自己手动编译一下,具体请查看相关资料,不过一般都已经包含了。

如果没有将nginx配置到环境变量路径(Path)中,就需要通过如下命令查看nginx的安装路径。

ps aux | grep nginx

输出:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     11630  0.0  0.0 143000  1648 ?        Ss   09:17   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 11633  0.0  0.7 151072 15148 ?        S    09:17   0:03 nginx: worker process
root     13974  0.0  0.0  14428  1036 pts/0    S+   17:34   0:00 grep --color=auto nginx

从上面的输出看呀看出,我们电脑的nginx安装在

/usr/sbin/nginx

配置SSL

申请CA证书

如果你已经有证书了那就最好了,如果没有可以使用阿里云申请1年期的免费证书

  • 登录你的阿里云,找到SSL证书服务,入下图所示

  • 创建免费证书

  • 证书申请

点击证书申请,然后填入你的各种申请信息

  • 点击购买

当申请信息填完了,就点击购买即可,放心,付款金额为0。正常情况下,很快就签发了。

下载证书

我们是要配置nginx,所以下载适合nginx的证书。里面包含两个文件,一个.key,一个.pem

配置nginx

  • 找到nginx配置文件

nginx -t

输出如下

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

可见我的nginx的配置文件在

/etc/nginx/nginx.conf

由于我在这个配置文件中使用了如下语句将多个站点的配置给区分开,所以我的配置都在这个路径下

include /etc/nginx/sites-enabled/*;
  • 配置

我的博客https://shusheng007.top的配置如下

server {
    # 服务器端口使用443,开启ssl
    listen  443 ssl;
    # 你网站的根目录
    root  /***/***/***/wordpress;
    # index
    index index.php index.html index.htm;
    # 域名,多个以空格分开
    server_name  shusheng007.top  www.shusheng007.top;

    # 我们刚从阿里云下载的ssl证书地址
    ssl_certificate     /etc/nginx/cert/***.shusheng007.top.pem;  # pem文件的路径
    ssl_certificate_key  /etc/nginx/cert/***.shusheng007.top.key; # key文件的路径

    # ssl验证相关配置
    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;   #使用服务器端的首选算法

     location / {
         ...
     }

     location ~ \.php$ {
        ...
      }
}

#http跳转为https
server {
    listen  80;
    server_name  shusheng007.top  www.shusheng007.top;
    rewrite ^ https://$host$request_uri? permanent;
}
  • 验证

验证配置文件是否正确

nginx -t

重启nginx

service nginx restart

总结

由于浏览器霸主google Chrome强推https,http怕是很快没有立锥之地了...最后欢迎访问书生的博客汲取知识:ShuSheng007的博客


Comment