Nginx的正向代理和反向代理

Nginx的正向代理和反向代理

Scroll Down

nginx的正向代理和反向代理,在说清楚前,我们需要理解什么是正向代理和反向代理!

正向代理

正向代理也就是我们常说的代理(proxy)。

使用环境:比如说我们要访问Google,但是你知道我们是根本不可能直接访问的。这时候我们找到了一台可以访问Google的服务器S1,然后我们在通过这台S1服务器,间接的访问到Google,这就是正向代理!

正向代理.png

例如上图,根据转发代理的设置,可以允许或拒绝请求。如果允许,则将请求转发到internet,然后internet转发到 zabbx.cn www服务器。从www服务器的角度来看,是发出请求的是代理服务器,而不是PC1。因此,当服务器响应时,它会将响应发送给代理。

但是,当转发代理收到响应时,它将其识别为对之前通过的请求的响应。因此,它依次将该响应发送给发出请求的PC1。

因为代理服务器可以跟踪请求,响应,它们的源和目的地,所以不同的客户端可以通过正向代理向不同的服务器发送各种请求,并且代理将对所有请求进行中间处理。同样,某些请求将被允许,而某些请求将被拒绝。

如您所见,代理可以用作访问和控制的单点,使您更容易实施安全策略。正向代理服务器通常与防火墙结合使用,以通过控制源自内部网络中针对Internet主机的客户端的流量来增强内部网络的安全性。因此,从安全角度来看,正向代理主要旨在在内部网络中的客户端计算机上实施安全性。

这就是我们常见的什么行为管理、访问控制、缓存服务器之类的东西。

正向代理的作用

  1. 突破访问限制:通过代理服务器,可以突破自身IP访问限制,访问国外网站,教育网等。
  2. 提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,会将部分请求的响应保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。
  3. 隐藏客户端真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。

注意:我们会经常为了探索世界,到处找梯子。如果是黑客恶意建立的梯子,记录访问活动,那自己就要掂量掂量了!

反向代理

反向代理主要用于流量转发、负载均衡等。

使用环境:对于我们自己来说,一个服务器空间,想多建立几个网站,就可用通过反向代理实现二级域名访问跳转至不同的网站。

反向代理.png

对于我们示例中的PC1,反向代理提供了W1和W2 www服务。需要访问W1服务器,反向代理将会将访问转发到W1。 而PC1将不会和W1直接进行沟通。

反向代理的作用

  1. 隐藏服务器真实IP:使用反向代理,可以对客户端隐藏服务器的IP地址。
  2. 负载均衡:反向代理服务器可以做负载均衡,根据所有真实服务器的负载情况,将客户端请求分发到不同的真实服务器上。
  3. 提高访问速度:反向代理服务器可以对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度。
  4. 提供安全保障:反向代理服务器可以作为应用层防火墙,为网站提供对基于Web的攻击行为(例如DoS/DDoS)的防护,更容易排查恶意软件等。还可以为后端服务器统一提供加密和SSL加速(如SSL终端代理),提供HTTP访问认证等。

nginx的正向代理

nginx.conf 文件:

server {
    # 配置DNS解析IP地址,比如 Google Public DNS,以及超时时间(5秒)
    resolver 8.8.8.8;    # 必需
    resolver_timeout 5s;

    # 监听端口
    listen 80;

    access_log  /home/reistlin/logs/proxy.access.log;
    error_log   /home/reistlin/logs/proxy.error.log;

    location / {
        # 配置正向代理参数
        proxy_pass $scheme://$host$request_uri;
        # 解决如果URL中带"."后Nginx 503错误
        proxy_set_header Host $http_host;

        # 配置缓存大小
        proxy_buffers 256 4k;
        # 关闭磁盘缓存读写减少I/O
        proxy_max_temp_file_size 0;
         # 代理连接超时时间
        proxy_connect_timeout 30;

        # 配置代理服务器HTTP状态缓存时间
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 301 1h;
        proxy_cache_valid any 1m;
    }
}

注:

  • 配置 nginx 正向代理服务,一般是配置到一个 server 块中。注意,在该 server 块中,不要出现 server_name 指令,即不要设置虚拟主机的名称和 IP;
  • resolver 是必需的,如果没有该指令, nginx 无法处理接收到的域名;
  • nginx 代理服务不支持正向代理 HTTPS 站点;

nginx的反向代理配置

nginx.conf 文件:

server {  
    listen       80;  
    server_name  zabbx.cn;  

    location / {
        
        # 被代理的服务器IP,就是真实服务器的IP地址  
        proxy_pass http://192.168.10.100:8080;    # 必需

        # 以下是一些反向代理的配置(非必需)
        proxy_redirect             off;

        # 后端的Web服务器可以通过 X-Forwarded-For 获取用户真实IP
        proxy_set_header           Host $host; 
        proxy_set_header           X-Real-IP $remote_addr; 
        proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;

        # 允许客户端请求的最大单文件字节数
        client_max_body_size       10m; 

        # 缓冲区代理缓冲用户端请求的最大字节数
        client_body_buffer_size    128k;

        # nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_connect_timeout      300;

        # 后端服务器数据回传时间(代理发送超时)
        proxy_send_timeout         300;

        # 连接成功后,后端服务器响应时间(代理接收超时)
        proxy_read_timeout         300; 

        # 设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffer_size          4k;

        # proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
        proxy_buffers              4 32k;

        # 高负荷下缓冲大小(proxy_buffers*2)
        proxy_busy_buffers_size    64k;

        # 设定缓存文件夹大小,大于这个值,将从upstream服务器传  
        proxy_temp_file_write_size 64k; 
    }