高性能Web服务器Nginx使用指南(9)

upstream xxx {
    server ip1:port1 status;
    server ip2:port2 status;
    ...
}
server {
    ...
    location ...{
        proxy_set_header Host $host;
            proxy_set_header X-Forward-For $remote_addr;
      proxy_pass ;
        ...
    }
}
# xxx为定义的后端服务器群的名称
# ip:port为后端提供web服务的ip和端口号
# status是后端服务器群各个节点的状态

proxy_set_header的作用:

该指令的意义在于修改http请求头的信息。这里修改的主要是请求头中的host字段和remote_addr字段。在设置了负载均衡之后,客户端的请求先到达负载均衡层,再到真实的web服务器,由此请求经过了一个中间层。Host的含义是表明请求的主机名,因为nginx作为反向代理使用,而如果后端真实的服务器设置根据http请求头中的host字段来进行路由或判断功能的话(即根据host字段判断请求发往哪个虚拟主机),如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败(默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的host字段应为proxy_pass指令设置的服务器,也就是上边的xxx)。x-forward-for表示http请求由谁发起的,如果负载均衡层不重写该字段的ip,则后端真实服务器收到的http请求头中都是负载均衡服务器的ip地址,如果后端有防×××策略的话,那么负载均衡服务器就被真实服务器封掉了。

status的常用状态有

down                表示该web节点不参与负载均衡的调度

weight              定义该web节点的权值

backup              表示预留web节点,只有当所有的非backup的web节点出现故障的时候,backup节点才会接受请求

max_fails           表示请求该web节点的最大的失败次数

fail_timeout       表示该节点在经历max_fails次的失败请求之后,暂停服务的时间

实验环境:

192.168.239.130:80    前端负载均衡节点

192.168.239.129:80    后端提供web服务的节点1

192.168.239.132:80    后端提供web服务的节点2

负载均衡节点的nginx.conf内容如下:

user  nobody nobody;
worker_processes  2;
 
error_log  /usr/local/nginx/logs/error.log  notice;
 
pid        /usr/local/nginx/logs/nginx.pid;
 
events {
    use epoll;
    worker_connections  1024;
}
 
http {
    include      mime.types;
    default_type  application/octet-stream;
    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  /usr/local/nginx/logs/access.log  main;
    sendfile        on;
    tcp_nopush    on;
    tcp_nodelay    on;
    keepalive_timeout  60;
    gzip  on;
   
    upstream webserver {
          # web1
        server 192.168.239.129:80 weight=4 max_fails=3 fail_timeout=20s;
          # web2
        server 192.168.239.132:80 weight=3 max_fails=3 fail_timeout=20s;
    }
    server {
        listen      80;
        server_name  blog.linux.com;
        root    /data/html;
        index  index.php index.html index.htm;
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Forward-For $remote_addr;
            proxy_pass ;
    }

节点1就是4.LNMP架构搭建的web服务,这里不再重写其nginx.conf文件的内容

节点2的nginx.conf的配置内容如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/609fc2f5a92e09977537b71632533576.html