搞定 Nginx 配置!反向代理、HTTPS、缓存优化一篇就够了
Nginx 是一款高性能的 HTTP 和反向代理服务器,广泛应用于 Web 服务、负载均衡和 API 网关等场景。
本文将详细介绍 Nginx 的常用配置,涵盖基本配置、静态资源服务、反向代理、负载均衡、HTTPS 配置、缓存优化等内容,帮助读者快速掌握 Nginx 的核心功能。
一、Nginx 基础配置
Nginx 的核心配置文件通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf,其结构主要分为:
全局块(main):影响 Nginx 整体运行的配置(如 worker 进程数、日志路径等)。events 块:配置网络连接相关参数(如最大并发连接数)。http 块:定义 HTTP 服务器行为(如虚拟主机、反向代理等)。全局配置示例:
复制
user nginx; # 运行 Nginx 的用户
worker_processes auto; # 自动匹配 CPU 核心数
error_log /var/log/nginx/error.log warn; # 错误日志路径
pid /var/run/nginx.pid; # 进程 PID 文件位置
events {
worker_connections 1024; # 每个 worker 进程的最大连接数
use epoll; # 使用 epoll 高效事件模型(Linux)
}1.2.3.4.5.6.7.8.9.10.
二、静态文件服务
Nginx 常用于托管静态资源(HTML、CSS、JS、图片等),配置简单且高效。
1. 基础静态服务器配置复制
http {
server {
listen 80; # 监听 80 端口
server_name example.com; # 域名或 IP
location / {
root /var/www/html; # 静态文件根目录
index index.html; # 默认首页
}
# 单独配置图片缓存
location ~* \.(jpg|png|gif)$ {
root /var/www/images;
expires 30d; # 客户端缓存 30 天
}
}
}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.
三、反向代理配置
Nginx 可作为反向代理,将请求转发到后端服务器(如 Tomcat、Node.js、Python 应用等)。
1. 基本反向代理复制
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:8080; # 转发到本机 8080 端口
proxy_set_header Host $host; # 传递原始 Host 头
proxy_set_header X-Real-IP $remote_addr; # 传递客户端 IP
}
}1.2.3.4.5.6.7.8.9.10.11.
Nginx 可分配请求到多个后端服务器,提高系统可用性。
复制
http {
upstream backend {
server 192.168.1.100:8080 weight=3; # 权重 3,处理更多请求
server 192.168.1.101:8080;
server 192.168.1.102:8080 backup; # 备用服务器
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend; # 代理到 upstream
proxy_next_upstream error timeout http_500; # 故障转移策略
}
}
}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.
四、HTTPS 安全配置
Nginx 支持 SSL/TLS 配置,可用于加密数据传输,提高安全性。
1. 基本 HTTPS 配置复制
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 优化 SSL 性能
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
root /var/www/html;
index index.html;
}
}
# HTTP 强制跳转 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.
五. 缓存优化
Nginx 可缓存动态内容,减少后端压力,提高响应速度。
1. 代理缓存配置复制
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
listen 80;
server_name cache.example.com;
location / {
proxy_pass http://backend;
proxy_cache my_cache; # 启用缓存
proxy_cache_valid 200 302 10m; # 缓存 200/302 响应 10 分钟
proxy_cache_valid 404 1m; # 缓存 404 响应 1 分钟
proxy_cache_key "$scheme$host$request_uri"; # 缓存键
}
}
}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.
六、日志与访问控制
Nginx 可以记录访问日志,并限制某些 IP 或请求频率。
1. 访问日志配置复制
http {
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;
}1.2.3.4.5.6.7.8.
复制
location /admin {
allow 192.168.1.100; # 允许特定 IP
deny all; # 拒绝其他所有 IP
}1.2.3.4.
复制
http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
location /api {
limit_req zone=req_limit burst=20 nodelay; # 每秒 10 请求,允许突发 20
proxy_pass http://backend;
}
}
}1.2.3.4.5.6.7.8.9.10.11.
七、结语
本文介绍了 Nginx 的常用配置,掌握以后可以灵活运用 Nginx 搭建高性能 Web 服务、API 网关或负载均衡系统。
关于更多高级功能(如 Lua 脚本、动态模块),读者可自行参考 Nginx 官方文档学习。
阅读剩余
THE END