前提条件:
- 已经购买服务器
- 已经安装宝塔面板
- 已经有域名
- 已经申请ssl证书
方法一: 使用宝塔面板一键配置https
- 实例使用的是腾讯服务器并且在腾讯买的域名;首先将申请好的ssl证书下载:
选择下载Nginx版:
- 打开宝塔面板>网站>设置:
随后点击弹出窗口右侧SSL,打开上述下载好的SSL证书文件夹,将.pem
和.key
结尾的文件分别用记事本打开后复制其中的内容到对应的输入框:
- 点击保存,开启强制HTTPS,大功告成!
方法二:使用nginx手动配置 https
-
下载对应SSL证书(和方法一版本一致),在将证书文件夹中的
.pem
,.key
文件上传到对应文件夹下:/www/server/nginx/conf/
-
检查是否放行了443端口。随后打开宝塔面板的软件商店,找到nginx,点击设置,点击配置修改:‘
-
和server同级,另外写一个server,主要关注从
HTTPS start------
到HTTPS end------
以及头部的listen:
server {
listen 80;
listen 443 ssl http2;
server_name example.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
# HTTPS start------
# 如果访问的不是443端口跳转到https协议
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
# 上传的.pem和.key文件路径
ssl_certificate /www/server/nginx/conf/xxxxxx.pem;
ssl_certificate_key /www/server/nginx/conf/xxxxxx.key;
# 指定客户端可以重用会话参数的时间
ssl_session_timeout 10m;
#表示使用的加密套件的类型。
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
#表示使用的TLS协议的类型。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
# 服务端加密算法优先
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
# HTTPS end------
location / {
root /home/;
}
}
- 点击保存,重启nginx
说明: 比如我们现在要访问https://example.com/images/user-img.png
这样一张存放在服务器上的图片,当我们开启https服务后就可以通过上述方式访问,也能够通过http访问。因为http默认端口80,https默认端口443,当我们以80端口访问时就会被检测到不是443端口,从而强制切换到https协议即443端口。
这也是为什么同时listen 443 和 80 的原因~