CentOS7系统下Nginx网站支持HTTPS笔记

很早之前就看到了耗子叔的这篇文章《如何免费的让网站启用HTTPS》,今天参考后把站点升级到了HTTPS, 基于以下两个原因,还是决定做一个笔记:

原因一:耗子的文章操作系统是Ubuntu 14.04, 这里是CentOS7;
原因二:按照网页 https://certbot.eff.org上CentOS7的安装教程执行,遇到了一些问题。

支持HTTPS免费解决方案Let’s Encrypt请查看耗子的文章,说的很清楚了,这里只是记录了CentOS7下的安装流程。

安装流程共9步:

0、安装更新依赖库urllib3

# 不执行可能提示You are using pip version 9.0.1, however version 18.0 is available
pip install --upgrade pip

# 不执行可能提示 python-urllib3.noarch 0:1.10.2-5.el7
pip install --upgrade --force-reinstall 'requests==2.6.0' urllib3

1、安装Certbot

sudo yum install python2-certbot-nginx

2、增加Nginx路径软连接(如果你的Nginx安装路径是/usr/bin/nginx则跳过这一步)

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
ln -s /usr/local/nginx/conf/ /etc/nginx

3、运行自动配置命令

# 如果提示The error was: NoInstallationError()请检查上面一步
sudo certbot —nginx

certbot会自动检查到你的nginx.conf下的配置,把你所有的虚拟站点都列出来,然后让你选择需要开启HTTPS的站点。你就简单的输入列表编号(用空格分开),如果不输入直接回车就是选择全部站点。还会让你选择是否要将HTTP的请求301到HTTPS上,选择2重定向就好了。

然后,certbot就帮你下载证书并更新到nginx.conf中。
查看nginx.conf变动的内容如下

# server块中listen 80;被替换成下面的指令
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/niliu.me/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/niliu.me/privkey.pem; # managed by Certbot

# 新增了一个server块
server {
        if ($host = niliu.me) {
            return 301 https://$host$request_uri;
        } # managed by Certbot


        listen       80;

        server_name  niliu.me;
        return 404; # managed by Certbot
 }

4、听取耗子的建议,配置成HTTP2

# listen 443 ssl;
listen 443 ssl http2;

5、把防止未绑定域名解析的配置也同步变更, 80换成443

server {
        #listen 80 default_server;
        listen 443 default_server;
        server_name _;
        return 444;
 }

6、重启Nginx

systemctl reload nginx

7、测试验证
记录下我的问题:浏览器访问https://niliu.me提示网站无法访问,
telnet 443端口是通的,服务器上curl ‘https://niliu.me’是能获取到首页内容到,发现防火墙还需要开启443端口

systemctl start firewalld.service
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload

8、更新证书(证书几个月后会过期,定期每月更新一次)

crontab -e
# 增加更新任务
0 0 1 * * /usr/bin/certbot renew --force-renewal
5 0 1 * * /usr/bin/systemctl reload nginx

9、把站点中的js/css资源协议换成https
图片好像不用换,浏览器不会报错

操作起来还是很简单的,HTTPS毕竟更加安全,自己的东西花点心血也值得。

(全文完)

发表评论

电子邮件地址不会被公开。 必填项已用*标注