代理服务

一个常见的场景是, 我们的python服务开起了, 但一般不会将python服务对外直接服务, 而是会通过Nginx 将请求转发到python的服务端口,

这里的Nginx就是作为代理服务使用的,

那么Nginx的代理服务如何配置呢,

--下面以上一篇的静态文件服务( https://www.u3v3.com/ar/1375 )作为后端服务, 将web请求转发到该服务 --

代理配置

上一篇我我们用8080端口作为web服务端口, 可以访问静态index.html 和 images 资源

现在, 我们希望通过9090端口, 也能访问同样的资源

当然, 我们不会重新配置8080端口同样的配置来提供服务, 而是通过代理服务, 将9090的请求转发到8080端口,

这样, 我们就能实现目标了

我们需要在nginx.conf配置添加如下内容

 server {
        listen 9090;

        location / {
            proxy_pass http://localhost:8080;
        }
   }

sudo nginx -s reload 重新加载配置

现在, 所有通过9090访问的请求都会被转发到8080端口, 这就实现了代理服务的需求

以上, 仅仅是实现了一个简单的代理服务, 那么这个代理服务一般做什么用的呢

反向代理

一般来说, Nginx作为一个性能强劲的web服务器, 我们用来做代理服务, 可以将web请求转发到多个后端服务, 这样就可以达到分担服务压力的目的,

比如, 如果我们的web服务需要承担100QPS的请求, 而我们有4台web服务器, 那么我们就可以通过代理服务将100QPS平均分担到4台web服务, 这样, 每台web服务就仅需负担25的QPS, 达到了负载均衡的目的

这就是所谓的反向代理的一种

那么这种是如何实现的呢

ngx_http_upstream_module 模块

Ngnix 的ngx_http_upstream_module可以用来按组定义服务列表, 这些定义好的服务列表组, 可以提供给proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass使用, 将Nginx的的请求均衡负载到某个组的每台服务器上

在我们这里的代理服务中, 我们可以像下面, 先定义好一组服务列表(假设192.168.1.32, 192.168.1.33, 192.168.1.34 都提供了我们上面的8080端口一样的服务)

 upstream static_server_list {
        server 192.168.1.32:8080;
        server 192.168.1.33:8080;
        server 192.168.1.34:8080;
   }

现在, 我们重新配置本地的9090代理服务, 如下

   server {
        listen 9090;

        location / {
            proxy_pass http://static_server_list;
        }
   }

注意proxy_pass后面, 写的是upstream 定义的组名

重载配置sudo nginx -s reload

现在我们通过9090端口, 就能将web请求平均地负载到static_server_list服务列表中的3台服务器了, 达到了负载均衡的目的, 实现了反向代理的功能 :-)

right