参考博客1:https://www.jianshu.com/p/e321cc362e5d
参考博客2:https://www.jianshu.com/p/00b0f41274f9
参考博客3:https://blog.51cto.com/12880687/1952059
本文旨在记录次安装过程中遇到的问题及解决办法,安装过程参考“参考博客1”。前半部分将介绍 Let's Encrypt 的安装与证书获取,后半部分主要记录安装过程中遇到的问题。
环境
- Ubuntu 16.04
- Nginx
开始
1. 安装工具
sudo apt-get install letsencrypt
2. 域名配置
将域名
example.com
A 记录指向当前服务器的 IP 地址。3. 获取证书
- 暂停 Nginx
sudo service nginx stop
- 执行获取证书命令
sudo letsencrypt certonly --standalone
按提示输入对应的域名走完流程,生成的证书信息将存放在如下目录:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
4. 配置 Nginx
server { ...... listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ...... }
5. 重启 Nginx
sudo service nginx start
6. 证书自动更新
证书有效期只有90天,所以需要定期更新证书。
新建文件
certbot-auto-renew-cron
,内容如下:15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
执行命令:
crontab certbot-auto-renew-cron
每隔两个月的凌晨 2:15 将执行更新操作。
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
Creating virtual environment...
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/virtualenv.py", line 2363, in
main()
File "/usr/lib/python3/dist-packages/virtualenv.py", line 719, in main
symlink=options.symlink)
File "/usr/lib/python3/dist-packages/virtualenv.py", line 988, in create_environment
download=download,
File "/usr/lib/python3/dist-packages/virtualenv.py", line 918, in install_wheel
call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT)
File "/usr/lib/python3/dist-packages/virtualenv.py", line 812, in call_subprocess
% (cmd_desc, proc.returncode))
OSError: Command /root/.local/share/letsencrypt/bin/python - setuptools pkg_resources pip wheel failed with error code 1
解决办法:卸载重装 virtualenv
pip uninstall virtualenv
pip install virtualenv
Failed authorization procedure. kjfhaifahoa.cn (http-01): urn:ietf:params:acme:error:dns :: DNS problem: NXDOMAIN looking up A for kjfhaifahoa.cn - check that a DNS record exists for this domain
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: kjfhaifahoa.cn
Type: None
Detail: DNS problem: NXDOMAIN looking up A for kjfhaifahoa.cn -
check that a DNS record exists for this domain
解决办法:检查通过域名能否正确访问到服务器,如域名是否正确,域名是否已备案或备案是否已通过。
我出现这个问题时是因为域名正在备案,但还没有通过,域名备案通过后就没问题了。
这个是因为 nginx 没有装 ssl 模块,安装 ssl 模块即可
1.在nginx的安装目录执行
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
2.在nginx安装目录执行
make
3.上一步执行完重启 nginx,如果不报错,说明安装成功。如果报错,再执行下一句(亲测make install不会覆盖之前的配置)
make install
解决办法:这个是因为服务器 443 端口未开启( HTTPS 服务使用的是 443 端口)。开启 443 端口即可:
1. 我的是阿里云服务器,需要登录阿里云控制台,添加 “入方向” 规则
2. 设置防火墙,放行 443 端口,先运行 nginx 监听 443 端口, 再配置防火墙规则放行 443 端口
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
这个是因为 Let's Encrypt 证书不被360浏览器,换浏览器打开或者换证书即可。
腾讯提供免费的SSL证书,一年一换:https://console.cloud.tencent.com/ssl/apply
注意: 1)return 301 https://$server_name$request_uri;
2)return 301 https://$http_host$request_uri;
使用 http 发起请求时,这两种写法都能实现 http 转 https,却别是: 1)在浏览器地址栏能看到地址由 http 变为了 https,但是 2)看不到,也就是转发到 https 后浏览器地址栏实际看到的还是http
# http使用的是 80 端口,将 80 端口的请求都转发到 https 即 443 端口
server {
listen 80;
server_name kiion.cn www.kiion.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name kiion.cn www.kiion.com;
ssl_certificate /etc/letsencrypt/live/kiion.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kiion.cn/privkey.pem;
}