Nginx正向与反向代理的区别和实践

Posted Python运维圈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx正向与反向代理的区别和实践相关的知识,希望对你有一定的参考价值。

1.正向代理的概念

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

2.反向代理的概念

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

简单的区别方法:正向代理就是我们在浏览器可以设置的代理服务器,主动权在浏览者手里。比如我们有时候要查阅一些资料,被国内墙掉了,这时候我可以在国外的服务器上搭建一个nginx正向代理服务器,然后我们就可以通过浏览器设置代理服务器,来翻墙了。反向代理,是浏览者不知情的,服务器端自己假设的。

下面以nginx为例子来搭建正向代理服务器和反向代理服务器

1.nginx正向代理配置

server{

        resolver 8.8.8.8;

        resolver_timeout 30s; 

        listen 82;

        location / {

                proxy_pass http://$http_host$request_uri;

                proxy_set_header Host $http_host;

                proxy_buffers 256 4k;

                proxy_max_temp_file_size 0;

                proxy_connect_timeout 30;

                proxy_cache_valid 200 302 10m;

                proxy_cache_valid 301 1h;

                proxy_cache_valid any 1m;

        }

}

  • 不能有hostname。 

  • 必须有resolver, 即dns,即上面的8.8.8.8,超时时间(30秒)可选。 

  • 配置正向代理参数,均是由 Nginx 变量组成。 

proxy_pass $scheme://$host$request_uri;  

proxy_set_header Host $http_host;  

  • 配置缓存大小,关闭磁盘缓存读写减少I/O,以及代理连接超时时间。  

proxy_buffers 256 4k;  

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; 

2.nginx反向代理服务器的配置

下面是以负载均衡为例子的反向代理。

http {

# 省略了前面一般的配置,直接从负载均衡这里开始

upstream http_server_pool {

        server 192.168.1.2:8080 weight=2 max_fails=2 fail_timeout=30s;

        server 192.168.1.3:8080 weight=3 max_fails=2 fail_timeout=30s;

        server 192.168.1.4:8080 weight=4 max_fails=2 fail_timeout=30s;

    }

# 一个虚拟主机,用来反向代理http_server_pool这组服务器

server {

        listen       80;

# 外网访问的域名        

        server_name  www.test.com; 

        location / {

#           后端服务器返回500 503 404错误,自动请求转发到upstream池中另一台服务器

            proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;

            proxy_pass http://http_server_pool;

            proxy_set_header Host www.test.com;

            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

        }

        access_log  logs/www.test.com.access.log  combined;

    }

}

最简单的反向代理演示(在一台服务器上做代理服务器,将http请求转发到另一台IIS服务器上,通过二级域名形式访问。)

编辑vim nginx.conf

server {

listen    80;

server_name test.zhoumengkang.com;

location / {

   proxy_pass http://121.199.**.*:80;

}

}

以上是关于Nginx正向与反向代理的区别和实践的主要内容,如果未能解决你的问题,请参考以下文章

Nginx的正向代理和反向代理

nginx实践之代理服务(正向代理与反向代理介绍)

针对nginx,我们来具体聊聊正向代理与反向代理区别

nginx正向代理和反向代理区别和好处

理解正向代理与反向代理的区别

正向代理与反向代理的区别Nginx读书笔记