Nginx 配置全攻略:从零开始,30分钟掌握核心指令与配置逻辑
				
									
					
					
						|  | 
							admin 2025年8月16日 8:23
								本文热度 1040 | 
					
				 
				01
一句话读懂 Nginx
把 Nginx 想象成商场里最会看人的金牌导购,顾客(用户)只需说“我要买 X”,导购(Nginx)立刻把他领到最合适的店(后端服务)。
更牛的是,这位导购还能防黄牛(防攻击)、查库存(健康检查)、给 VIP 插队(权重分流),一人顶一队,堪称“全能管家”。
02
配置语法冷启动
一行行带你拆解最常用指令
2.1 最小可运行配置
# /etc/nginx/nginx.conf
user  nginx;                       # **进程身份**:用 nginx 用户启动,安全隔离
worker_processes  auto;            # **CPU 亲和**:有几核就起几个工作进程
events {
    worker_connections1024;      # **并发上限**:单进程最大 1024 条连接
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    # 性能三连
    sendfile        on;            # **零拷贝**内核直发文件,省 CPU
    tcp_nopush      on;            # **包合并**攒一波再发,省带宽
    keepalive_timeout65;         # **长连接**65 秒内复用 TCP
    # 日志双生花
    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;
    # Gzip 压缩
    gzipon;
    gzip_types text/plain text/css application/json;
    # 虚拟主机示例
    server {
        listen       80;
        server_name  example.com;
        location / {
            root   /var/www/html;
            index  index.html;
        }
    }
}
注解:
- 1. user与worker_processes决定安全与性能基线。
- 2. sendfile+tcp_nopush是静态资源大杀器。
- 3. keepalive_timeout让短连接变“长情”,减少握手开销。
2.2 HTTPS 一键升级(含 TLS1.3)
server {
    listen 443 ssl http2;                       # **HTTP2** + **TLS**
    server_name example.com;
    ssl_certificate      /etc/ssl/certs/server.crt;
    ssl_certificate_key  /etc/ssl/private/server.key;
    # 只放行当代密码套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;               # **服务器说了算**
}
注解:
- 1. http2让多路复用起飞,同域名资源并行下载。
- 2. TLS1.3 砍掉历史包袱,握手往返从 2-RTT 缩到 1-RTT。
- 3. 指定 ciphers避免出现“弱鸡”加密算法。
2.3 反向代理 + 缓存组合拳
# 1. 先声明缓存区
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
    listen80;
    server_name api.example.com;
    # 2. 正式开缓存
    location / {
        proxy_pass         http://backend_cluster;
        proxy_cache        my_cache;               # **缓存名字叫 my_cache**
        proxy_cache_valid20030210m;            # **10 分钟快乐缓存**
        proxy_cache_key    $scheme$host$request_uri;# **缓存键值**,防止串味
    }
}
注解:
- 1. levels=1:2把 1 万文件散到两级目录,避免 inode 爆表。
- 2. inactive=60m60 分钟没人访问就踢出缓存。
- 3. proxy_cache_key决定哪些参数参与缓存命中,务必包含核心变量。
03
负载均衡全攻略
:让流量像坐过山车一样丝滑
3.1 轮询 vs 加权 vs IP 哈希
|  |  |  | 
|---|
|  |  | 人人平等 | 
|  | weight= | 高配多劳 | 
|  | ip_hash; | 粘人精 | 
|  | least_conn; | 能者多劳 | 
3.2 真·实战配置(含健康检查)
upstream web_app {
    least_conn;                             # **谁闲谁上**
    server10.0.0.1:8080 weight=3 max_fails=3 fail_timeout=30s;
    server10.0.0.2:8080 weight=1;
    server10.0.0.3:8080 backup;            # **备胎机**,主全挂才启用
    keepalive32;                           # **32 条长连接**复用
}
server {
    listen80;
    server_name app.example.com;
    location / {
        proxy_pass         http://web_app;
        proxy_http_version1.1;
        proxy_set_header Connection "";      # **长连接标配**
        proxy_connect_timeout2s;
        proxy_read_timeout    5s;
    }
}
注解:
- 1. backup让 10.0.0.3 平时摸鱼,关键时刻救命。
- 2. keepalive 32与 HTTP1.1 长连接搭配,减少握手风暴。
- 3. max_fails+fail_timeout自动拉黑“假死”节点,30 秒后给复活机会。
3.3 灰度发布:权重“温水煮青蛙”
upstream canary {
    server 10.0.0.10:8080 weight=9;   # **老版本**
    server 10.0.0.11:8080 weight=1;   # **新版本**,先放 10% 流量
}
注解:
- 1. 通过 weight逐步上调,肉眼无感完成版本切换。
- 2. 出问题秒切回 weight=0,零回滚时间。
3.4 日志“显微镜”:一眼定位慢节点
log_format upstream_log '$remote_addr [$time_local] '
                        'up_addr=$upstream_addr status=$status '
                        'rt=$request_time u_rt=$upstream_response_time';
access_log /var/log/nginx/lb_access.log upstream_log;
注解:
- 1. $upstream_response_time暴露后端真实耗时。
- 2. request_time减去upstream_response_time就能算出 Nginx 自身开销。
结尾
3 行命令检查你的 Nginx 是否健康
nginx -t                  # **语法体检**
ss -tulnp | grep nginx    # **端口监听一览**
curl -I https://example.com | grep server  # **响应头确认**
阅读原文:原文链接
该文章在 2025/8/18 12:36:02 编辑过