概述:反向代理是指的,服务器代理网络上的客户机请求,将请求转达给内部真实服务器,然后在返回给Internet客户端,代理服务器上面没有任何网页资料。反向代理和正向代理没有冲突,可以在防火墙设备中同时使用这两种结合,正向代理可以进行过滤,保护内部网络安全。
软件七层负载均衡大多是基于HTTP反向代理,Nginx反向代理能够支持虚拟主机,可以按照轮询,IP哈希,URL哈希,权重方式对后端服务器做负载均衡,还支持后端服务器健康检查。
常见的Web负载均衡方法:
1、 DNS轮询:将同一个主机名添加多个A记录,DNS将解析请求安装A记录的顺序,随即分配到不同的IP上,使用dig baidu.com 就可以看到不同的A记录对应的IP地址。缺点:可靠性低,其中一台出现故障,就不会给予回应,就算从DNS去掉该服务器IP,但是也会保存在各地区的ISP众多的DNS缓存中。系统股灾不均衡,使用简单轮询,不能计算出服务器的负载差异,所以有可能客户集中请求到其中某一台服务器。
2、F5、LVS、DNS只能解析这里不做讲述
配置环境:
三台CentOS5.3,一台做nginx代理,2台apache做页面测试。apache端口改为:8080,nginx使用80口接收客户请求
yum -y install pcre-devel openssl openssl-devel //安装包,否则编译时候出错
#useradd www
#groupadd www
#usermod -g www www //设置nginx的用户和组
#tar xzvf pcre-7.8.tar.gz
#./configure
#make ; make install //安装pcre让nginx支持rewrite重写方便以后所需
[root@localhost tar]# cd nginx-0.7.16/
[root@localhost nginx-0.7.16]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module
--with-http_ssl_module
--with-http_stub_status_module:这个模块用于获取nginx自上次启动以来的工作状态,非核心模块
--with-http_ssl_module :把ssl编译进去,
仅仅指定openssl库的源代码路径还是不够的
[root@localhost nginx-0.7.16]#make ; meke install
#cd /usr/local/nginx/conf/nginx.conf
#vi nginx.conf
user www www; //设置用户和组
worker_processes 4; //生成进程数,等于CPU总核数两倍
error_log /data1/logs/nginx_error.log crit; //错误日志路径,错误日志可选项为:【debug info notice warn error crit】
pid /usr/local/nginx/logs/nginx.pid; //PID路径
worker_rlimit_nofile 51200; //指定文件描述符数量
events {
use epoll; //使用网络I/O模型
worker_connections 51200; //允许连接数,文件描述符
}
http
{
include mime.types; //文件类型
default_type application/octet-stream; //默认文件类型
charset UTF-8 //语言类型
server_names_hash_bucket_size 128; //根据CPU的cache来设定
client_header_buffer_size 4; //记录缓存4k
large_client_header_buffers 4 8k; //如果4k不够,用8k
sendfile on; //指定nginx是否调用sendfile函数(zero copy方式)来输出文件,普通应用必须设为on,对于普通文件用on。如果进行下载I/O负载应用,设置为off,以平衡磁盘磁盘和网络I/O处理速度。
#tcp_nopush on; //允许或禁止使用socket的TCP_NOPUSH(on freebsd或TCP_COR(on linux),此选择仅仅在使用sendfile时候可用,
keepalive_timeout 65; //长连接超时时间
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#开启gzip压缩,用于支持在线实时压缩输出数据流
gzip on; //off关闭或者on开启gzip功能
gzip_min_length 1k; //设置允许压缩最小字节数,0表示多大都压,最好设置大于1k,小于1k越压越大
gzip_buffers 4 16k; //系统获取几个单位的缓存,用于存储gzip压缩结果数据流。4
4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存,如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_http_version 1.1; //判断http协议版本,是否支持压缩,否则用户看到乱码。默认即可,大部分都得支持
gzip_comp_level 2; //gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢
gzip_types text/plain application/x-javascript text/css application/xml; //默认nginx是开启gzip压缩,但是只针对html文件押送 gzip_types
text/plain application/x-javascript text/css text/html application/xml text/javascript;在nginx的gzip的gzip_types加上
gzip_vary on; //和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩。
client_max_body_size 50m; //允许客户端请求的最大单个文件字节数
client_body_buffer_size 128k; //缓冲区代理用户端请求的最大字节数,可以理解先保存到本地在穿给用户
proxy_connect_timeout 600; //和后端服务器连接的超时时间,发起握手等候相应超时时间
proxy_read_timeout 600; //连接成功后,等待后端服务器相应时间,已经进入后端的排队之中等候处理
proxy_send_timeout 600; //后端服务器数据回传时间,在规定时间内服务器必须传完所有数据
proxy_buffer_size 16k; //只保存用户头信息一共nginx进行规则处理,用于缓存代理请求
proxy_buffers 4 32k; //告诉nginx保存单个用的几个Buffer最大用多大空间
proxy_busy_buffers_size 64k; //如果系统很忙可以申请更大的proxy_buffers,官方推荐 *2
proxy_temp_file_write_size 64k; //proxy缓存临时文件大小
upstream http_server_pool {
server 192.168.1.2:8080 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.1.3:8080 weight=2 max_fails=2 fail_timeout=30s;
} //设置地址池,后端2台服务器
server //第一个虚拟主机,反向代理http_server_pool这组服务器
{
listen 80; //监听端口
server_name www.xiao.com; //主机名称
location /
{
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; //http://www.2tutu.com/post/2008/631.html //后端服务器返回500 503 404错误,自动请求转发到upstream池中另一台服务器
proxy_pass http://http_server_pool;
proxy_set_header Host www.xiao.com;
proxy_set_headerX-Forwarded-For$remote_addr;
}
access_log logs/www.xiao.com.access.log combined;
}
}
proxy_set_header Host $host:首先说明
proxy_set_header 指令在向反向代理的后端Web服务器发起请求时添加指定的 Header头信息,后端web服务器有多个基于域名的虚拟主机时,通过头信息Host,用于指定请求的域名,这样后端web才能识别反向代理请求哪个虚拟主机处理。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for :联系下面PS中所写,在后端web中就算加上$http_x_Forwarded_for这条,也得不到用户的IP,所以在nginx反向代理添加Header头信息
X-Forwarded-For在配合后端服务器日志文件的$http_x_Forwarded_for这条就可以获得用户的IP地址了。
PS:假设Nginx作为Web服务器,nginx或Squid作为反向代理后,就不能获取客户端的真实IP地址了,由于在客户端和Web增加了中间层,web没有真实的IP,通过$remote_addr变量拿到是反向代理的IP,Web代理可以增加$http_x_Forwarded_for信息,用于记录客户端IP和原来客户请求的服务器地址,在日志格式中加上即可。
log_format main '$http_x_Forwarded_for '
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /tmp/Nginx.access.log main; //在后端Web里面加上这样就可以了
upstream : nginx支持4种算法,下面一一介绍
1、 轮询
每个请求按时间顺序分配到不同的后端服务器了,后端服务器down掉,自动切除。
2、weight
设定服务器权值: weight=2
weight=4 服务器性能不均时候使用
3、 ip_hash
每个请求按访问ip的hash结果分配,每个访客有固定的后端服务器,可以解决session问题
4、 fair(第三方)
按后端服务器的响应时间来分配,响应时间短的优先分配
5、url_hash (第三方)
按访问的url的hash结果分配,使每个url定向到同一个后端服务器,后端为缓存服务器比较有效。
以往的架构lvs或者dns轮询,这样虽然squid里面的均衡的,但是忽略了一点就是数据量,虽然每台squid是均匀但是都是满载的,重复的请求,会占用很多空间,在前面换上nginx在配上url_hash,根据url分流后,每一个url会只存在一个squid上,每台squid数据完全不同。http://edu.codepub.com/2010/0202/20282.php
upstream http_server { //定义负载均衡设备的Ip及设备状态
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
down : 当前的IP server暂时不参与负载,不进行反向代理
weight: 默认为1,weight越大,负载的权重越大
max_fails: 允许请求失败的次数默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误。
fail_timeout : max_fails次失败后,暂停的时间
backup: 其它所有非backup机器down或者忙时候,请求backup机器,这台机器压力最轻
PS:nginx支持同时设置多组负载均衡,给不同的server使用
location:设置对URL进行匹配,比如 location / , location /data 这两个设置优先级,/ 下也可以,但是不如 /data下搜索更快,定位更准。
相关推荐
自行构建web网站(敏感请求包括:注册、登录、详情、支付等),使用Nginx实现反向代理,负载均衡,并统一日志格式。模拟慢连接、DDOS、撞库、爆破等恶意攻击并统一数据格式,Logstash过滤收集有效日志,日志分类归档...
Nginx 实现反向代理的过程: 首先,需要安装多个 Tomcat 服务器,例如两个 Tomcat 服务器,分别监听 8081 和 8082 端口。 其次,需要配置 Tomcat 服务器的 server.xml 文件,以便修改端口号。例如,修改 Tomcat...
通过nginx主节点作为入口,反向代理子节点nginx 子节点nginx里面放vue-cli打包项目 也可以反向代理java项目端口 需要不同域名进行location拦截
Nginx+Tomcat实现反向代理的案例,里面包括了https的配置,和普通配置。希望能给需要的人带来帮助,启动Tomcat,然后启动呢Nginx就可以直接做测试。100%成功。
通过使用Nginx 反向代理来解决JS跨域问题 http://blog.csdn.net/mzhaocai/article/details/79238338
尝试将 C2 隐匿于多级 nginx 反向代理关于利用多级 nginx 反代实现 beacon 上线的大致思路拓扑大致思路是这样,首先,我们会用一个 CS 的外
本文给大家分享的是nginx实现正向代理和反向代理的具体方法配置以及不同的实例情况,非常的详细,希望大家能够喜欢
(1)使用Nginx反向代理,根据访问的路径跳转到不同端口的服务中,Nginx监听端口为8001。 访问 http://127.0.0.1:9001/deu/ 直接跳转到127.0.0.1:8016 访问 http://127.0.0.1:9001/vod/ 直接跳转到127.0.0
然后k兄就提议可以在内网搭建个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用nginx反向代理将不同域名的请求转发给...
本文介绍了Linux安装NodeJs并配合Nginx实现反向代理 ,具体如下: NodeJs是什么? Node.js是一个JavaScript运行环境(runtime)。实际上它是对Google V8引擎进行了封装。V8引 擎执行Javascript的速度非常快,性能非常...
这里面的域名(http://192.168.45.1:8045)即是内部跳转的地址,将该内容拷贝多份实现不同来访域名的跳转) 如下: 3.找到D:\nginx\conf下nginx.conf文件用记事本打开 在文段末尾大括号前加上 include proxy.conf...
windows下配置nginx反向代理tomcat,从下载地址开始讲起,第二步讲常用命令 第三步讲了一个实例,第四步是配置说明
代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。...
Nginx在Window下安装实现微信公众号反向代理配置
这个软件就是通过nginx反向代理方式实现cdn效果,不建议使用,不过可以参考他的配置方法。
nginx 负载均衡 反向代理 nginx 负载均衡 反向代理 nginx 负载均衡 反向代理
Nginx反向代理实现多Tomcat负载均衡 (1).md
问题 在之前的分享的跨域资源共享的文章中,有提到要注意跨域时,如果要发送Cookie,Access-Control-Allow-Origin就不能设为*,必须指定明确的、与请求网页...反向代理(Reverse Proxy)方式是指以代理服务器来接受In
Linux使用Nginx进行反向代理,进行端口转发,可以实现负载均衡等
最近在做项目的时候用到了webSocket协议,而且是在微信小程序中用到了...另一种办法,就是使用nginx反向代理。 因为webSocket协议是基于http协议升级的(见下图),所以可以使用nginx反向代理webSocket. webSocket