Apache ProxyPass 反向 DNS - 转发所有源文件?

Apache ProxyPass 反向 DNS - 转发所有源文件?

我在本地网络中有一些网站,无法访问互联网。所以我想设置一台可以访问互联网的机器,并将其用作反向代理。

我的 apache 配置如下所示:

ProxyPass "/website1" "http://192.168.0.1/website1"
ProxyPassReverse "/website1" "http://192.168.0.1/website1"

因此,当我访问我的公共域 /website 1 时,它会将我重定向到 website1,但是当我单击那里的某个内容将我转发到 /website1/about 之类的内容时,它不起作用,因为源代码仍然说要转到http://192.168.0.1/website1/about,这在本地网络之外显然是不可能的。

那么,如何让 Apache 转发所有文件并重写路径?

或者一个更好的问题是,有没有比 apache 更好的东西可以做反向代理?

完整的配置:http://pastebin.com/Mhuv7YzM

答案1

根据后端的功能,您有两个选择。

如果后端服务器使用请求的主机名修改 html 链接,您只需添加:

ProxyPreserveHost on

如果您想要修改响应中的“固定”html 链接的内容,您还需要“mod_proxy_html“功能,这是一个特定于此功能的 mod_proxy 子模块。

mod_proxy_html

答案2

你不需要。ProxyPassReverse仅用于重写重定向,而不是文件主体中某处的路径。这需要对内容格式(如 HTML、SOAP 等)有相当全面的了解,才能知道路径在哪里出现和被替换(例如<a href="...">HTML 中的路径,还有<link><script>、 ......)。

您可能想要做的只是为不同的反向代理网站设置不同的 vHost,这样就不需要重写相对路径了。当然,如果某些链接包含域名(如果我正确理解您的问题,似乎就是这种情况),它也不会以这种方式工作,您“只需”在内部主机上配置网站以在链接中使用正确的外部域名。

答案3

我现在只是使用 nginx,它运行完美。

sub_filter_types        text/css;
sub_filter_once         off;
sub_filter              '192.168.0.1'  'proxy.mydomain.com';
proxy_set_header        Accept-Encoding "";

location /website1 {
    proxy_pass              http://192.168.0.1/website1;
}

location /website2 {
    proxy_pass              http://192.168.0.2/website2;
}

您甚至可能希望使用缓存来加快访问速度,然后添加以下内容:

proxy_cache_path /var/www/cache levels=1:2 keys_zone=nginx:10m;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 10m;
proxy_cache nginx;

只需确保创建路径 /var/www/cache 或设置另一个现有路径

答案4

您忘记启用“RewriteEngine”请确保您已启用mod_proxy、mod_proxy_http 和mod_rewrite。

添加这个可能会解决它。

    ProxyRequests off
    RewriteEngine on
    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

而且这些行看起来应该是这样的:

ProxyPass "/website1" "http://192.168.0.1/website1"
ProxyPassReverse "/website1" "http://192.168.0.1/website1"
RewriteRule ^/website1$ http://%{HTTP_HOST}/website1 [L,R=301]

相关内容