从虚拟主机 proxypass 中排除别名

Posted

技术标签:

【中文标题】从虚拟主机 proxypass 中排除别名【英文标题】:Exclude an alias from virtualhost proxypass 【发布时间】:2015-01-07 01:27:07 【问题描述】:

我正在关注虚拟主机配置。期望的结果是:

    如果有人请求http://test.myserver.com/myapp,apache 服务 他来自 /var/www/myapp 如果http://test.myserver.com/ 是 请求后,apache 将其重定向到端口 8069。

第 2 次有效,但第 1 次无效。有人可以帮忙吗!

<VirtualHost *:80>
        ServerName test.myserver.com

        Alias /myapp /var/www/myapp
        <Directory /var/www/myapp>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>

        ProxyPass / http://localhost:8069/
        ProxyPassReverse / http://localhost:8069/

</VirtualHost>

【问题讨论】:

【参考方案1】:

这就是我能够达到预期结果的方式。以下是ProxyPassMatch ^/myapp ! 发挥作用的工作配置,除了 (server-address)/myapp 之外,所有请求都被代理到在端口 8069 上运行的 open-erp 的另一台服务器:

<VirtualHost *:80>
        ServerName test.myserver.com

        Alias /myapp /var/www/myapp
        <Directory /var/www/myapp>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>

        ProxyPassMatch ^/myapp !
        ProxyPass / http://localhost:8069/
        ProxyPassReverse / http://localhost:8069/


  CustomLog /var/log/apache2/access.log common
  ErrorLog /var/log/apache2/error.log

</VirtualHost>

【讨论】:

结合let's encrypt使用反向代理的虚拟主机验证非常有用,但仍想使用自动验证,例如。 G。别名 /.well-known "C:/apache24/htdocs/.well-known" ... @AndiB 问题是 不能使用 ProxyPass。只有 并且不适用于 Alias。正在寻找解决方案…… 这里有一个更全面的配置建议:github.com/certbot/certbot/issues/2164——关键是使用ProxyPass /path /url,而不是像我以前那样使用&lt;Location /path&gt; ProxyPass /url。现在它对我有用。 @ygoe 今天你是我的英雄。【参考方案2】:

您可以简单地在定义 / 之前添加另一个 ProxyPass 指令,而不是使用:ProxyPassMatch ^/myapp !,如下所示:

ProxyPass /myapp !
ProxyPass / http://localhost:8069/

由于 ProxyPass 尊重优先级(将处理第一个匹配项),它将正确重定向到目录而不是代理。

【讨论】:

确保http://localhost:8069/ 服务器在应用程序中没有任何名为/myapp 的路由。就我而言,它显示404 嗨,这会让最终的 url 看起来像 xyz.com/myapp【参考方案3】:

如果您有 RewriteCond(很可能在您运行代理时),这也会让您开心!

<Location /.well-known/acme-challenge/>
  RewriteEngine off
  ProxyPass !
</Location>

【讨论】:

以上是关于从虚拟主机 proxypass 中排除别名的主要内容,如果未能解决你的问题,请参考以下文章

从 IP 获取主机名别名

从 charles 代理记录中排除主机

Apache 和 Tomcat:ProxyPass 和 ProxyPassReverse

WebSockets (Apache ProxyPass)

多个虚拟主机 httpd 的多个别名

配置nginx虚拟主机别名及别名企业场景应用说明