Daily
更新: 5/29/2025 字数: 0 字 时长: 0 分钟
Daily Plan
#todo
- [ ]
Daily Study
Nginx配置
#暑期实习 一般都会包括如下内容:
- 全局配置(log)
- event配置
- http配置
- server配置
bash
#全局配置
#定义Nginx运行的用户和用户组
user www www;
#nginx进程数,建议设置为等于CPU总核心数.
worker_processes 8;
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info;
#进程文件
pid /var/run/nginx.pid;
#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致.
worker_rlimit_nofile 65535;
#events 配置,工作模式与连接数上限
events {
use epoll;
worker_connections 1024; # 每个工作进程连接数
}
#http服务器配置
http {
#http中的一些全局配置
include mime.types;
default_type application/octet-stream;
# 日志格式
log_format access '$remote_addr - $remote_user [$time_local] $host "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$clientip"';
access_log /srv/log/nginx/access.log access; # 日志输出目录
gzip on;
sendfile on;
# 链接超时时间,自动断开
keepalive_timeout 60;
# 虚拟主机
server {
listen 8080;
server_name localhost; # 浏览器访问域名
charset utf-8;
access_log logs/localhost.access.log access;
# 路由
location / {
root http://backend_servers; # 访问根目录
index index.html index.htm; # 入口文件
}
}
#负载均衡配置
upstream backend_servers{
server 192.168.31.121:8000;
server 192.168.31.121:9090;
}
# 引入其他的配置文件
include servers/*;
}
Nginx负载均衡中的故障处理机制
- 故障检测 :Nginx默认采用的是被动健康检查,当Nginx尝试将请求转发给某个后端服务器时,如果在指定的时间内(由
proxy_connect_timeout
,proxy_read_timeout
,proxy_send_timeout
等指令定义)未能成功连接或服务器返回了错误(如TCP连接超时、服务器返回5xx错误等),Nginx会将这次尝试标记为一次失败。 - 标记服务不可用:在
upstream
配置块中,可以为每个server
指令配置max_fails
和fail_timeout
参数。当某个服务器的失败次数在fail_timeout
时间内达到max_fails
的设定值时,Nginx会暂时将该服务器标记为“不可用”或“故障”状态。 - 请求转发到健康服务器:一旦某个服务器被标记为不可用,Nginx在接下来的
fail_timeout
时间内将不会再将新的请求转发给这个故障服务器。Nginx会根据负载均衡算法(如轮询、最少连接、IP哈希等)将新的请求自动转发到upstream
中其他健康的服务器上。如果设置了两个服务器,那么所有新的请求都会被导向那个仍然健康的服务器。 - 重试机制:
proxy_next_upstream
(以及类似的fastcgi_next_upstream
,uwsgi_next_upstream
等) 指令非常关键。它定义了在哪些情况下,如果与当前选择的后端服务器通信失败,Nginx应该尝试将请求转发给下一个可用的服务器。 - 服务器恢复:在
fail_timeout
时间过后,Nginx会自动尝试将少量请求(或根据配置进行探测)发送到之前被标记为故障的服务器。如果这些尝试成功,Nginx会认为该服务器已经恢复正常,并将其重新加入到健康的服务器池中,恢复对其的请求分发如果尝试仍然失败,则该服务器会继续保持不可用状态,并等待下一个fail_timeout
周期再尝试。 - 所有服务器都故障:一般会返回
502 Bad Gateway