关于linux:从虚拟主机proxypass中排除别名

Exclude an alias from virtualhost proxypass

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

  • 如果有人请求 http://test.myserver.com/myapp,apache 服务
    他来自 /var/www/myapp
  • 如果 http://test.myserver.com/ 是
    请求后,apache 将其重定向到端口 8069。
  • 第 2 次有效,但第 1 次无效。有人可以帮忙吗!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <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>


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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <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"\\t \\t<目录 "C:/apache24/htdocs/.well-known"> \\t\\ t\\t... \\t</目录>
    • @AndiB 问题是 <Directory> 不能使用 ProxyPass。只有 <Location> 并且不适用于 Alias。正在寻找解决方案……
    • 这是一个更全面的配置建议:github.com/certbot/certbot/issues/2164 - 关键是使用 ProxyPass /path /url 而不是像以前那样使用 <Location /path> ProxyPass /url。现在它对我有用。
    • @ygoe 你今天是我的英雄。

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

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

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

    相关讨论

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

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

    1
    2
    3
    4
    <Location /.well-known/acme-challenge/>
      RewriteEngine off
      ProxyPass !
    </Location>

    以上是关于linux:从虚拟主机proxypass中排除别名的全部内容。
    THE END
    分享
    二维码
    < <上一篇
    下一篇>>