什么是反向代理

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

举个例子,一个用户访问 ​​http://www.example.com/readme​​​,但是 ​​www.example.com​​​ 上并不存在 readme 页面,它是偷偷从另外一台服务器上取回来,然后作为自己的内容返回给用户。但是用户并不知情这个过程。对用户来说,就像是直接从 ​​www.example.com​​​ 获取 readme 页面一样。这里所提到的 ​​www.example.com​​ 这个域名对应的服务器就设置了反向代理功能。

反向代理服务器,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。如下图所示:





Openresty 反向代理 api服务_反向代理


反向代理典型应用场景

反向代理的典型用途是将防火墙后面的服务器提供给 Internet 用户访问,加强安全防护。反向代理还可以为后端的多台服务器提供负载均衡,或为后端较慢的服务器提供 缓冲 服务。另外,反向代理还可以启用高级 URL 策略和管理技术,从而使处于不同 web 服务器系统的 web 页面同时存在于同一个 URL 空间下。

Nginx 的其中一个用途是做 HTTP 反向代理,下面简单介绍 Nginx 作为反向代理服务器的方法。

使用nginx反向代理django的api请求

配置文件​​nginx.conf​

worker_processes  1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {

server_tokens off;

# 配置反向代理,将访问 / 的url路径,反向请求至http://192.168.43.128:8000
server {
listen 8080;
location / {
proxy_pass http://192.168.43.128:8000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}

测试如下:

  • 首先直接访问django的api服务,如下:



Openresty 反向代理 api服务_反向代理_02


可以看到请求8000端口号正常。

  • 现在访问nginx的8080端口服务,查看是否访问正常,如下:



Openresty 反向代理 api服务_服务器_03


可以看到访问是正常返回结果的。说明nginx反向代理成功。




Openresty 反向代理 api服务_nginx_04