主题
09 · Nginx 反向代理与静态站
目标:用 Nginx 提供静态页,并把请求反代到本机应用端口;会查 access/error。
官方:nginx.org docs
1. 环境前提
- 已
apt install nginx(04) - ufw / 安全组已放行 80(07)
- 会
systemctl与nginx -t(08、本文)
2. 配置在哪
Ubuntu 常见布局:
text
/etc/nginx/nginx.conf # 主配置(一般 include sites)
/etc/nginx/sites-available/ # 可用站点定义
/etc/nginx/sites-enabled/ # 已启用(常为软链)
/var/www/html/ # 默认静态根
/var/log/nginx/access.log
/var/log/nginx/error.log1
2
3
4
5
6
2
3
4
5
6
改完必做:
bash
sudo nginx -t
sudo systemctl reload nginx1
2
2
-t 失败:不要 reload,先修语法。
3. 静态站最小页
bash
echo '<h1>lab static</h1>' | sudo tee /var/www/html/index.html
curl -s http://127.0.0.1/1
2
2
公网(安全组 + ufw 已开 80):
bash
curl -s http://公网IP/1
4. 反向代理(本系列关键路径)
假设后端将听 127.0.0.1:8080(第 10 篇落地)。先用一个临时后端验证反代:
bash
# 另开一个 SSH 会话;仅前台演示
python3 -m http.server 8080 --bind 127.0.0.1
# 若无 python3:可用 10 篇的 Go/Node;此处只为通反代1
2
3
2
3
新建站点(把文件放到 available 再启用):
bash
sudo tee /etc/nginx/sites-available/lab-proxy > /dev/null <<'EOF'
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
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;
}
}
EOF
# 备份并替换默认站点软链(练习机)
sudo rm -f /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/lab-proxy /etc/nginx/sites-enabled/lab-proxy
sudo nginx -t && sudo systemctl reload nginx
curl -sI http://127.0.0.1/1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
看到来自后端的响应即成功。演示完可 Ctrl+C 停 python;第 10 篇用常驻服务顶上。
若仍想保留默认静态站:不要删 default,另起 server_name 或改 location /api/ 只反代子路径(进阶,本系列主线用整站反代即可)。
5. 日志与「80 不通」排查顺序
bash
sudo tail -n 50 /var/log/nginx/error.log
sudo tail -n 50 /var/log/nginx/access.log
sudo systemctl status nginx
sudo ss -tulpn | grep ':80'
sudo ss -tulpn | grep ':8080'
curl -v http://127.0.0.1/
curl -v http://127.0.0.1:8080/1
2
3
4
5
6
7
2
3
4
5
6
7
顺序回顾(接 05):
text
Nginx 进程 → 80 在听 → 本机 curl :80
→ 后端 :8080 在听 → curl :8080
→ error.log 里 upstream 报错?
→ 云安全组 / ufw 是否放行 80?1
2
3
4
2
3
4
6. 云机 vs WSL
| 云 Ubuntu | WSL2 | |
|---|---|---|
| 装法 | apt | apt |
| 外网访问 | 安全组 + ufw | 多为 localhost |
| sites-enabled | Ubuntu 习惯 | 相同 |
7. 动手清单
- [ ] 改
/var/www/html/index.html并能curl看到 - [ ] 写出
lab-proxy,nginx -t通过并 reload - [ ] 后端听 8080 时,经 80 反代成功
- [ ] 会打开 access/error 各看一行
8. 常见翻车
| 翻车 | 处理 |
|---|---|
nginx -t 失败仍 reload | 先修配置 |
502 Bad Gateway | 后端没起来或地址/端口错;看 error.log |
两个 server 都 default_server | 冲突;只留一个 default |
| 改了 available 没链到 enabled | 检查 sites-enabled 软链 |
9. 官方入口
下一篇:部署迷你 Node/Go 服务 —— systemd 常驻 + 本篇反代 = 可验收交付。
