🎯 本文摘要
本文是一份面向实践的 Nginx 综合指南。你将系统学习到如何在 Windows 和 Linux 系统上安装与配置 Nginx,掌握核心的安全加固技巧,并学会将 Nginx 与 Flask 或 FastAPI 等 Python Web 框架无缝结合,用于生产环境部署。同时,文中提供了常见问题的排查思路,帮助你快速定位和解决难题。
🚀 Nginx:不只是个“发文件的”
很多人初识 Nginx,以为它只是个高性能的静态文件服务器。其实,它更像一个万能的“接线员”或“交通警察”。它能处理并发连接(事件驱动、异步非阻塞),能做反向代理(把你后端的应用“藏”起来),能负载均衡(把流量合理分发给多个后端),还能缓存内容、压缩数据、终结 SSL 加密……
理解这一点,再看它的配置文件,你就会明白那些 location、proxy_pass 指令都是在指挥“交通”。
🔧 第一部分:安装与配置(Windows & Linux)
1. Linux 下安装(以 Ubuntu/Debian 为例)
Linux 是 Nginx 的主战场,安装最简单。
sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
安装完成后,浏览器访问你的服务器 IP,看到“Welcome to nginx!”页面,就说明成功了。
2. Windows 下安装
Windows 下通常用于开发测试。直接从官网下载压缩包:
启动方法:
cd C:\你的路径\nginx-1.xx.x
start nginx
nginx.exe -s stop
nginx.exe -s quit
nginx.exe -s reload
如果启动后,未能正常访问,可查看解压后目录下的logs文件夹下日志记录以排查错误原因,如:80端口占用等
⚙️ 第二部分:核心配置与安全设置
Nginx 的核心是配置文件,通常位于:
- Linux:
/etc/nginx/nginx.conf - Windows:
conf/nginx.conf
🎯 基础安全加固(必做项!)
server_tokens off;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
client_max_body_size 10m;
警告:修改配置文件后,务必使用 nginx -t 测试语法,确认无误后再 nginx -s reload 重载配置。
🚀 第三部分:与 Flask / FastAPI 结合(实战演示)
这是 Python 开发者最关心的部分。我们通常不直接让 Nginx 运行 Python,而是让 Nginx 作为反向代理,将动态请求转发给后端的 Python 应用服务器(如 Gunicorn 或 Uvicorn)。
🎯 部署架构图
用户 → Nginx (80/443端口) → 反向代理 → Gunicorn/Uvicorn (本地某个端口,如 8000) → 你的 Flask/FastAPI 应用
1. 准备你的 Python 应用
假设你有一个 FastAPI 应用 main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
使用 Uvicorn 启动它(监听本机 8000 端口):
uvicorn main:app --host 127.0.0.1 --port 8000
2. 配置 Nginx 反向代理
在 /etc/nginx/sites-available/(Linux)或 conf/ 目录下(Windows),创建一个配置文件,如 myapp.conf:
(建议直接复制nginx.conf建立复本,然后修改指定server部分即可,以防止未知的语法错误,如:分号缺失等)
server {
listen 80;
server_name your_domain.com;
location /static {
alias /path/to/your/static/files;
expires 30d;
}
location / {
proxy_pass http://127.0.0.1:8000;
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;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
}
在 Linux 上,需要创建符号链接启用该配置:
sudo ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
在 Windows 上,同样需要重新指定配置文件路径:
.\nginx.exe -t -c .\conf\myapp.conf
.\nginx.exe -s reload
现在,访问你的服务器 IP 或域名,Nginx 就会把请求透明地转发给运行在 8000 端口的 FastAPI 应用了!Flask 应用配置方法完全一致。
⚠️ 第四部分:常见问题与排查(踩坑指南)
1. 访问出现 502 Bad Gateway
- 原因99%:后端应用(Gunicorn/Uvicorn)没启动,或者端口没对上。
- 排查:检查后端服务是否在运行 (
ps aux | grep uvicorn),并确认 proxy_pass 的地址和端口是否正确。
2. 403 Forbidden
- 排查:检查 Nginx 进程用户(通常是
www-data 或 nginx)是否有权限读取你配置的静态文件或目录。
3. 静态文件加载不了,CSS/JS 失效
- 排查:检查
location /static 的 alias 路径是否正确,以及文件是否存在。
4. 配置修改后不生效
- 牢记流程:改配置 →
nginx -t 测试 → nginx -s reload 重载。 - 如果还不生效,尝试重启 Nginx 服务,并检查错误日志:
tail -f /var/log/nginx/error.log。
转自https://www.cnblogs.com/ymtianyu/p/19442584
该文章在 2026/1/5 15:28:18 编辑过