想要实现 HTTPS 访问, 首先就要给域名申请 SSL 证书
这里拿 jonny.website 这个域名在 腾讯云 域名服务中申请 SSL 证书
对于一般站长来说, 没有必要使用付费的 SSL 证书, 所以这里演示免费的 SSL 证书的申请
首先登录 腾讯云
在云产品中定位到 域名服务, 然后点击 SSL 证书管理

进入 SSL 证书管理界面之后, 点击申请证书

这里选择 免费版 DVSSL 的证书申请, 点击确定后会让你填写你的个人信息和你的域名信息

密码可以自行设置或者不设置, 建议设置
填写好之后点下一步来到域名验证

这里以 手动 DNS 验证为演示, 确认申请

然后需要点击 查看证书详情

来到域名控制台, 这里以阿里云的域名控制台作为演示
选择添加解析, 并且输入 DNS 验证的相关信息

完成之后保存
之后回到 腾讯云 的 SSL 证书管理
点击查询按钮可以看到 DNS 验证是否成功

可以看到正常解析
到这里为止已经完成了对 jonny.website 域名的 SSL 证书申请
申请成功之后会有手机短信提示

接下来需要回到域名控制台下载证书

会得到一个以域名为名称的 .zip 压缩包, 里面有 Apache、Nginx、IIS 和 Tomcat 的证书文件
这里只需要 Nginx 的证书文件
将证书文件上传到服务器
接下来修改 Nginx 相关配置文件
在 server 中添加
rewrite ^(.*) https://$host$1 permanent;
来强制开启 HTTPS 访问
在 server 443 端口中添加
server_name 你的域名;
ssl on;
ssl_certificate 你证书的 .crt 文件的位置;
ssl_certificate_key 你证书的 .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;
下面给出一段完整的配置实例
server {
listen 80;
server_name demo.jonny.website;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443;
root /www/demo;
server_name demo.jonny.website;
ssl on;
ssl_certificate /home/Jonny/ssl/Nginx/1_jonny.website_bundle.crt;
ssl_certificate_key /home/Jonny/ssl/Nginx/2_jonny.website.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 / {
index index.php index.html index.htm;
auth_basic "http auth for Jonny";
auth_basic_user_file /etc/nginx/htpasswd/Jonny;
autoindex on;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
完成之后重启 Nginx
systemctl reload nginx
之后可以通过
Nginx -t
命令查看配置文件中是否存在错误
之后访问网站

会看到域名旁边多了一个锁

至此, 已经完成了对 HTTPS 的配置
另外这里有个提醒:
配置完成之后, 第一次访问网站的时候 Safari 会提示不信任这个证书, 但是不影响网站的访问, 点击继续即可
其他的浏览器没有试过, 可能也会出现相应的问题, 这个是不影响的
自創文章, 原著 : Jonny, 如若需要轉發, 在已經授權的情況下請註明出處 :《Nginx 下实现 HTTPS》https://jonny.vip/2017/06/28/nginx-%e4%b8%8b%e5%ae%9e%e7%8e%b0-https/
Leave a Reply