环境说明:
- OS : Centos 8
- Nginx版本:v1.20.1
1. 安装Nginx
- 首先卸载系统原有的nginx
dnf -y remove nginx 然后再用: rpm -qa|grep nginx 列出与nginx相关的依赖关系,利用: rpm -e 包名,一个一个删除干净。
- 开始安装:
dnf -y install wget tar groupadd www useradd -g www www wget https://nginx.org/download/nginx-1.20.1.tar.gz tar -zxvf nginx-1.20.1.tar.gz cd nginx-1.20.1 以下是一条长命令,务必一次性完整复制粘贴: ./configure --user=www \ --group=www \ --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_v2_module \ 编译及安装: make && make install
- 设置自启动:
编辑文档:nano /usr/lib/systemd/system/nginx.service
存盘退出,输入:[Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
systemctl start nginx
systemctl enable nginx
- 关闭防火墙:
systemctl stop firewalld systemctl disable firewalld systemctl mask firewalld nft flush ruleset
- 打开浏览器,输入: http://mysite.com (mysite.com改成你自己的域名或IP)
如果出现Nginx的欢迎界面,说明安装成功!
2. 利用Let’s Encrypt 生成证书
-
安装 snapd 及 certbot
dnf install snapd systemctl enable --now snapd.socket ln -s /var/lib/snapd/snap /snap snap refresh core snap install core dnf remove certbot snap install --classic certbot ln -s /snap/bin/certbot /usr/bin/certbot
-
生成证书
注意:在生成证书前,请务必将您的域名指向本机IP并生效(ping域名能正确显示本机IP)
准备妥当后,输入(注意这也是一条长命令):
certbot certonly --nginx \ --nginx-server-root /usr/local/nginx/conf/ \ --nginx-ctl /usr/local/nginx/sbin/nginx
题外话:certbot会自动寻找系统的nginx路径,但如果是编译安装的话,则必须手动指定,否则会报错。如果nginx是通过 dnf 默认安装的话,这一步更简单一些,只需要:
certbot certonly --nginx
(无需指定 --nginx-server-root 和 --nginx-ctl 路径)这一步会询问你几个简单的问题,比如邮件地址和域名等,这里就不赘述了,完成后,将会显示:
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter ‘c’ to cancel): mysite.com
Requesting a certificate for mysite.comSuccessfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mysite.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/mysite.com/privkey.pem
This certificate expires on 2022-01-28.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.如上所述,证书保存在 /etc/letsencrypt/live/mysite.com 这个路径里,有两个:
fullchain.pem 相当于公钥,privkey.pem 为私钥。
至此,证书生成完毕。
3. 将证书引入nginx并生效
-
编辑文档:
nano /usr/local/nginx/conf/nginx.conf
插入一个server段,位置与传统http(80端口)平级,为了避免出错,请先找到这一段:扫描二维码关注公众号,回复: 14926990 查看本文章server { listen 80;
然后在 server { 的上一行,插入:
server { listen 443 ssl; server_name mysite.com; # 证书路径: ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.php index.html index.htm; } }
存盘退出,输入:
systemctl restart nginx
让设置生效。这一步主要是注意证书的路径,其他没有什么太复杂的内容。
现在,输入:https://mysite.com (注意:跟前面不同的是,URL变成了https)
如果正常返回nginx欢迎界面的话,说明证书安装成功!如果用Chrome打开的话,在网址左边有一把锁型Logo,打开它,然后会看到一句话:
连接是安全的
点进去,可以看到证书的详细信息,颁发机构为:Let’s Encrypt
附加内容:网页版证书生成
- 上面的例子是利用Let’s Encrypt 特殊的程序 certbot 来实现验证的,所谓的验证,指的是你确实有这个域名的控制权,certbot 会分析你输入的域名以及对应主机IP的关系,决定是否颁发证书给你,否则所谓证书将变得毫无意义(不信你在证书生成的时候输入google.com 或者 qq.com 试试看 :)
- 那么问题来了,certbot是一个命令行程序,我们必须至少拥有命令行权限才能执行,如果碰到那些不提供SSH登录的虚拟网页空间或者因客观原因无法登录主机时,那就比较头疼了。
- 针对这一类情况,还有很多免费证书颁发机构可以在他们的网页上申请证书:
比如:
1、https://zerossl.com/
2、https://www.sslforfree.com/
3、https://www.cloudflare.com/ssl/
4、https://www.ssl.com/zh-CN/certificates/free/
以上这些机构都提供免费证书,不需要登录主机,但是他们会要求你在域名DNS设置中添加一个TXT字段,或者在主机网页空间中上传一个指定的文本文件等,以此证明你确实有该域名的控制权。方式大同小异,操作起来也很简单,在此就不赘述了,总而言之,不管用什么方法生成的证书,必然会发给你两个文件,一个是所谓的公钥(以pem或者crt为后缀),另一个文件是私钥(以key或者private为后缀),将这两个文件保存在指定位置,然后修改nginx.conf文件,指向它们即可,这和本文上述的套路一模一样。
结语
- https 是大势所趋,请尽快升级你的网站吧,愿本文能对你有所帮助。