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_connip_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_certificatessl_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;
}

allowdeny 指令用于限制特定 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 配置示例,实际使用中可以根据具体需求进行调整和扩展。