Nginx的正向代理与反向代理详解(2)

首先,我们在上面提到过,设置Nginx服务器的代理服务器,一般是配置到一个server块中,注意,在该server块中,不要出现 server_name指令,即不要设置虚拟主机的名称或IP。而resolver指令是必需的,如果没有该指令,Nginx服务器无法处理接收到的域名。

其次,Nginx服务器的代理服务器不支持正向代理HTTPS站点。

Nginx的反向代理服务

Nginx服务器的反向代理服务是其最常用的重要功能之一,在实际工作中应用广泛,涉及的配置指令也比较多,各类指令完成的功能也不尽相同。下面按照功能分类向大家介绍配置该服务需要掌握的指令。由反向代理服务又可以衍生出多种与此相关的Nginx服务器的重要功能,随后将逐步梳理这些功能,并提供配置实例供大家参考。

Nginx服务器提供的反向代理服务也是比较高效的。它能够同时接收的客户端连接由worker_processes指令和worker_connections指令决定,计算方法为:worker_processes * worker_connections / 4.

配置Nginx服务器反向代理用到的指令如果没有特别说明,原则上可以出现在Nginx配置文件的http块、server块或者location块中,但同正向代理服务的设置一样,一般是在搭建的Nginx服务器中单独配置一个server块来设置反射代理服务。这些指令主要由ngx_http_proxy_module模块进行解析和处理。该模块是Nginx服务器的标准HTTP模块。

反向代理的基本设置的27个指令

学习Nginx服务器的反向代理 服务,要涉及与后端代理服务器相关的配置,是客户端提供正常Web服务的基础,大家应该熟练掌握,尤其是proxy_pass指令,在实际应用过程中需要注意一些配置细节,需要小心使用。

1.proxy_pass指令

该指令用来设置被代理服务器的地址,可以是主机名称、IP地址加端口号等形式。其语法结构为:

proxy_pass URL;

   其中,URL为要设置的被代理服务器的地址,包含传输协议、主机名称或IP地址加商品号、URI等要素。传输协议通常是“http”或者“https”。指令同时还接受以“unix”开始的UNIX-domain套接字路径。例如:

proxy_pass http://www.myweb.name/uri;

proxy_pass http://localhost/uri;

proxy_pass http://unix:/tmp/backend.socket:/uri/;

如果被代理服务器是一组服务器的话,可以使用upstream指令配置后端服务器组。例如:

#多个服务器

...

upstream proxy_svrs                  #配置后端服务器

{

   server http://192.168.1.1:8001/uri/;

   server http://192.168.1.2:8001/uri/;

   server http://192.168.1.3:8001/uri/;

}

 

server

{

   ...

   listen 80;

   server_name ;

   location /

   {

       proxy_pass proxy_svrs;      #使用服务器组名称

   }

}

      这里首先需要提醒大家proxy_pass指令在使用服务器组名称时应该注意一个细节。在上例中,在组内的各个服务器中都指明了传输协议“”,而在proxy_pass指令中就不需要指明了。如果 现在将upstream指令的配置改为:

#不指明http

...

upstream proxy_svrs                  #配置后端服务器

{

   server 192.168.1.1:8001/uri/;

   server 192.168.1.2:8001/uri/;

   server 192.168.1.3:8001/uri/;

}

我们就需要在proxy_pass指令中指明传输协议“”;

proxy_pass http://proxy_svrs;

在使用该指令的过程中还需要注意,URL中是否包含有URI,Nginx服务器的处理方式是不同的。如果URL中不包含URI,Nginx服务器不会改变原地址的URI;但是如果包含了URI,Nginx服务器将会使用新的URI替代原来的URI。我们举例来说明。

请看下面的Nginx配置片段:

..

server

{

   ...

   server_name ;

   resolver 8.8.8.8;

   listen 82;

   location /server/

   {

       ...

       proxy_pass http://192.168.1.1;

   }

}

    如果客户端使用“ ”发起请求,该请求被配置中显示的location块进行处理,由于proxy_pass指令变量不含有URI,所以转向的地址为“ ”;我们再来看下面的Nginx片段:

..

server

{

   ...

   server_name ;

   resolver 8.8.8.8;

   listen 82;

   location /server/

   {

       ...

       proxy_pass http://192.168.1.1/loc;

   }

}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cc35ad9c874a2f03153b68bc14463b1b.html