0aa8fe6
这次没有正文改动。
这是 linux/Nginx 部署与反向代理.md 的改动记录。后台每次保存都会留一份快照,
这里显示的是快照之间的差异,不会混入其他文章的改动。
还没有后台修改记录。
下面是 Git 里的提交,可能包含其他文章的改动(因为一次提交会带上工作区所有变化)。
0aa8fe6
这次没有正文改动。
be5956e
@@ -0,0 +1,78 @@ +--- +tags: [nginx, 反向代理, Linux] +order: 20 +--- + +# Nginx 部署与反向代理 + +## 场景 + +一台 Linux 上要让几个内部服务共用 80/443,或者给后端应用加一层 TLS。 + +## 前置条件 + +- 域名解析指向这台机器 +- 后端服务已经在本地端口上跑起来 +- 防火墙/安全组放行 80、443 + +## 配置 + +```bash +# 安装 +dnf install -y nginx # CentOS / 麒麟 +apt install -y nginx # Ubuntu / Debian + +# 反代配置 +cat >/etc/nginx/conf.d/app.conf <<'EOF' +server { + listen 80; + server_name kb.example.com; + + client_max_body_size 100m; + + location / { + proxy_pass http://127.0.0.1:8080; + 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; + } + + location /ws/ { + proxy_pass http://127.0.0.1:8080; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } +} +EOF + +nginx -t +systemctl enable --now nginx +systemctl reload nginx +``` + +## 验证 + +```bash +nginx -t # 语法 +curl -I http://127.0.0.1/ # 本机 +curl -I -H "Host: kb.example.com" http://127.0.0.1/ +tail -f /var/log/nginx/error.log +``` + +## 回滚 + +```bash +rm /etc/nginx/conf.d/app.conf +nginx -t && systemctl reload nginx +``` + +## 坑 + +- **`client_max_body_size` 不配**,上传稍大一点就 413。 +- `proxy_pass http://127.0.0.1:8080;` 结尾有没有 `/` 决定路径怎么拼,别想当然。 +- 后端拿到的客户端 IP 全是 127.0.0.1,除非把 `X-Forwarded-For` 传下去并在后端信任。 +- SELinux 开着时,反代连接被拦,`setsebool -P httpd_can_network_connect 1`。 +- 改完配置一定要先 `nginx -t`,直接 reload 会把旧配置也带挂。 +- 证书路径写错时 nginx 起不来,`systemctl status nginx` 会给出具体路径。