咱们都知道http协议是超文本传输协议,早期的网站使用的都是http,可是并不安全,数据在传输过程当中容易被拦截篡改。因此后面有了https,也就是通过ssl加密的http协议。本文主要对网站配置https作一个总结,对https的概念不作具体介绍,想了解的能够参考百度百科或者维基百科中的介绍。html
要想配置https,首先要获取ssl证书。常见的有 Godaddy 、 GlobalSign等收费机构签发的证书,固然也有 ISRG ( Internet Security Research Group )推出的免费证书==Let’s Encrypt==,不过要每三个月更新一次。当前网站用的就是Let’s Encrypt免费证书。linux
采用Let’s Encrypt证书配置https,最简单的办法就是Certbot,可是因为腾讯云的域名解析服务器有防火墙限制,致使执行./certbot-auto certonly命令的时候,一直没办法解析域名。nginx
无奈只好采用其它办法。腾讯云其实本身有封装一套获取Let’s Encrypt证书的方法。
具体详见:腾讯云DNSPod API申请Let’s Encrypt泛域名证书浏览器
按照步骤操做到最后一步就成功了一半了,而后就是怎么使用这些证书。详情能够参考
证书安装指引。个人网站用的是nginx作的方向代理。按照指导配置以下:安全
server { listen 80; server_name www.iwillhaveacatoneday.cn; rewrite ^(.*) https://$server_name$request_uri permanent; } server { listen 443; server_name www.iwillhaveacatoneday.cn; #填写绑定证书的域名 ssl on; ssl_certificate 1_iwillhaveacatoneday.cn_bundle.crt; ssl_certificate_key 2_iwillhaveacatoneday.cn.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 ssl_prefer_server_ciphers on; location ^~ /static/ { root /usr/share/nginx/html; } location / { proxy_pass http://backend$request_uri; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 10m; } }
一波三折,好不容易获取证书,配置完nginx.conf。在重启nginx后,又遇到问题服务器
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
根据提示咱们执行==systemctl status nginx.service==(systemctl命令),从打印出来的日志咱们发现了错误session
nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)
看来是nginx.pid文件丢失致使没法停掉nginx进程。
解决方案详见 Nginx 重启时丢失nginx.pid文件解决方法
咱们直接简单粗暴用==pkill -9 nginx==停掉了Nginx,而后重启,顺利启动。ssh
激动地在浏览器输入域名,回车,结果显示==拒绝了咱们的链接请求==。WTF???明明我均可以经过ssh链接到服务器,拒绝链接请求什么鬼。不过仔细一想多是是由于装了防火墙,把443端口给禁了,致使HTTPS服务无法访问。tcp
由于腾讯云的安全组不是很好用,常常开发了端口结果没生效,当时就把安全组的端口所有暴露了,而后本身装了firewalld。因此只须要把firewalld的443端口开发就好网站
firewall-cmd --list-ports #查看防火墙开放的端口 firewall-cmd --zone=public --add-port=443/tcp --permanent #防火墙添加443端口 firewall-cmd --reload #重启防火墙
而后重启Nginx,刷新页面,结果又报错了(活着好难。。。)
502 bad gateway
这回nginx应该没啥问题,估计是网站挂了,因而跑去看日志,果真发现一堆异常,程序貌似没有成功启动。为了确认,看下有没有网站的进程
ps -ef|grep solo
果真没有进程。重启网站后,再刷新,终于看到熟悉的首页,https成功配置完成。