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

How to implement a reverse proxy for one subdomain

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

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

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

谢谢..

是的,这是所有常见 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>