Skip to content

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_failsfail_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

Daily Problem

菜就多练

本站访客数 人次 本站总访问量