使用Nginx实现TCP四层反向代理

众所周知,海外高性能服务器加不错的线路等于贵得离谱,然而不看网络的话,价格就便宜不少,再选择一台低配的线路不错的VPS作为前端进行代理的就划算很多。做站的话一般通过nginx进行http或者tcp代理,以前一直都在使用http反向代理,好处是配置简单效果也不差,但如果进行https代理,前端也需要配置ssl证书,从安全的角度来说显然是不合理的。因此折腾了下通过Nginx Stream模块进行tcp代理,因为只是传输层协议,便可以不用配置ssl证书。

然而无论那种方式,对于做站来说,都有获取到真实ip的需求。如果是http代理的话,可以通过编译ngx_http_realip_module模块并设置proxy_set_header实现,这里不再讨论。这篇文章着重说下tcp代理的实现方法和过程。

要使用stream模块,编译Nginx的时候需要加上--with-stream参数,然后再nginx.conf中配置,一个简单的代理模型如下:

stream{
    ...
    upstream backend{
        server your.domain.com:443
    }

    server{
        listen 443 ssl;
        proxy_pass backend;
        ...
    }
}

Read More >