Nginx 配置全攻略:从零开始,30分钟掌握核心指令与配置逻辑
|
admin
2025年8月16日 8:23
本文热度 127
|
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=60m
60 分钟没人访问就踢出缓存。 - 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 编辑过