1nginx反向代理
反向代理设置是在location配置项中配置,可以根据请求路径前缀,设置多个反向代理,几多个location配置
server {
listen 8089;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
root html/devops;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
location /oauth2/oauth {
proxy_pass http://172.16.161.53:80; #反向代理的地址
proxy_set_header Host $host; #设置请求头 可以多个
proxy_connect_timeout 90; #与代理服务器的连接超时时长
proxy_send_timeout 90; #后端服务器的数据回传时间,在规定的时间内没有回传完数据,nginx也会断开这个连接
proxy_read_timeout 90; #nginx等待代理服务器的响应时间,超过设置的时间还没收到响应,nginx将断开这个连接
proxy_buffer_size 4k; #设置缓冲区大小
proxy_buffers 4 32k; #设置缓冲区个数,大小
proxy_busy_buffers_size 64k; #设置系统忙碌时可以使用的proxy_buffers大小,官方推荐为proxy_buffers*2
proxy_temp_file_write_size 64k; #/指定proxy缓存临时文件的大小
proxy_redirect off; #设置是否修改返回给客户端的信息中location,如何设置为off,location为设置的代理服务器地址
proxy_next_upstream http_502 http_504 http_503 error timeout invalid_header; //请求出错后,转向下一个节点
}
}
反向代理时路径映射关系
1、例如:nginx反向代理配置如下:
location /ucUserApp/ {
proxy_pass http://server/ucUserApp/; #反向代理的地址
}
这样配置就是所有以/ucUserApp/开头的请求,都会被转发到http://server/ucUserApp/这个地址。
例如http://localhost:4200/ucUserApp/home 实际请求地址为http://server/ucUserApp/home
有时候,做代理的时候不太想要这个前缀,就需要把proxy_pass中配置改为如下http://server/
这样,还是上面的请求地址,实际请求地址就为http://server/home了,把前缀ucUserApp去掉了
2、路径匹配中有无/的区别
location /ucUserApp/ {
proxy_pass http://server; #反向代理的地址
}
location /ucUserApp/ {
proxy_pass http://server/; #反向代理的地址
}
这两种配置区别只在于 proxy_pass配置的路径最后面有没有 “/” ,
假如访问路径为http://server/myapp/index.html
当 proxy_pass 配置的路径以 “/” 结尾(第二种配置), 经过nginx代理之后,路径会变为 http://server/index.html,会直接把路径代理到server的根目录下
当proxy_pass配置的路径不以"/"结尾(第一种配置),经过nginx代理之后,路径会变为 http://server/myapp/index.html, 只会把原路径的的ip,端口改变,路径地址不变
2负载均衡
当后台服务器是集群是,不能只设置单个的代理地址了,这时候就涉及到负载均衡了。负载均衡简单配置如下
server {
listen 8089;
server_name localhost;
#这里定义一个名为tomcat_server的负载均衡池 地址不要加http
upstream tomcat_server{
server 10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
#weight 指的是采用权重策略的权重值
# max_fails :连接失败后,在fail_timeout 定义的时间段内尝试重新连接此主机的次数,这个数值默认为1,设置为0失败后就不在尝试连接此主机
# fail_timeout: 定义重新尝试连接的时间
#这里设置 30秒内如果尝试2次连接还没连接上该主机,就会认为该主机不可用
}
root html/devops;
index index.html index.htm;
#这里的proxy_pass就是协议+定义的负载均衡池名字
location / {
proxy_pass http://tomcat_server; #反向代理的地址
}
}
2.1负载均衡策略
1、权重策略
配置方法就是在负载均衡池的每个server后面加上权重值 : weight=值
1、权重值越大,被负载的请求比率就越大。
2、此策略可以与least_conn和ip_hash结合使用。
2、轮询策略
默认负载均衡策略
1、server后面配置的参数
fail_timeout:与max_fails配合使用,设置一定时间内,尝试一定次数重新连接主机,没连接上就标志该主机不可用
max_fails:见上
backup:标志该主机为备用主机,当主服务器down掉,请求都会被代理到该主机
down:标志该主机永久停机
2、在轮询中,如果服务器down掉了,会自动剔除该服务器。
3、缺省配置,使用的就是轮训策略
3、ip_hash策略
1、配置,在负载均衡池中加上ip_hash。
upstream tomcat_server{
ip_hash
server 10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
}
2、该策略基于客户端IP的分配方式,确保相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问
一个后 端服务器,可以解决session不能跨服务器的问题。
3、在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
4、ip_hash不能与backup同时使用。
5、此策略适合有状态服务,比如session。
6、当有服务器需要剔除,必须手动down掉。
4、least_conn
该策略会把把请求转发给连接数较少的后端服务器
1、配置,在负载均衡池中加上least_conn 。
upstream tomcat_server{
least_conn
server 10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
}