如何为一个子域实现反向代理

时间:2015-07-24 20:46:25

标签: reverse-proxy

我在防火墙后面有一组服务器。它只支持端口转发。到目前为止,我所有的子域名(www。,server。,beta。,cloud。)都在一台服务器上(OS X Server)。

我也有一个开发者。位于单独的Freebsd服务器上的子域。形成我的内部网络我可以使用我的DNS将流量发送到开发人员的正确服务器。子域。但是当我从外部访问时,我无法通过端口80访问开发服务器,因为该端口被转发到主服务器。

我不想使用非标准端口,而是希望将代理服务器从主服务器反向代理服务器,但看起来这是针对URL不适用于子域名的。有没有办法可以通过我的主服务器将dev.example.com的所有请求路由到内部开发服务器。

谢谢..

1 个答案:

答案 0 :(得分:1)

是的,这是所有常见rproxies的标准用例,您可以在各自的文档中找到几乎可以使用的示例。使用nginx,基本设置将如下所示(将此文件放在enabled-sites子目录中):

server {
    # prod marked as default so lost traffic ends up on production
    listen 192.168.0.1:80 default;
    server_name production.your.domain;

    access_log /var/log/nginx/production-access.log;

    location / {
        proxy_pass http://your.production.server:80;
    }
}

server {
    listen 192.168.0.1:80;
    server_name dev.your.domain;

    access_log /var/log/nginx/development-access.log;

    location / {
        proxy_pass http://your.development.server:80;
    }
}

使用Pound,你可以使用像

这样的东西
Service
  HeadRequire "Host: .*production.your.domain.*"
  BackEnd
    Address your.production.server
    Port    80
  End
End

Service
  HeadRequire "Host: .*dev.your.domain.*"
  BackEnd
    Address your.development.server
    Port    80
  End
End

# and a safety net for lost traffic
Service
  URL "/"
  Redirect "http://production.you.domain"
end;

Apache的mod_proxy也是可能的,但由于缺乏对该组合的实践经验,我不得不借用Atlassian documentation webpage中的一个例子:

# Put this after the other LoadModule directives
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

# Put this with your other VirtualHosts, or at the bottom of the file
NameVirtualHost *
<VirtualHost *>
    ServerName confluence.example.com

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://confluence-app-server.internal.example.com:8090/
    ProxyPassReverse / http://confluence-app-server.internal.example.com:8090/
    <Location />
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>
<VirtualHost *>
    ServerName jira.example.com

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://jira-app-server.internal.example.com:8080/
    ProxyPassReverse / http://jira-app-server.internal.example.com:8080/
    <Location />
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>