什么是 Nginx 反向代理
反向代理是介于客户端和服务器之间的中间层。客户端请求先到达 Nginx,Nginx 再将请求转发到后端服务器。这实现了负载均衡、安全防护、缓存加速等功能。
安装 Nginx
# macOS brew install nginx # Ubuntu/Debian sudo apt update && sudo apt install nginx # 启动 Nginx sudo nginx # 测试配置 nginx -t
基础配置结构
http {
# 全局配置
sendfile on;
keepalive_timeout 65;
# 服务器配置
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html;
}
}
}
反向代理配置
最基础的反向代理
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
常用 proxy_set_header 指令
proxy_set_header Host $host; # 传递原始 Host proxy_set_header X-Real-IP $remote_addr; # 传递真实 IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 传递协议
HTTPS 配置
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
负载均衡配置
upstream backend {
least_conn; # 最少连接算法
# ip_hash; # IP 哈希算法
# fair; # 响应时间算法(需第三方模块)
server 127.0.0.1:3000 weight=3;
server 127.0.0.1:3001 weight=2;
server 127.0.0.1:3002 weight=1;
# server 127.0.0.1:3003 backup; # 备用服务器
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
常用场景
1. Node.js 应用
server {
listen 80;
server_name node-app.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
}
}
2. Python Flask/Django
server {
listen 80;
server_name python-app.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3. WordPress
server {
listen 80;
server_name myblog.com;
root /var/www/wordpress;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
proxy_pass http://127.0.0.1:9000;
include fastcgi_params;
}
}
4. 静态资源 + API 代理
server {
listen 80;
server_name mysite.com;
# 静态资源
location /static/ {
alias /var/www/static/;
expires 30d;
}
# API 反向代理
location /api/ {
proxy_pass http://backend-api:8080/;
}
}
常用命令
# 测试配置 nginx -t # 重载配置(不中断服务) nginx -s reload # 停止服务 nginx -s stop # 优雅停止 nginx -s quit
总结
Nginx 是每个开发者都应该掌握的工具。学会配置反向代理,你可以轻松实现多应用部署、HTTPS 支持、负载均衡等功能。建议从简单的配置开始,逐步深入。