关于网站nginx的配置方法
脱离 NPM 图形界面,直接手写 Nginx 配置文件,正是深入理解反向代理底层逻辑的必经之路。NPM 的本质,其实就是一个帮你自动生成并重载 nginx.conf 文件的后台面板。
如果不使用 NPM,纯手工实现你的 originspace.work 博客反向代理,你需要自己管理容器编排、Nginx 配置文件以及SSL 证书。
具体操作可以拆解为以下三个核心步骤:
1. 替换 Docker Compose 里的接入层
你需要把 NPM 容器替换为官方原生的 Nginx 容器。新建一个 /opt/nginx/docker-compose.yml:
YAML
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
# 核心:手动将宿主机写好的配置文件映射到容器内覆盖默认配置
- ./conf.d:/etc/nginx/conf.d
# 手动挂载证书目录
- ./ssl:/etc/nginx/ssl
networks:
- default
networks:
default:
name: web-net
external: true
2. 手写核心的 Nginx 配置文件
在宿主机新建 /opt/nginx/conf.d/halo.conf 文件,这段代码就是 NPM 面板背后真正在跑的东西:
Nginx
# 第一部分:监听 80 端口,强制将所有 HTTP 流量 301 重定向到 HTTPS
server {
listen 80;
server_name originspace.work;
return 301 https://$host$request_uri;
}
# 第二部分:监听 443 端口,处理 SSL 加密与反向代理
server {
listen 443 ssl http2;
server_name originspace.work;
# 声明 SSL 证书物理路径(对应 Compose 挂载的目录)
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 现代 SSL 安全配置(NPM 也是默认生成这套密码套件)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# 核心转发逻辑
location / {
# 直接通过内部自定义网络 web-net 找到 halo 容器的 8090 端口
proxy_pass http://halo:8090;
# 必须携带的重要请求头,否则 Halo 后台拿不到访客真实 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;
# 开启 WebSocket 支持(对应 NPM 面板里勾选的 Websockets Support)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
3. 手动申请与管理 SSL 证书
没有了 NPM 面板的“一键申请”,你需要自己在宿主机使用 Certbot 或 acme.sh 等命令行工具来签发证书。
例如使用 Certbot 申请:
Bash
# 安装 certbot
yum install epel-release -y && yum install certbot -y
# 申请独立证书(需确保 80 端口未被占用)
certbot certonly --standalone -d originspace.work -m 你的邮箱@xx.com --agree-tos
申请成功后,Certbot 会把 fullchain.pem 和 privkey.pem 生成在 /etc/letsencrypt/live/originspace.work/ 目录下。你只需把它们拷贝到 /opt/nginx/ssl/ 目录中,然后执行 docker compose restart nginx,绿锁就配置完成了。
评论