nginx 反向代理实现负载均衡*配置实战

(接理论篇)

查看lb01的配置文件如下:
cat /usr/local/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;
    upstream www_server_pools {     #默认调度算法wrr,即权重轮询算法
#虽然定义的www服务器池但是这个服务器池也可以作为BBS等业务的服务器池。因为nginx负载均衡转发不转发http头部的url.无法做location匹配,只能默认访问第一个

    server 192.168.50.163:80 weight=1;
    server 192.168.50.164:80 weight=1;
}
    server {
        listen       80;
        server_name  www.wk.com;
        location / {
        proxy_pass http://www_server_pools;     #通过proxy_pass功能把用过户的请求交给上面反向代理upstream定义的www_server_pools服务器池处理。
        }
    }
}

#这种反向代理因为无法转发url所以无法代理多虚拟主机节点服务器

反向代理多虚拟主机节点服务器

反向代理向下面节点重新发起请求时,默认并没有在请求头里告诉节点服务器要找哪台虚拟主机,所以,Web节点服务器接收到请求后发现没有主机头信息,因此,就把节点服务器的第一个虚拟主机发给了反向代理了(节点上第一个虚拟主机放置的是故意这样放置的bbs)。解决这个问题的方法,就是当反向代理向后重新发起请求时,要携带主机头信息,以明确告诉节点服务器要找哪个虚拟主机。具体的配置在Nginx代理www服务虚拟主机配置里增加如下一行配置:

proxy_set_header host $host;

在代理向后端服务器发送的http请求头中加入host字段信息后,若后端服务器配置有多个虚拟主机,它就可以识别代理的是哪个虚拟主机。这是节点服务器多虚拟主机时的关键配置。整个Nginx代理配置为:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream www_server_pools {
    server 192.168.50.163:80 weight=1;
    server 192.168.50.164:80 weight=1;
}
    server {
        listen       80;
        server_name  www.wk.com;
        location / {
        proxy_pass http://www_server_pools;
        proxy_set_header host $host;      #在代理向后端服务器发送的http请求头中加入host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点服务器多虚拟主机时的关键配置。
        }
    }
}

此时,再重新加载Nginx服务就可已根据域名匹配到不同的虚拟主机

经过反向代理后的节点服务器记录用户IP

节点服务器对应的WWW虚拟主机的访问日志的第一个字段记录的并不是客户端的IP,而是反向代理服务器的IP,最后一个字段也是“-”!

由上图可见 access.log日志记录的客户端IP为nginx反向代理的IP

解决虚拟主机的访问日志的第一个字段记录的不是客户端的IP增加如下一行参数:

proxy_set_header X-Forwarded-For $remote_addr;
#这是反向代理时,节点服务器获取用户真实IP的必要功能配置

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

解决上述问题的整个Nginx代理配置为:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream www_server_pools {
    server 192.168.50.163:80 weight=1;
    server 192.168.50.164:80 weight=1;
}
    server {
        listen       80;
        server_name  www.wk.com;
        location / {
        proxy_pass http://www_server_pools;
        proxy_set_header host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
#在代理向后端服务器发送的http请求头中加入X-Forwarded-For字段信息,用于后端服务器程序,日志等接收记录真实用户的IP,而不是代理服务器的IP
        }
    }
}

重新加载Nginx反向代理服务:

/usr/local/nginx/sbin/nginx -s reload

节点服务器需要的访问日志如果要记录用户的真实IP,还必须进行日志格式配置,这样才能把代理传过来的X-Forwarded-For头信息记录下来,具体配置为:

#注意:这里是客户端Web01的配置

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    log_format main ‘$remote_addr-$remote_user[$time_local]"$request"‘
    ‘$status $body_bytes_sent "$http_referer"‘
    ‘"$http_user_agent""$http_x_forwarded_for"‘;
#就是这里的“$http_x_forwarded_for”参数,如果希望在第一行显示,可以替换掉第一行的$remote_addr变量。
    server {
        listen       80;
        server_name  bbs.wk.com;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
    access_log logs/access_bbs.log main;
    }
    server {
        listen       80;
        server_name  www.wk.com;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
    access_log logs/access_www.log main;
    }
}

头部为代理IP 尾部为客户IP  一般直接把 头部参数模块换掉

Nginx反向代理重要参数 解释说明
proxy_ pass http://server_ pools;  通过proxy_pass功能把用户的请求转向到反向代理定义的upstream服务器池
proxy_ set_ header Host $host;  在代理向后端服务器发送的http请求头中加人host字段信息,用于当 后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点服务器多虚拟主机时的关键配置
proxy_ set_ header X-Forwarded-For Sremote_ addr ;   在代理向后端服务器发送的http请求头中加人X-Forwarded-For字段信息,用于后端服务器程序、日志等接收记录真实用户的IP,而不是代理  服务器的IP。这是反向代理时,节点服务器获取用户真实IP的必要功能配置

与反向代理配置相关的更多参数说明

除了具有多虚拟主机代理以及节点服务器记录真实用户IP的功能外,Nginx软件还提供了相当多的作为反向代理和后端节点服务器对话的相关控制参数,具体见前面proxy模块时提供的图表。

由于参数众多,最好把这些参数放到一个配置文件里,然后用include方式包含到虚拟主机配置里,效果如下:

vim /usr/local/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;
    upstream www_server_pools {
    server 192.168.50.163:80 weight=1;
    server 192.168.50.164:80 weight=1;
    }
    server {
        listen       80;
        server_name  www.wk.com;
        location / {
        proxy_pass http://www_server_pools;
        include proxy.conf;         #这就是包含的配置,具体配置内容见下文
        }
    }
}

cat proxy.conf
proxy_set_header host $host;
proxy_set_header x-forwarded-for $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

更多Nginx反向代理参数说明: 
http://nginx.org/en/docs/http/ngx_http_proxy_module.html

原文地址:https://www.cnblogs.com/ywrj/p/9503030.html

时间: 2024-12-27 02:37:40

nginx 反向代理实现负载均衡*配置实战的相关文章

Nginx反向代理以及负载均衡配置

前提:最近在研究nginx的用法,在windows上小试了一下,由于windows下不支持nginx缓存配置,所以本文主要是讲nginx,以及反向代理与负载均衡. [一.为什么要使用nginx] 要回答为什么要使用nginx,那就先说说nginx能做些什么. 首先,nginx能做反向代理,那么什么是反向代理呢,举个栗子,我想在本地使用 www.mickey.com 的域名去访问 www.taobao.com.那么这个时候我们就可以通过nginx去实现. 再者,nginx能实现负载均衡,什么是负载

Nginx反向代理实现负载均衡配置图解

[导读] 负载均衡配置是超大型机器需要考虑的一些问题,同时也是数据安全的一种做法,下面我来介绍在nginx中反向代理 负载均衡配置图解,大家可参考本文章来操作. 首先简单的介绍下nginx作为反向代理实现负载均衡.反向负载均衡配置是超大型机器需要考虑的一些问题,同时也是数据安全的一种做法,下面我来介绍在nginx中反向代理 负载均衡配置图解,大家可参考本文章来操作. 首先简单的介绍下nginx作为反向代理实现负载均衡. 反向代理方式是指以反向代理服务器来接受互联网上的连接请求,然后将请求转发给内

Nginx反向代理,负载均衡配置

主配置文件:nginx.conf # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user www; worker_processes 2; error_log /var/log/nginx/error.lo

nginx反向代理与负载均衡配置

https://www.nginx.com/resources/admin-guide/reverse-proxy/ https://www.nginx.com/resources/admin-guide/load-balancer/

Nginx系列-11.配置Nginx反向代理和负载均衡

Nginx系列-11.配置Nginx反向代理和负载均衡 目录 - Nginx系列 Nginx系列-1.Linux下安装Nginx Nginx系列-2.配置LNMP(Linux.Nginx.MySQL.PHP)架构 Nginx系列-3.配置Nginx虚拟主机 Nginx系列-4.Nginx日志配置及日志切割 Nginx系列-5.配置Nginx的防盗链 Nginx系列-6.配置Nginx的HTTPS Nginx系列-7.配置Nginx使用uwsgi支持web.py框架 Nginx系列-8.配置Ngi

Nginx反向代理,负载均衡,redis session共享,keepalived高可用

相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群. redis服务器一台,用于session的分离共享. nginx主服务器:192.168.50.133 nginx备服务器:192.168.50.135 tomcat项目服务器1:192.168.50.137 tomcat项目服务器2:192.168.50.139 redis服

基于Nginx反向代理及负载均衡

基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是开启的,因为proxy属于nginx内置标准模块,通常实现代理的时候,最核心模块是proxy_pass,用于将用户请求的rui递交至上游服务器的某个URI但这个模块大部分用于location当中,因此要实现将某一URI的访问代理某个上游服务器大致的格式为: location /name/ { pro

[转]Nginx反向代理和负载均衡部署指南

Nginx反向代理和负载均衡部署指南 1.        安装 1)         从Nginx官网下载页面(http://nginx.org/en/download.html)下载Nginx最新版本(目前是1.5.13版本)安装包: 2)         解压后复制到部署目录. 2.        启动和停止Nginx Nginx目前只支持命令行操作,操作前先进入Dos命令环境,并进入Nginx部署目录. 1)         启动Nginx:start nginx 2)         停

马哥学习笔记二十八——nginx反向代理,负载均衡,缓存,URL重写及读写分离

Nginx反向代理 Nginx通过proxy模块实现反向代理功能.在作为web反向代理服务器时,nginx负责接收客户请求,并能够根据URI.客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server).nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上.如下面的示例中,location的/uri将被替换为上游服务器上的/newuri. location /uri { proxy_pa