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

示意图

在内网IP为192.168.1.100服务器上部署了某个Apache WEB服务,用来运行PHP程序,该服务的端口开在了8080

Apahce反向代理配置

#testproxy.cn
<VirtualHost *:80>
    ServerName testproxy.cn
    <IfModule mod_proxy.c>
        #Reverse Proxy(反向代理)
        ProxyRequests Off
        ProxyVia On
        <Proxy *>
            #注意Deny,Allow之间不要有空格  
            Order Deny,Allow  
            Deny from all
            Allow from all
        </Proxy>
        #配置跟代理,必需放在最后面,否则其他二级访问的反向代理会失败 下面要成对出现
        ProxyPass           / http://192.168.1.100:8080/
        ProxyPassReverse    / http://192.168.1.100:8080/
        #若此处项目名称 /demo/ 代理为 / 跟目录访问,session会丢失,需要配置如下信息  
        #ProxyPassReverseCookiePath /demo/
    </IfModule>
</VirtualHost>

Nginx反向代理配置

http {
    ...
    upstream myservice {
        server 192.168.1.100:8080;
        keepalive 64;
    }
    ...
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name mix.sobird.me;
        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Nginx-Proxy true;
            proxy_set_header Connection "";
            proxy_pass http://myservice;
        }
    }
}

使用Nginx反向代理Gravatar头像服务

设置proxy_cache

http{
    ...
    proxy_cache_path /var/www/gravatar levels=1:2 keys_zone=gravatar:100m inactive=7d max_size=1g;
}

配置项说明:

  • proxy_cache_path 缓存文件路径
  • levels 设置缓存文件目录层次;levels=1:2 表示两级目录
  • keys_zone 设置缓存名字和共享内存大小
  • inactive 在指定时间内没人访问则被删除
  • max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。

使用proxy_cache

在nginx vhost server配置文件中添加如下代码:

location / {
  proxy_cache gravatar;
  proxy_cache_valid  200 206 304 301 302 10d;
  proxy_cache_key $uri;
  proxy_set_header Host $host:$server_port;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://gravatar.com/;
}

配置项说明:

  • proxy_cache gravatar 使用名为 gravatar 的对应缓存配置
  • proxy_cache_valid  200 206 304 301 302 10d; 对httpcode为200…的缓存10天
  • proxy_cache_key $uri  定义缓存唯一key,通过唯一key来进行hash存取
  • proxy_set_header  自定义http header头,用于发送给后端真实服务器
  • proxy_pass   指代理后转发的路径

参考