Nginx正向代理和反向代理

Nginx 阅读: 470

什么是代理?

代理(英语:Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。

正向代理和反向代理的概念

盗了两张图,第二张比较形象:

正向代理和反向代理

正向代理和反向代理

正向代理

你(client)需要访问某台服务器(server),但是你没有访问渠道,只能通过一个代理服务器(proxy)去访问server。这个过程就要正向代理,特点是你知道你访问的目的地但是只能通过代理去访问。

正向代理的代理服务器(proxy)代理的是客户端(clinet)。

正向代理的有个典型例子是“翻墙”,比如你通过代理去访问Google。

反向代理

你(client)访问了某台服务器,但实际上这台服务器只是一个代理服务器(proxy),代理服务器会把请求转交给真正提供服务的服务器(server)。这个过程就要反向代理,特点是你只知道你访问的代理服务器能提供服务,但是不知道谁是真正的服务提供者(也不需要知道)。

反向代理的代理服务器(proxy)代理的是服务器端(server)。

反向代理的一般用于服务器负载均衡。

Nginx配置正向代理

打开配置文件,在http块增加下面代码:


# http正向代理
server {
    # 指定DNS服务器IP地址
    resolver 114.114.114.114;

    # 监听端口(http)
    listen 80;

    location / {
        # 设定代理服务器的协议和地址
        proxy_pass $scheme://$http_host$request_uri;
        proxy_set_header HOST $http_host;
        proxy_buffers 256 4k;
        proxy_max_temp_file_size 0k;
        proxy_connect_timeout 30;
        proxy_send_timeout 60;
        proxy_read_timeout 60;
        proxy_next_upstream error timeout invalid_header http_502;
    }

    #access_log logs/proxy_access.log;
    #error_log  logs/proxy_error.log;
}

# https正向代理
server {
    # 指定DNS服务器IP地址
    resolver 114.114.114.114;

    # 监听端口(http)
    listen 443;

    location / {
        # 设定代理服务器的协议和地址
        proxy_pass $scheme://$http_host$request_uri;

        # 代理配置参数
        proxy_set_header HOST $http_host;
        proxy_buffers 256 4k;
        proxy_max_temp_file_size 0k;
        proxy_connect_timeout 30;
        proxy_send_timeout 60;
        proxy_read_timeout 60;
        proxy_next_upstream error timeout invalid_header http_502;
    }

    #access_log logs/proxy_access.log;
    #error_log  logs/proxy_error.log;
}

Nginx配置反向代理

Nginx 反向代理的指令不需要新增额外的模块,默认自带 proxy_pass 指令,只需要修改配置文件就可以实现反向代理。

打开配置文件,在http块增加:

# 设定实际的服务器列表 
upstream proxy_server{
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    # ...
}

注:upstream作用是使nginx轮询访问,每一个请求按时间顺序逐一分配到不同的后端服务器。

然后在配置代理服务器的server块中增加:

#反向代理的路径(和upstream绑定),location 后面设置映射的路径
location / {
    proxy_pass http://proxy_server;

    # 代理配置参数
    proxy_set_header Host $host;
    proxy_set_header X-Forwarder-For $remote_addr;
    proxy_connect_timeout 180;
    proxy_send_timeout 180;
    proxy_read_timeout 180;
} 

参考文章

  1. 正向代理和反向代理的区别
  2. Nginx正向代理与反向代理 - 简书

版权声明:本文为博主原创文章,转载需注明来自: 洛洛の空间