nginx 从零单排(三)

3 阅读1分钟

nginx.conf 通用生产级配置


一、完整 nginx.conf

# 定义Nginx运行的用户和用户组
user www-data;
# 工作进程数,建议 = CPU核心数,auto自动识别
worker_processes auto;
# 全局错误日志路径 & 日志级别
# 级别:debug | info | notice | warn | error | crit
error_log /var/log/nginx/error.log warn;
# Nginx进程号存放文件
pid /run/nginx.pid;
# 包含动态模块(Ubuntu默认)
include /etc/nginx/modules-enabled/*.conf;
# ------------------------------
# 事件模块(连接处理核心)
# ------------------------------
events {
    # 单个worker最大连接数(并发核心)
    worker_connections 1024;
    # 使用epoll模型(Linux高性能IO)
    use epoll;
    # 多进程accept锁,防止惊群效应
    multi_accept on;
}
# ------------------------------
# HTTP核心模块(所有网站配置都在这里)
# ------------------------------
http {
    # 文件扩展名与文件类型映射表
    include /etc/nginx/mime.types;
    # 默认文件类型
    default_type application/octet-stream;
    # 日志格式(自定义名称 main)
    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;
    # 防止网络阻塞小包堆积
    tcp_nopush on;
    tcp_nodelay on;
    # 长连接超时时间(秒)
    keepalive_timeout 65;
    # 隐藏Nginx版本号,提高安全
    server_tokens off;
    # 客户端请求头缓冲区大小
    client_header_buffer_size 3k;
    # 大型客户端请求头缓冲区
    large_client_header_buffers 4 64k;
    # 客户端上传文件大小限制
    client_max_body_size 100M;
    # ------------------------------
    # 【全局限流配置】
    # ------------------------------
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=conn:10m;
    # ------------------------------
    # 【全局缓存配置(API/静态资源)】
    # ------------------------------
    proxy_cache_path /var/cache/nginx/proxy_cache
        levels=1:2
        keys_zone=proxy_cache:10m
        max_size=10g
        inactive=60m
        use_temp_path=off;
    # Gzip全局开启(前端必开)
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    g_types text/plain text/css application/json application/javascript 
            text/javascript application/xml+rss text/xml;
    # ------------------------------
    # 包含子配置(所有站点放 conf.d/ 下)
    # ------------------------------
    include /etc/nginx/conf.d/*.conf;
}

二、这个 nginx.conf 后期怎么用?

规则:

主配置 nginx.conf 不动!

所有站点、反向代理、权限、缓存 全部写在:

/etc/nginx/conf.d/xxx.conf

一个站点一个 conf,互不干扰。


三、后期通用配置示例

下面给你 4 种最常用 conf,你直接丢进 conf.d/ 即可。


示例 1:静态网站 / Vue / React(最常用)

/etc/nginx/conf.d/frontend.conf

server {
    listen 80;
    server_name 192.168.1.100;
    root /var/www/frontend/dist;
    index index.html;
    # SPA刷新404解决
    location / {
        try_files $uri $uri/ /index.html;
    }
    # 静态资源缓存30天
    location ~* .(js|css|png|jpg|svg|woff2)$ {
        expires 30d;
        add_header Cache-Control public;
    }
}

示例 2:API 反向代理(带限流 + 真实 IP)

/etc/nginx/conf.d/api.conf

server {
    listen 80;
    server_name api.xxx.com;
    location /api {
        # 限流
        limit_req zone=api burst=20 nodelay;
        limit_conn conn 10;
        # 代理
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

示例 3:带权限控制(后台 / 管理页)

/etc/nginx/conf.d/admin.conf

server {
    listen 80;
    server_name admin.xxx.com;
    location /admin {
        allow 127.0.0.1;
        allow 192.168.1.0/24;
        deny all;
        proxy_pass http://127.0.0.1:8080;
    }
}

示例 4:带缓存的 API(减轻后端压力)

/etc/nginx/conf.d/cache_api.conf

server {
    listen 80;
    server_name data.xxx.com;
    location /api/data {
        proxy_cache proxy_cache;
        proxy_cache_valid 200 30m;
        proxy_cache_key $host$uri$is_args$args;
        proxy_pass http://127.0.0.1:8080;
    }
}

四、修改配置后标准操作(必背)

# 检查配置是否错误
sudo nginx -t
# 平滑重启(不影响用户)
sudo systemctl reload nginx
# 查看状态
sudo systemctl status nginx

五、这套架构的优点

  1. 主配置永不改,稳定安全
  1. 每个站点独立 conf
  1. 全局限流、缓存、gzip 统一管理
  1. 后期加站点只需新增文件,不用动主配置
  1. 生产环境标准架构