Nginx负载均衡集群——proxy_pass指令

proxy_pass指令属于ngx-http-proxy-module模块,此模块可以把请求转发到另一台服务器,在实际的反向代理工作中,会通过location功能指定的URL,然后把接收到的符合URL的请求通过proxy_pass参数抛给定义好的upstream地址池

案例1
在nginx.conf配置文件中定义

location /name/ {
proxy_pass http://127.0.0.1/remote/;
}

例如当请求URL是: http://192.168.178.124/name ,会进入该locaiton的作用域,通过参数proxy_pass请求转发给了http://127.0.0.1/remote/

案例2

location ~ .*\.php$ {
        proxy_pass http://www.example.cn$request_uri;
        proxy_set_header Host $proxy_host;
        proxy_set_header X-Forwarded-For $remote_addr;
}

所有请求以.php结尾的URL,进行转发

proxy_pass参数
Nginx负载均衡集群——proxy_pass指令_第1张图片

#添加主机头信息,明确告诉服务器找哪个虚拟机
proxy_set_header Host $host;

X-Forwarded-For参数
在反向代理请求后端节点服务器的请求头中添加获取客户端IP的字段信息,然后在后端节点可以通过程序或者相关配置接收X-Forwarded-For传过来的真实用户的IP信息。
proxy_set_header X-Forwarded-For $remote_addr;

【lb01反向代理节点配置如下】
#部分nginx.conf代码如下,注意重点修改的部分

http {
    include       mime.types;
    default_type  application/octet-stream;

# 义web服务器地址池,也就是121,122两个节点
upstream www_pools {
server 192.168.178.121 weight=1;
server 192.168.178.122 weight=1;
}

    server {
        listen       80;
        server_name  www.chaoge.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
                proxy_pass http://www_pools;
                proxy_set_header Host $host;
                # 添加此处代码即可,代理服务器向后端发送HTTP请求时,请求头中添加该参数信息,用于后端服务器程序、日志等接受真实用户的IP,而非是代理服务器的IP
                proxy_set_header X-Forwarded-For $remote_addr;
        }
}
}

【修改节点服务器的nginx.conf】(web01,web02)
#部分代码修改如下,关注重点修改的部分

[root@web01 opt]# grep -Ev "^#|^$" /opt/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

 # 重点修改这里的代码即可,添加结尾的参数$http_x_forwarded_for,即可在日志中获取客户端的真实IP
 # 注意access日志文件具体的路径,由下面虚拟主机的参数定义
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';


server {
listen 80;
server_name bbs.chaoge.com;
location / {
    root html/bbs;
    index index.html;
}
#注意这里的日志配置!!!一定要写和我一样的!!
access_log logs/access_bbs.log main;
}
server {
listen 80;
server_name www.chaoge.com;
location / {
    root html/www;
    index index.html index.htm;
}
#注意这里的日志配置!!!一定要写和我一样的!!
access_log logs/access_www.log main;
}
}

重启节点服务器的nginx

[root@web01 opt]# nginx -s reload

你可能感兴趣的:(nginx,linux)