反向代理

反向代理(Reverse Proxy),是指用代理服务器来接受Internet上的连接请求,然后将 请求转发给内网上的上游服务器,并将从上游服务器上得到的结果返回给Internet上的请求连接的客户端,此时代理服务器对外的表现就是一个Web服务器。

Nginx作为反向代理的原因

Nginx具备高并发高负载能力,因此一般用作前端服务器直接向客户端提供静态文件服务。对于一些复杂业务不适合放在Nginx服务器上的一般用ApacheTomcat等服务器来处理。此时就需要将Nginx同时配置为静态服务器以及反向代理,不适合Nginx处理的请求就通过反向代理功能转发到上游服务器中处理。

从另一个角度,只有用户的动态请求(不同用户请求结果不同)才会需要反向代理,如果结果一样就是静态资源请求。

Nginx作为反向代理的特点

当客户端发来HTTP请求时,Nginx并不会立即转发到上游服务器,而是先把用户的请求(包括HTTP包体)完整的接收到Nginx所在服务器的硬盘或内存中,然后再向上游服务器发起连接。

Squid等代理服务器则是一边接收客户端请求,一边转发到上游服务器。

Nginx方式可以降低上游服务器的负载,降低其并发压力。

所需模块

  1. ngx_http_proxy_module

具体配置步骤

以最简单的方式配置一个反向代理。

将上篇搭建的静态服务器改为上游服务器

上游服务器一般是内网服务器。

vim /home/nginx/conf/nginx.conf

修改:

http {
    server {
        listen	127.0.0.1:8080; # 127.0.0.1表示只能本机进程访问
    }
}
停止原来的Nginx进程,并重启

/home/nginx/sbin/nginx -s stop

/home/nginx/sbin/nginx

此版本为1.16.1

用OpenResty搭建反向代理

依据OpenResty® Linux 包界面方式下载、安装OpenResty

修改OpenResty下Nginx配置

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

http {
    upstream local { # 表示上游服务器地址,将这一批服务器命名为local
        server 127.0.0.1:8080 # 其中一台服务器地址,可以有很多
    }
    server {
        sercer_name localhost; 
        listen 80;
        location / { # 对所有的请求
            proxy_pass http://local; # 代理到刚才配置的上游服务中
        }
    }
}
启动OpenResty下的Nginx

/usr/local/openresty/nginx/sbin/nginx

此时访问ip:80,抓包可以看到请求头是OpenResty返回的。

配置缓存服务器\响应服务器
http {
    upstream local { # 表示上游服务器地址,将这一批服务器命名为local
        server 127.0.0.1:8080 # 其中一台服务器地址,可以有很多
    }
    server {
        sercer_name localhost; 
        listen 80;
        location / { # 对所有的请求
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forward_for;
            
            proxy_cache my_cache;
            proxy_cache_key $host$uri$is_arfs$args;
            proxy_cache_valid 200 304 302 ld;
            proxy_pass http://local; # 代理到刚才配置的上游服务中
        }
    }
}