当前位置: 首页 > 新闻中心 > nginx反向代理,负载均衡和yeauty集成的websocket的使用

nginx反向代理,负载均衡和yeauty集成的websocket的使用

发布时间:2024-04-02 2:33:34

  1. nginx反向代理 好处
  2. nginx服务器有什么作用以及什么是反向代理

一、nginx反向代理 好处

本课程并非散列知识点的罗列,而是从基础应用到架构思维,从场景实践到性能优化,带你拥抱完备的nginx生态。以反向代理和负载均衡这2种经典生产场景为蓝本,深入阐述,助你解决企业生产中的实际问题。打个比如:你开一家餐馆,来一客人,一个服务员从接待、下单、炒菜、传菜、茶水、买单都是他一个人做,他会很快累坏,客人的体验感受也不好。更不用说来一群客人。如果你把员工服务分成几批,按流程做不同的服务,协调起来效率就高很多。

反向代理的最大意义,就是做好接送工作这一层的事,比如过滤非法请求、均衡分配后端服务、压缩请求内容、后端健康检查、高速缓存等。后端的服务器也舒服多了,不用去管乱七八遭的请求,专一做好自已的运算,然后回传给反向代理,碰上真的累了,休息也下也不影响整体对外服务。

总的来说,反向代理是在提高网站的稳定性、服务效率、服务质量。我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。

nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。

通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。

两种均衡:

1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpmyadmin目录代理到第一台server上;访问test.php代理到第二台server上;

2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问test.php页面,会均衡地代理到server1或者server2上。

实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。

二、nginx服务器有什么作用以及什么是反向代理

一:nginx作为正向代理服务器:

1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代理不支持从外网向内网访问资源,一般很少用,经本人测试,效果也不好,有很多页面打不开,在百度搜索的页面也无法返回。

server {

server_name localhost;

resolver 202.106.0.20 8.8.8.8; #只能有一个resolve,但是可以用空格隔开,继续写下一个

resolver_timeout 5s;

listen 8080;

location / {

proxy_pass $scheme://$http_host/$request_uri; proxy_set_header host $http_host;

proxy_buffers 256 4k;

proxy_max_temp_file_size 0;

proxy_connect_timeout 30;

proxy_cache_valid 200 302 10m;

proxy_cache_valid 301 1h;

proxy_cache_valid any 1m;

}

}

2.错误码502 :nginx作为代理服务器向后端转发请求过程中超时。

二:nginx作为反向代理服务器:

反向代理:反向代理也叫reverse proxy,指的是代理外网用户的请求到内部的指定web服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。

反向代理的常用指令:

1.proxy_pass:用来设置将请求转发给的后端服务器的主机,可以是主机名、ip地址:端口的方式,也可以代理到通过upstream设置的主机组,如下:

upstream webserver {

#ip_hash;

server 192.168.0.201 weight=1 max_fails=2 fail_timeout=2;

server 192.168.0.202 weight=1 max_fails=2 fail_timeout=2;

server 127.0.0.1:9008 backup;

}

server {

server_name hfnginx.chinacloudapp.cn;

#access_log logs/host.access.log main;

location / { #静态网页在本机

root html;

index index.html;

}

location ~* ^/form { #指定目录在后端服务器

proxy_pass http://webserver; #此处http://webserver后面不能加/,如果加了会提示语法错误

proxy_set_header x-real-ip $remote_addr;

}

}

2:proxy_hide_header:用于nginx服务器作为反向代理的时候,在返回给客户端http响应的时候,隐藏后端服务版本(如php版本)的信息,可以设置在http/server或location块,如下:

nginx会将上游服务器的响应转发给客户端,但默认不会转发以下http头部字段:date、server、x-pad和x-accel-*。使用proxy_hide_header后可以任意地指定哪些http头部字段不能被转发。例如:

proxy_hide_header cache-control;

proxy_hide_header microsoftofficewebserver;

注:如果是nginx直接作为web服务器,要隐藏版本信息的话,使用fastcgi_hide_header:

3:proxy_pass_header:与proxy_hide_header功能相反,proxy_pass_header会将原来禁止转发的header设置为允许转发,可以设置在http/server或location块例如:

proxy_pass_headerx-accel-redirect;

4:proxy_pass_request_body:是否向后端服务器发送http包体部分,可以设置在http/server或location块,如下:

proxy_pass_request_body on|off; #默认为on

5:proxy_pass_request_headers:是否将客户端的请求头部转发给后端服务器,可以设置在http/server或location块,如下:

proxy_pass_request_headers on | off; #默认为on

6:proxy_set_header:可以更改或添加客户端的请求头部信息内容,并转发之后端服务器,比如在后端服务器想要获取客户端的真实ip的时候,就要更改每一个报文的头部,如下:

proxy_set_header host $remote_addr; #添加host到报文头部,其值为客户端的公网ip地址

7:proxy_set_body:更改nginx服务器接收到的客户端请求的请求内容,然后将修改后的请求转发给后端的服务器,用法如下:

proxy_set_body value; #其中value为要修改的目标内容,可以是变量、文本或者变量的组合。

8:proxy_ip:nginx 0.8.22版本及以上支持此功能,用于nginx配置了多个基于域名或ip的主机的情况下,可以指定代理连接到特定的主机处理,就是强制将客户端请求绑定到指定的ip地址:

proxy_bind x.x.x.x;

9:proxy_connect_timeout:配置nginx服务器与后端服务器尝试建立连接的超时时间,默认为60秒,用法如下:

proxy_connect_timeout 10s; #10s为自定义nginx与后端服务器建立连接的超时时间

10:proxy_read_time:配置nginx服务器向后端服务器或服务器组发起read请求后,等待的超时时间:

proxy_read_time 10s; #默认为60秒

11:proxy_send_time; 配置nginx项后端服务器或服务器组发起write请求后,等待的超时时间:

proxy_send_time 10s; #默认为60s

12:proxy_http_version:用于设置nginx提供代理服务的http协议的版本:

proxy_http_version 1.0|1.1;

13:proxy_method:设置nginx服务器请求后端服务器时使用的方法,一般为post或者get,客户端的请求方法将被忽略:

proxy_method get|put;

14:proxy_ignore_client_abort:设置在客户端网络中断请求时,nginx服务器是否中断对被代理服务器的请求:

proxy_ignore_client_abort off|on; #默认为off,当客户端网络中断请求时,nginx服务器中断其对后端服务器的请求。

15:proxy_ignore_headers:设置nginx不处理后端服务器返回的数据中包含某些指定字段的报文,可以指定的有:”x-accel-redirect”, “x-accel-expires”, “expires”或”cache-control”:

proxy_ignore_headers expires;

16:proxy_redirect:修改后端服务器返回的响应头部中的location货refresh,与proxy_pass配合使用:

17:proxy_intercept_errors:设置nginx服务器返回客户端的错误状态,当后端服务器返回大于等于400的错误码的是,如果本功能是打开的,则nginx服务器返回自定义的错误页面(使用error page定义的),如果没有开启就将后端服务器返回的http状态直接返回给客户端,默认为关闭:

proxy_intercept_errors on | off;

18:proxy_headers_hash_max_size:设置nginx保存http报文头的hash表的上限,默认为512字节:

proxy_headers_hash_bucket_size 512;#申请nginx保存http报文头的hash表的空间大小,默认为64个字节

proxy_headers_hash_max_size 512; #上限

server_names_hash_max_szie 512; #设置服务器名称的上限

server_namse_hash_bucket_size 512; #申请空间大小

19:proxy_headers_hash_bucket_size:#申请nginx保存http报文头的hash表的空间大小,默认为64个字节

proxy_headers_hash_bucket_size 512; #默认为64字节

20:proxy_net_upstream:当使用了upstream的时候,可以定义在发生了特定的情况下将请求依次交给下一个组内的服务器处理,状态包括:

proxy_next_upstream http_404 http_502; //让404报错进入max_fails计数 upstream online {

sticky;

server 172.28.70.161:8080 max_fails=0 fail_timeout=3s ;

server 172.28.70.163:8080 max_fails=0 fail_timeout=3s ;

check interval=3000 rise=2 fall=1 timeout=1000 type=http;

check_http_send "get / http/1.0\r\n\r\n";

check_http_expect_alive http_2xx http_3xx;

}

upstream backup {

server 172.28.22.29:7777 max_fails=0 fail_timeout=3s;

}

21:proxy_ssl_session_reuse:配置是否基于ssl协议与后端服务器建立连接,如下:

proxy_ssl_session_reuse on | off;