Ruyu-Blog 博客升级HTTPS
首先需要SSL证书
推荐免费SSL证书
Let's Encrypt
官网:https://letsencrypt.org/zh-cn/
Let's Encrypt 是一个免费提供SSL证书的网站
手动申请
因为我的项目使用的是Docker不是,自动申请/续签不太适用,所以使用手动申请,自动申请方法自己去看官方文档
使用Certbot ACME客户端
选择好对应的环境
我的是 Nginx + CentOS7的环境
安装 Certbot
bash
sudo snap install --classic certbot
准备 Certbot 命令
bash
sudo ln -s /snap/bin/certbot /usr/bin/certbot
手动运行方式
bash
certbot -d 域名(可以使用*.代表所有二级域名) --manual --config-dir config --work-dir work --logs-dir logs --preferred-challenges dns certonly
后续根据提示进行邮箱填写、DNS的TXT记录验证、等等…… 然后会得到两个关键文件,注意看提示信息的路径
其他证书
当然你也可以用其他的SSL证书,如腾讯云、阿里云,注意要把证书文件名跟本篇文章教程证书文件名一样,不然容易出问题
Nginx配置
项目目录新建ssl目录,把这两个文件copy进去
bash
mkdir ssl
更改Dockerfile
FROM nginx
MAINTAINER 博客前台
RUN rm /etc/nginx/conf.d/default.conf
COPY default.conf /etc/nginx/conf.d/
COPY ssl/fullchain.pem /etc/nginx/ssl/fullchain.pem
COPY ssl/privkey.pem /etc/nginx/ssl/privkey.pem
COPY nginx.conf /etc/nginx/nginx.conf
COPY dist/ /usr/share/nginx/html/
更改default.conf
server {
listen 443 ssl; # 监听端口
server_name [主域名]; # 域名
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
# 配置代理路径
location /api/ {
proxy_pass http://[后端ip+:[端口]]/; # 转发请求的目标地址
proxy_set_header Host $host; # 设置请求头中的Host字段
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 设置HTTP头中的X-Forwarded-For字段,表示客户端真实IP,多个IP用逗号隔开
proxy_set_header X-Real-IP $remote_addr; # 设置请求头中的X-Real-IP字段,表示客户端真实IP
}
# 配置代理路径
location /wapi/ {
proxy_pass https://[音乐后端]/; # 转发请求的目标地址
}
# 配置错误页面
error_page 404 /404.html; # 404错误页
location = /404.html {
internal; # 不接受外部访问
root /usr/share/nginx/html; # 404错误页文件所在目录
}
}
server {
listen 443 ssl;
server_name [后台域名];
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
location / {
proxy_pass http://[后台地址或者内外ip]:[端口,部署文档是:81]/;
client_max_body_size 100M;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 自己部署的一言接口,用官网的可以删除
server {
listen 443 ssl;
server_name [域名];
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
location / {
proxy_pass http://[后台地址或者内外ip]:[端口]/;
}
}
server {
listen 443 ssl;
server_name [minio域名];
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
location / {
proxy_pass http://[后台地址或者内外ip]:[端口]/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 音乐模块前台(菜单栏那个),如果没有就删掉
server {
listen 443 ssl;
server_name [音乐模块前台域名];
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
location / {
proxy_pass http://[后台地址或者内外ip]:[端口]/;
}
}
server {
listen 443 ssl;
server_name [音乐后端域名];
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
location / {
proxy_pass http://[后台地址或者内外ip]:[端口]/;
}
}
# 按照你的需求,要啥就配啥,如一言,跟音乐模块前台不需要的就可删除对应配置
server {
listen 80;
server_name [前台域名] www.[前台域名] [后台域名] [一言接口] [minio域名] [音乐前台]
return 301 https://$host$request_uri;
}
新建nginx.conf
bash
vim default.conf
内容
bash
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
include /etc/nginx/conf.d/*.conf;
}
修改运行命令
多加一个 443端口
bash
docker run --name blog-qt -d -p 80:80 -p 443:443 blog-qt
目录结构
reset_blog-qt 文件可以无视,这是我自己的脚本文件
最后
最后按照部署文档重新 build 重新 run 就可以跑起来了,注意 run 命令使用上面的 注意:网站升级为https后,如果网站还有http的东西,就会报不安全错误,所有http链接的相关图片将无法加载,需要把相关的请求接口跟图片路径也该为https的,所以上面也配了https的一言跟音乐后端接口等等,相关图片只能自己去数据库把http改为https了