Nginx 配置速查手册:核心语法与实战案例详解

 更新时间:2026年07月08日 09:14:25   作者:小森林之主  
Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3 代理服务器,本文介绍Nginx 配置速查手册:核心语法与实战案例,感兴趣的朋友一起看看吧

当你需要在几分钟内快速配置 Nginx 时,本文就是你的速查手册。每个知识点控制在 3 行以内,核心语法与常用示例一目了然。

核心语法速查

基础配置

语法说明示例
user设置运行 Nginx 的用户和组user nobody;
worker_processes设置工作进程数worker_processes 4;
error_log指定错误日志文件位置error_log /var/log/nginx/error.log warn;
pid指定 Nginx 进程 ID 文件位置pid /var/run/nginx.pid;

事件模块

语法说明示例
events事件处理块events {
worker_connections 1024;
}
worker_connections每个工作进程的最大连接数worker_connections 1024;

HTTP 核心模块

语法说明示例
httpHTTP 块,包含多个上下文http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
}
include包含其他配置文件include /etc/nginx/mime.types;
default_type设置默认的 MIME 类型default_type application/octet-stream;
sendfile使用 sendfile 优化文件传输sendfile on;
keepalive_timeout设置长连接的超时时间keepalive_timeout 65;
gzip开启或关闭 Gzip 压缩gzip on;

服务器块

语法说明示例
server定义一个虚拟主机server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html index.htm;
}
listen监听的端口或 IPlisten 80;
server_name虚拟主机的域名server_name example.com;
root站点根目录root /var/www/html;
index默认索引文件index index.html index.htm;

位置块

语法说明示例
location匹配 URL 并定义处理方式location / {
try_files $uri $uri/ =404;
}
try_files尝试按顺序查找文件,如果都未找到则返回最后一个参数指定的状态码或 URLtry_files $uri $uri/ =404;

反向代理

语法说明示例
proxy_pass将请求转发到后端服务器location /api {
proxy_pass http://backend_server;
}
proxy_set_header设置转发请求头proxy_set_header Host $host;

重定向

语法说明示例
return直接返回一个状态码或 URLlocation /old {
return 301 http://example.com/new;
}
rewriteURL 重写rewrite ^/old/([a-z]+)$ /new/$1 permanent;

负载均衡

语法说明示例
upstream定义后端服务器池upstream backend {
server backend1.example.com;
server backend2.example.com;
}
least_conn最少连接数调度upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
ip_hash基于客户端 IP 调度upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}

缓存

语法说明示例
proxy_cache_path定义缓存路径和配置proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
proxy_cache启用缓存proxy_cache my_cache;
proxy_cache_key定义缓存键proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid设置缓存有效期proxy_cache_valid 200 301 302 10m;

安全

语法说明示例
limit_req限制请求速率limit_req zone=one burst=5 nodelay;
limit_conn限制连接数limit_conn addr 10;
ssl启用 SSLserver {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
add_header添加 HTTP 响应头add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

日志

语法说明示例
access_log指定访问日志文件位置access_log /var/log/nginx/access.log combined;
log_format定义日志格式log_format combined '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

限制与优化

语法说明示例
client_max_body_size限制客户端请求的最大体大小client_max_body_size 10m;
server_tokens隐藏服务器版本信息server_tokens off;
tcp_nodelay禁用 Nagle 算法,减少延迟tcp_nodelay on;

常用示例

静态文件服务

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }
}

反向代理

server {
    listen 80;
    server_name example.com;
    location /api {
        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;
    }
}

重定向

server {
    listen 80;
    server_name example.com;
    location /old {
        return 301 http://example.com/new;
    }
    location /old2 {
        rewrite ^/old2/([a-z]+)$ /new/$1 permanent;
    }
}

负载均衡

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}
server {
    listen 80;
    server_name example.com;
    location /api {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }
}

缓存

http {
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
    server {
        listen 80;
        server_name example.com;
        location /api {
            proxy_cache my_cache;
            proxy_cache_key "$scheme$request_method$host$request_uri";
            proxy_cache_valid 200 301 302 10m;
            proxy_pass http://backend;
        }
    }
}

SSL 配置

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/priv哥key.pem;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }
}

安全配置

server {
    listen 80;
    server_name example.com;
    location /api {
        limit_req zone=one burst=5 nodelay;
        limit_conn addr 10;
        proxy_pass http://backend;
        proxy_set_header Host $host;
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
    }
}

日志配置

http {
    log_format custom '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
    server {
        listen 80;
        server_name example.com;
        access_log /var/log/nginx/access.log custom;
    }
}

性能优化

http {
    sendfile on;
    tcp_nodelay on;
    client_max_body_size 10m;
    server_tokens off;
    server {
        listen 80;
        server_name example.com;
        location / {
            root /var/www/html;
            index index.html index.htm;
        }
    }
}

进阶技巧

热备份与恢复

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com backup;
    }
    server {
        listen 80;
        server_name example.com;
        location /api {
            proxy_pass http://backend;
            proxy_set_header Host $host;
        }
    }
}

动态内容缓存

http {
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
    server {
        listen 80;
        server_name example.com;
        location /api {
            proxy_cache my_cache;
            proxy_cache_key "$scheme$request_method$host$request_uri";
            proxy_cache_valid 200 301 302 10m;
            proxy_pass http://backend;
            add_header X-Proxy-Cache $upstream_cache_status;
        }
    }
}

跨域资源共享 (CORS)

server {
    listen 80;
    server_name example.com;
    location /api {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        proxy_pass http://backend;
    }
}

压缩配置

http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_vary on;
    server {
        listen 80;
        server_name example.com;
        location / {
            root /var/www/html;
            index index.html index.htm;
        }
    }
}

防止 DDoS 攻击

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {
        listen 80;
        server_name example.com;
        location / {
            limit_req zone=one burst=5 nodelay;
            root /var/www/html;
            index index.html index.htm;
        }
    }
}

限制文件类型上传

server {
    listen 80;
    server_name example.com;
    location /upload {
        root /var/www/html;
        valid_referers none blocked example.com;
        if ($invalid_referer) {
            return 403;
        }
        if ($request_method = POST) {
            limit_except GET {
                allow 192.168.1.0/24;
                deny all;
            }
        }
        client_max_body_size 10m;
    }
}

动态服务器配置

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
    server {
        listen 80;
        server_name example.com;
        location /ws {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }
}

限制 IP 访问

server {
    listen 80;
    server_name example.com;
    allow 192.168.1.0/24;
    deny all;
    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

限制请求方法

server {
    listen 80;
    server_name example.com;
    if ($request_method !~ ^(GET|POST)$) {
        return 405;
    }
    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

标准化错误页面

server {
    listen 80;
    server_name example.com;
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /404.html {
        internal;
        root /var/www/html;
    }
    location = /50x.html {
        internal;
        root /var/www/html;
    }
}

日志切割

# 使用 logrotate 切割日志
# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 nginx adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

在线工具推荐

配置 Nginx 时,遇到复杂的 cron 表达式、正则表达式或 JSON 数据,可以使用 Hey Cron 进行快速生成和验证。Hey Cron 提供了多种实用工具,包括:

  • Cron 表达式生成器:中文描述秒转 cron 表达式
  • 正则表达式生成器:帮助你快速生成正则表达式
  • 中英互译:支持中文和英文的互译
  • JSON 格式化:帮助你格式化和验证 JSON 数据
  • Base64 编码解码:快速编码和解码 Base64 字符串
  • 时间戳转换:方便地在时间戳和日期时间之间进行转换
  • JWT 解析:帮助你解析 JWT 令牌

希望这些工具能提升你的开发效率,少走弯路。

到此这篇关于Nginx 配置速查手册:核心语法与实战案例详解的文章就介绍到这了,更多相关Nginx 配置速查手册内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx如何配置负载均衡

    Nginx如何配置负载均衡

    这篇文章主要介绍了Nginx如何配置负载均衡,帮助大家更好的理解和学习使用Nginx,感兴趣的朋友可以了解下
    2021-03-03
  • 使用nginx实现分布式限流的方法

    使用nginx实现分布式限流的方法

    一般对外暴露的系统,在促销或者黑客攻击时会涌来大量的请求,为了保护系统不被瞬间到来的高并发流量给打垮, 就需要限流。接下来通过本文给大家分享使用nginx实现分布式限流的方法,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • nginx利用lua语言实现软waf的示例代码

    nginx利用lua语言实现软waf的示例代码

    这篇文章主要介绍了nginx利用lua语言实现软waf,文中通过代码示例和图文结合的方式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • 在Nginx中阻止来自特定的IP地址访问的操作指南

    在Nginx中阻止来自特定的IP地址访问的操作指南

    在网络安全方面,有时你可能需要限制特定国家或地区的访问权限,本文将介绍如何使用 Nginx 配置文件来阻止来自特定国家或地区的 IP 地址访问你的网站,需要的朋友可以参考下
    2024-07-07
  • 为Nginx添加SPDY功能

    为Nginx添加SPDY功能

    我也开始尝试着给自己的论坛加上SPDY协议,WEB服务器本人选择的是nginx,在过去,Nginx并没有内置SPDY协议,需要打开的话还要下载开发版然后手动编译,很不方便
    2014-12-12
  • 基于Nginx 反向代理获取真实IP的问题详解

    基于Nginx 反向代理获取真实IP的问题详解

    下面小编就为大家分享一篇基于Nginx 反向代理获取真实IP的问题详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Nginx下让WordPress支持固定链接的伪静态规则

    Nginx下让WordPress支持固定链接的伪静态规则

    Nginx下让WordPress支持固定链接的伪静态规则,要让nginx支持wordpress固定链接非常简单,需要自己进行添加点配置代码
    2013-02-02
  • 配置ab来为Nginx服务器做压力测试的方法

    配置ab来为Nginx服务器做压力测试的方法

    这篇文章主要介绍了配置ab来为Nginx服务器做压力测试的方法,ab是针对Apache的测试工具但本文讲解其测试Nginx的过程,需要的朋友可以参考下
    2016-01-01
  • Nginx常用命令和部署详解以及实战案例示范

    Nginx常用命令和部署详解以及实战案例示范

    这篇文章主要介绍了Nginx的常用命令和在不同环境下的部署方法,包括在CentOS和Docker中部署Nginx,并详细说明了如何配置Nginx以实现实时刷新数据和数据分析系统的场景,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • Nginx中配置使用非默认80端口进行服务的完整指南

    Nginx中配置使用非默认80端口进行服务的完整指南

    在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助
    2025-08-08

最新评论