首页服务器nginx代理服务器(如何运用Nginx搭建代理服务器)

nginx代理服务器(如何运用Nginx搭建代理服务器)

编程之家2023-10-2395次浏览

大家好,感谢邀请,今天来为大家分享一下nginx代理服务器的问题,以及和如何运用Nginx搭建代理服务器的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

nginx代理服务器(如何运用Nginx搭建代理服务器)

Nginx代理功能详解

Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细。

Nginx代理服务的配置说明

1、上一篇中我们在http模块中有下面的配置,当代理遇到状态码为404时,我们把404页面导向百度。

然而这个配置,细心的朋友可以发现他并没有起作用。

如果我们想让他起作用,我们必须配合着下面的配置一起使用

nginx代理服务器(如何运用Nginx搭建代理服务器)

2、如果我们的代理只允许接受get,post请求方法的一种

3、设置支持的http协议版本

4、如果你的nginx服务器给2台web服务器做代理,负载均衡算法采用轮询,那么当你的一台机器web程序iis关闭,也就是说web不能访问,那么nginx服务器分发请求还是会给这台不能访问的web服务器,如果这里的响应连接时间过长,就会导致客户端的页面一直在等待响应,对用户来说体验就打打折扣,这里我们怎么避免这样的情况发生呢。这里我配张图来说明下问题。

nginx代理服务器(如何运用Nginx搭建代理服务器)

如果负载均衡中其中web2发生这样的情况,nginx首先会去web1请求,但是nginx在配置不当的情况下会继续分发请求道web2,然后等待web2响应,直到我们的响应时间超时,才会把请求重新分发给web1,这里的响应时间如果过长,用户等待的时间就会越长。

5、如果使用upstream指令配置啦一组服务器作为被代理服务器,服务器中的访问算法遵循配置的负载均衡规则,同时可以使用该指令配置在发生哪些异常情况时,将请求顺次交由下一组服务器处理。

6、如果你想通过http获取客户的真是ip而不是获取代理服务器的ip地址,那么要做如下的设置。

关于X-Forwarded-For与X-Real-IP的一些相关文章我推荐一位博友的: HTTP请求头中的 X-Forwarded-For,这位博友对http协议有一系列的文章阐述,推荐大家去关注下。

7、下面是我的一个关于代理配置的配置文件部分,仅供参考。

上一篇中我说啦nginx有哪些中负载均衡算法。这一结我就给如果操作配置的给大家做详细说明下。

首先给大家说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有2中写法。

然后,就来点实战的东西。

1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....

upstream mysvr{ server 127.0.0.1:7878; server 192.168.10.121:3333 backup;#热备}

2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....

upstream mysvr{ server 127.0.0.1:7878; server 192.168.10.121:3333;}

3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....

upstream mysvr{ server 127.0.0.1:7878 weight=1; server 192.168.10.121:3333 weight=2;}

4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。

upstream mysvr{ server 127.0.0.1:7878; server 192.168.10.121:3333; ip_hash;}

5、如果你对上面4种均衡算法不是很理解,那么麻烦您去看下我上一篇配的图片,可能会更加容易理解点。

到这里你是不是感觉nginx的负载均衡配置特别简单与强大,那么还没完,咱们继续哈,这里扯下蛋。

关于nginx负载均衡配置的几个状态参数讲解。

down,表示当前的server暂时不参与负载均衡。

backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。

max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误。

fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

到这里应该可以说nginx的内置负载均衡算法已经没有货啦。如果你像跟多更深入的了解nginx的负载均衡算法,nginx官方提供一些插件大家可以了解下。

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;

如何运用Nginx搭建代理服务器

如何实现Nginx的反向代理?

这句话什么意思?

意思是说当客户机来访问服务器的时候,服务器本身并不出面接待,而是将客户的请求转高给手下的子服务器(小弟)负责接待。

比如:你访问www.baidu.com,其实并不时百度总服务器接待的你,而是百度的代理服务器接待的你,不过他们的服务是一样的,提供同样的页面;

如是搭建Nginx服务才能实现这样的效果呢?

搭建一个最简单,最基础nginx代理服务器,需要一台代理服务,两台子服务器,XX台客户机来作验证;

操作流程如下:

第一步、服务器和客户机配好IP地址,其中Nginx代理服务器需要配置两张网卡,两个IP地址,一个和客户机通信,一个和子服务器通信;

代理服务器与客户机和子服务器都分别配置同网段IP地址;

例如:

代理服务器:192.168.4.5  192.168.2.5

子服务器    :192.168.2.100  192.168.2.200

客户机  :192.168.4.10

这样配置的好处是:可以负载均衡,保障用户的访问体验,保障上网速度,同时也保障了,即便有一台服务器坏掉了,另一台服务可以接待用户访问;

第二步、代理服务器上安装Nginx服务软件,两台子服务器上安装HTTPD服务并写入相应的网页,然后启动服务;

yum -y install httpd    ##安装httpd服务;

echo "罗贵" >  /var/www/html/index.html   ##写一个简单的网页

./configure  --user=nginx  --group=nginx --with-http_ssl_module

make &&  make  install  ##编译安装Nginx

第三步、修改Nginx的配置文件;

vim /usr/local/nginx/conf/nginx.conf

http { ...............  ##在文件中找到http开头的行,并在http下面随意找两行添加下面两行的内容;

       upstream  luogui  {    ##luogui是集群名字,可以自由定义,upstream上游的意思;翻译过来就是在上游建立一个名字为luogui的集群,集群中包含下述IP地址;

            server  192.168.2.100:80;

            server  192.168.2.200:80;

}

server  {

     listen    80;

     server_name  www.luogui.com;  ##域名,可以自由定义;

location  ^/.php$ {  ##匹配网页地址的意思,匹配以/开头.php结尾的网页文件;

     proxy_pass http://luogui;    ##通过proxy代理服务器将用户的请求转发给luogui集群服务器;(注:优先级最高,系统会优先处理这条命令)

       }

               }

第四步、测试效果;

firefox  http://192.168.4.5 或者 本地测试  curl http://192.168.4.5 

结果应该是暂停任何一台子服务器,客户机访问网页都没有问题;

以上.......

                          (EDN)

祝:开心!

罗贵

2019-04-05于深圳

关于nginx代理服务器的内容到此结束,希望对大家有所帮助。

无法连接过期的服务器(我的世界无法连接过期的服务器是怎么回事)aws云服务器?如何管理aws云服务器