Nginx 是一个高性能的 HTTP 和反向代理服务器,常用于负载均衡、静态文件服务、反向代理等场景。以下是一些常见的 Nginx 配置示例和说明:
1. 基本配置
user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; include /etc/nginx/conf.d/*.conf; }
2. 静态文件服务
server { listen 80; server_name example.com; location / { root /var/www/html; index index.html index.htm; } location /images/ { alias /data/images/; } }
• root
指令用于指定网站的根目录。
• alias
指令用于将 URL 路径映射到文件系统的特定目录。
3. 反向代理
server { listen 80; server_name example.com; location / { proxy_pass http://backend_server; 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
指令用于设置请求头,传递客户端信息到后端服务器。
4. 负载均衡
upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; # 负载均衡算法 least_conn; # 最少连接数 # ip_hash; # 基于 IP 的哈希算法 } server { listen 80; server_name example.com; location / { proxy_pass http://backend; 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; } }
• upstream
块用于定义一组后端服务器。
• least_conn
和 ip_hash
是常见的负载均衡算法。
5. HTTPS 配置
server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { root /var/www/html; index index.html index.htm; } } server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
• listen 443 ssl
启用 HTTPS。
• ssl_certificate
和 ssl_certificate_key
分别指定 SSL 证书和私钥文件。
• return 301
用于将 HTTP 请求重定向到 HTTPS。
6. 重定向配置
server { listen 80; server_name old.example.com; return 301 https://new.example.com$request_uri; }
• return 301
用于永久重定向请求到新的 URL。
7. 静态文件缓存
server { listen 80; server_name example.com; location /static/ { alias /var/www/static/; expires 30d; add_header Cache-Control "public, no-transform"; } }
• expires
指令用于设置静态文件的缓存时间。
• add_header
指令用于添加自定义的响应头。
8. 限制访问
location /admin/ { allow 192.168.1.0/24; deny all; }
• allow
和 deny
指令用于限制特定 IP 地址或 IP 段的访问。
9. 日志配置
http { log_format custom '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$request_time"'; access_log /var/log/nginx/access.log custom; }
• log_format
指令用于自定义日志格式。
• access_log
指令用于指定访问日志的路径和格式。
10. Gzip 压缩
http { gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_min_length 1000; gzip_comp_level 6; gzip_proxied any; gzip_vary on; }
• gzip
指令用于启用 Gzip 压缩。
• gzip_types
指定需要压缩的文件类型。
• gzip_min_length
设置压缩的最小文件大小。
• gzip_comp_level
设置压缩级别。
11. 防止点击劫持
add_header X-Frame-Options "SAMEORIGIN";
• X-Frame-Options
响应头用于防止点击劫持攻击。
12. 防止 MIME 类型嗅探
add_header X-Content-Type-Options "nosniff";
• X-Content-Type-Options
响应头用于防止 MIME 类型嗅探。
13. 防止 XSS 攻击
add_header X-XSS-Protection "1; mode=block";
• X-XSS-Protection
响应头用于启用浏览器的 XSS 过滤机制。
14. 限制请求速率
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location /api/ { limit_req zone=one burst=5; } } }
• limit_req_zone
指令用于定义限速区域。
• limit_req
指令用于应用限速规则。
15. 自定义错误页面
server { error_page 404 /404.html; location = /404.html { root /var/www/html/errors; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/html/errors; } }
• error_page
指令用于自定义错误页面。
这些是一些常见的 Nginx 配置示例,实际使用中可以根据具体需求进行调整和扩展。