Nginx反向代理教程

发布时间:2026/7/1 1:12:36
Nginx反向代理教程 Nginx反向代理从入门到实战配置指南什么是反向代理在互联网架构中代理服务器扮演着重要角色。正向代理是客户端与目标服务器之间的中介而反向代理则恰恰相反——它是客户端与后端服务器集群之间的“守门人”。当用户访问网站时请求首先到达反向代理服务器由它决定将请求转发到哪台后端服务器然后将响应返回给用户。Nginx作为高性能的HTTP和反向代理服务器以其卓越的并发处理能力和低内存消耗成为构建现代Web架构的首选工具之一。为什么选择Nginx作为反向代理1. 高性能采用事件驱动架构能够处理数万并发连接2. 低资源消耗内存占用少CPU利用率高3. 配置灵活简洁的配置文件语法易于理解和维护4. 功能丰富支持负载均衡、缓存、SSL终端、HTTP/2等5. 稳定性强被全球众多高流量网站验证如Netflix、GitHub等基础反向代理配置安装NginxbashUbuntu/Debian系统sudo apt updatesudo apt install nginxCentOS/RHEL系统sudo yum install epel-releasesudo yum install nginx验证安装nginx -v最小化反向代理配置创建一个简单的反向代理配置将访问example.com的请求转发到本地3000端口运行的应用nginx/etc/nginx/conf.d/reverse-proxy.confserver {listen 80;server_name example.com;location / {proxy_pass http://localhost:3000;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_pass指定后端服务器地址- proxy_set_header修改转发给后端服务器的请求头- $host原始请求的主机头- $remote_addr客户端真实IP地址- $proxy_add_x_forwarded_for追加客户端IP到X-Forwarded-For头高级反向代理功能1. 负载均衡配置Nginx支持多种负载均衡算法nginxupstream backend_servers {默认轮询算法server 192.168.1.101:8080;server 192.168.1.102:8080;server 192.168.1.103:8080;权重分配server 192.168.1.104:8080 weight3;server 192.168.1.105:8080 weight2;最少连接数算法least_conn;IP哈希算法会话保持ip_hash;}server {listen 80;server_name app.example.com;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}2. 健康检查与故障转移nginxupstream backend {server backend1.example.com:8080 max_fails3 fail_timeout30s;server backend2.example.com:8080 max_fails3 fail_timeout30s;server backup1.example.com:8080 backup; 备份服务器server backup2.example.com:8080 backup;}server {listen 80;location / {proxy_pass http://backend;proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;proxy_connect_timeout 5s;proxy_read_timeout 10s;proxy_send_timeout 10s;}}3. 缓存加速nginxproxy_cache_path /var/cache/nginx levels1:2 keys_zonemy_cache:10mmax_size1g inactive60m use_temp_pathoff;server {listen 80;location / {proxy_cache my_cache;proxy_cache_key $scheme$request_method$host$request_uri;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;add_header X-Cache-Status $upstream_cache_status;proxy_pass http://backend;}}4. WebSocket代理nginxserver {listen 80;location /ws/ {proxy_pass http://websocket_backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection upgrade;proxy_read_timeout 3600s;proxy_send_timeout 3600s;}}安全加固配置SSL终端与HTTP/2支持nginxserver {listen 443 ssl http2;server_name secure.example.com;ssl_certificate /etc/ssl/certs/example.com.crt;ssl_certificate_key /etc/ssl/private/example.com.key;安全增强配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;ssl_prefer_server_ciphers off;HSTS头add_header Strict-Transport-Security max-age31536000; includeSubDomains always;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Forwarded-Proto https;}}HTTP重定向到HTTPSserver {listen 80;server_name secure.example.com;return 301 https://$server_name$request_uri;}防止DDoS攻击nginx限制连接频率limit_req_zone $binary_remote_addr zoneone:10m rate10r/s;server {location /api/ {limit_req zoneone burst20 nodelay;proxy_pass http://api_backend;}}限制并发连接数limit_conn_zone $binary_remote_addr zoneaddr:10m;location /download/ {limit_conn addr 5; 每个IP最多5个并发连接proxy_pass http://download_backend;}实战场景配置示例场景1微服务API网关nginxupstream auth_service {server 10.0.1.10:3001;server 10.0.1.11:3001;}upstream user_service {server 10.0.1.20:3002;server 10.0.1.21:3002;}upstream product_service {server 10.0.1.30:3003;server 10.0.1.31:3003;}server {listen 80;server_name api.company.com;认证服务路由location /api/auth/ {proxy_pass http://auth_service;proxy_set_header X-Service-Name auth;}用户服务路由location /api/users/ {proxy_pass http://user_service;proxy_set_header X-Service-Name user;}产品服务路由location /api/products/ {proxy_pass http://product_service;proxy_set_header X-Service-Name product;}API文档location /api/docs {proxy_pass http://docs_service:4000;}}场景2动静分离配置nginxserver {listen 80;server_name www.example.com;静态资源 - 直接由Nginx处理location ~ \\.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf)$ {root /var/www/static;expires 365d;add_header Cache-Control public, immutable;access_log off;}动态请求 - 转发到应用服务器location / {proxy_pass http://app_backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;启用gzip压缩gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss text/javascript;}}性能优化技巧1. 连接池优化nginxupstream backend {server backend1.example.com;keepalive 32; 保持连接池大小}location / {proxy_http_version 1.1;proxy_set_header Connection ;proxy_pass http://backend;}2. 缓冲区优化nginxlocation / {proxy_buffering on;proxy_buffer_size 4k;proxy_buffers 8 4k;proxy_busy_buffers_size 8k;proxy_pass http://backend;}3. 启用压缩nginxgzip on;gzip_min_length 1024;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss text/javascript;gzip_vary on;监控与调试状态监控页面nginxserver {listen 8080;server_name localhost;location /nginx_status {stub_status on;access_log off;allow 127.0.0.1;deny all;}location /server_status {vhost_traffic_status_display;vhost_traffic_status_display_format html;access_log off;allow 127.0.0.1;deny all;}}日志配置优化nginxhttp {log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for rt$request_time uct$upstream_connect_time uht$upstream_header_time urt$upstream_response_time;access_log /var/log/nginx/access.log main buffer32k flush5s;error_log /var/log/nginx/error.log warn;}常见问题排查1. 502 Bad Gateway错误- 检查后端服务是否运行- 验证防火墙设置- 检查Nginx错误日志tail -f /var/log/nginx/error.log2. 性能问题- 使用nginx -t测试配置语法- 启用访问日志分析请求模式- 调整缓冲区大小和连接池设置3. 配置重载bash测试配置sudo nginx -t重新加载配置不中断服务sudo nginx -s reload重启Nginxsudo systemctl restart nginx结语Nginx反向代理是现代Web架构的核心组件通过合理配置可以实现负载均衡、高可用性、安全加固和性能优化。掌握Nginx反向代理的配置技巧能够显著提升Web服务的稳定性、安全性和扩展性。建议在生产环境部署前充分测试配置并根据实际流量模式持续优化参数设置。记住良好的Nginx配置不是一蹴而就的而是需要根据实际业务需求不断调整和优化的过程。从基础配置开始逐步添加高级功能最终构建出适合自己业务场景的高性能反向代理解决方案。