以下是一些Nginx常见配置实例及其分析,涵盖基础配置、优化场景和典型用例:
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
index index.html;
try_files $uri $uri/ =404;
}
location ~* \.(jpg|png|css|js)$ {
expires 30d;
access_log off;
}
}
分析:
- 通过root
指令指定静态文件根目录
- try_files
实现优雅的回退机制(优先匹配URI,最后返回404)
- 对静态资源(图片/CSS/JS)设置缓存头并关闭日志
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
关键点:
- proxy_pass
将请求转发到本地3000端口的应用服务
- 通过proxy_set_header
传递原始主机头和客户端IP
upstream backend {
server 10.0.0.1:8080 weight=3;
server 10.0.0.2:8080;
server 10.0.0.3:8080 backup;
}
server {
location / {
proxy_pass http://backend;
health_check interval=5s;
}
}
策略说明:
- 主服务器按3:1比例分配请求
- backup
参数指定备用服务器
- 主动健康检查(需Nginx Plus)
server {
listen 443 ssl http2;
server_name secure.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
# HSTS
add_header Strict-Transport-Security "max-age=31536000" always;
}
安全优化: - 禁用老旧TLS协议 - 使用强密码套件 - 启用HTTP/2 - 配置HSTS强制HTTPS
server {
# 启用零拷贝技术
sendfile on;
# 大文件传输优化
aio on;
directio 4m;
# 缓冲区设置
client_body_buffer_size 128k;
client_max_body_size 20m;
}
http {
keepalive_timeout 65;
keepalive_requests 100;
# 文件描述符缓存
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
}
location /api/ {
add_header 'Access-Control-Allow-Origin' '$http_origin';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Content-Type';
# 预检请求处理
if ($request_method = 'OPTIONS') {
return 204;
}
}
location ~* \.(jpg|png)$ {
valid_referers none blocked example.com *.example.com;
if ($invalid_referer) {
return 403;
}
}
location /blog {
rewrite ^/blog/(.*)$ /newpath/$1 permanent;
}
日志分析:
http {
log_format main '$remote_addr - $request_time - "$request"';
access_log /var/log/nginx/access.log main buffer=32k;
error_log /var/log/nginx/error.log warn;
}
变量调试:
location /debug {
return 200 "$host\n$uri\n$args";
}
bash
nginx -t
bash
nginx -s reload
include
指令模块化配置(如分离SSL配置、公共头配置等)需要针对特定场景的详细配置方案,可以提供更具体的需求场景。