从虚拟主机 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"ProxyPass /path /url
,而不是像我以前那样使用<Location /path> 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 中排除别名的主要内容,如果未能解决你的问题,请参考以下文章