从virtualhost proxypass中排除别名

use*_*428 22 linux apache ubuntu virtualhost openerp

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

  1. 如果有人请求http://test.myserver.com/myapp,apache会从/ var/www/myapp为他提供服务
  2. 如果请求http://test.myserver.com/,apache会将其重定向到端口8069.

第二个工作,但第一个不工作.请有人帮忙!

<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>
Run Code Online (Sandbox Code Playgroud)

use*_*428 42

这就是我能够达到预期结果的方式.以下是工作配置,其中ProxyPassMatch ^/myapp !诀窍和(服务器地址)/ 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>
Run Code Online (Sandbox Code Playgroud)

  • 与使用反向代理的虚拟主机的加密验证非常有用,但仍希望使用自动验证,例如Alias /.well-known"C:/apache24/htdocs/.well-known"<目录"C:/ apache24/htdocs/.well-known"> ... </ Directory> (2认同)

小智 17

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

ProxyPass /myapp !
ProxyPass / http://localhost:8069/
Run Code Online (Sandbox Code Playgroud)

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