好的!下面是关于 Nginx 日志配置、错误页面配置、流量控制 的第九天学习笔记或教程,内容详细且实用。
Nginx 日志配置、错误页面配置、流量控制(第九天)
一、Nginx 日志配置
1. 访问日志(access_log)
- 记录客户端请求的详细信息,默认关闭,需配置开启。
配置示例:
http {
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;
}
$remote_addr
:客户端 IP$request
:请求行$status
:响应状态码$body_bytes_sent
:发送给客户端的字节数$http_referer
:来源页面$http_user_agent
:客户端浏览器信息
2. 错误日志(error_log)
- 记录错误信息,方便排查故障。
配置示例:
error_log /var/log/nginx/error.log warn;
- 日志级别有:
debug
、info
、notice
、warn
、error
、crit
,默认error
。
二、错误页面配置
- 自定义 Nginx 错误页面,提升用户体验。
配置示例:
server {
listen 80;
server_name example.com;
error_page 404 /custom_404.html;
error_page 500 502 503 504 /custom_50x.html;
location = /custom_404.html {
root /usr/share/nginx/html;
internal;
}
location = /custom_50x.html {
root /usr/share/nginx/html;
internal;
}
}
error_page
指定错误码对应的页面。internal
表示此页面只能由 Nginx 内部调用,用户不能直接访问。
三、流量控制
1. 限速(limit_rate)
- 限制客户端下载速度,防止单个请求占用带宽。
示例:
location /downloads/ {
limit_rate 100k; # 限速 100 KB/s
}
2. 限连接数(limit_conn)
- 限制每个客户端的并发连接数。
配置示例:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 5; # 单个IP最多5个连接
}
}
}
3. 限请求速率(limit_req)
- 限制客户端请求频率,防止 DDoS 攻击。
配置示例:
http {
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;
server {
location /api/ {
limit_req zone=req_limit_per_ip burst=5 nodelay;
}
}
}
rate=10r/s
:每秒允许10个请求。burst=5
:允许瞬间突发5个请求。nodelay
:请求超出限制立即返回错误,不延迟处理。
四、总结
主题 | 说明 |
---|---|
日志配置 | access_log 和 error_log 配置详解 |
错误页面 | 自定义 404、5xx 等错误页面 |
流量控制 | 限速(limit_rate)、限连接(limit_conn)、限请求速率(limit_req) |
好的!这里为你整理一份全面、系统的 Nginx 学习笔记,涵盖日志配置、错误页面配置、流量控制,并且拓展到高可用负载均衡、HTTPS配置及性能调优,适合进阶掌握和实战应用。
Nginx 全面教程(日志 / 错误页面 / 流量控制 / 负载均衡 / HTTPS / 性能优化)
1. Nginx 日志配置
1.1 访问日志 access_log
- 记录所有请求信息,便于分析访问情况。
http {
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;
}
常用变量说明:
变量 | 含义 |
---|---|
$remote_addr | 客户端 IP |
$time_local | 请求时间 |
$request | 请求行 |
$status | 状态码 |
$body_bytes_sent | 发送给客户端的字节数 |
$http_referer | 来源页面 |
$http_user_agent | 浏览器 User-Agent |
$http_x_forwarded_for | 真实客户端 IP(代理时) |
1.2 错误日志 error_log
- 记录错误信息,便于排错。
error_log /var/log/nginx/error.log warn;
日志级别:
等级 | 描述 |
---|---|
debug | 调试信息 |
info | 普通信息 |
notice | 普通但重要信息 |
warn | 警告 |
error | 错误 |
crit | 严重错误 |
2. 自定义错误页面
提升用户体验,避免默认丑陋的错误提示。
server {
listen 80;
server_name example.com;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /404.html {
root /usr/share/nginx/html;
internal;
}
location = /50x.html {
root /usr/share/nginx/html;
internal;
}
}
internal
表示只能被 Nginx 内部调用,不允许外部直接访问。
3. 流量控制
3.1 限速 limit_rate
控制下载速度,避免单连接占用过多带宽。
location /downloads/ {
limit_rate 200k;
}
3.2 限连接数 limit_conn
限制单个客户端并发连接数,防止连接泛滥。
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 10;
}
}
}
3.3 限请求速率 limit_req
限制请求频率,防止爬虫或DDoS攻击。
http {
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
server {
location /api/ {
limit_req zone=req_limit_per_ip burst=10 nodelay;
}
}
}
4. 高可用负载均衡配置
4.1 反向代理负载均衡
http {
upstream backend {
server 192.168.1.101 weight=5 max_fails=3 fail_timeout=30s;
server 192.168.1.102 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.1.103 backup;
}
server {
listen 80;
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;
}
}
}
- 权重(weight):分配请求比例。
- 最大失败次数(max_fails) 和 失败超时(fail_timeout):节点健康检查。
- backup:备用服务器。
4.2 负载均衡算法
round-robin
(默认)least_conn
(最少连接)ip_hash
(基于客户端 IP)
示例:
upstream backend {
least_conn;
server 192.168.1.101;
server 192.168.1.102;
}
5. HTTPS 配置与安全加固
5.1 生成 SSL 证书(自签)
openssl req -newkey rsa:2048 -nodes -keyout nginx.key -x509 -days 365 -out nginx.crt
5.2 Nginx 配置 HTTPS
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/nginx.crt;
ssl_certificate_key /path/to/nginx.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://backend;
}
}
5.3 重定向 HTTP 到 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
6. 性能调优
6.1 开启 Gzip 压缩
http {
gzip on;
gzip_min_length 1024;
gzip_types text/plain application/javascript text/css application/json image/svg+xml;
gzip_comp_level 5;
}
6.2 缓存静态资源
location ~* \.(js|css|png|jpg|jpeg|gif|svg|ico)$ {
expires 7d;
add_header Cache-Control "public";
}
6.3 连接优化
worker_processes auto;
worker_connections 10240;
keepalive_timeout 65;
7. 完整示例配置片段
http {
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;
error_log /var/log/nginx/error.log warn;
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
upstream backend {
least_conn;
server 192.168.1.101;
server 192.168.1.102;
}
server {
listen 80;
server_name example.com;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /404.html {
root /usr/share/nginx/html;
internal;
}
location / {
limit_conn addr 10;
limit_req zone=req_limit_per_ip burst=20 nodelay;
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;
}
}
}
发表回复