如何创建有条件的 ProxyPass?

res*_*ing 5 reverse-proxy apache-2.2

对于站点可用.conf文件之一,我有以下配置。如果您点击 ,
它会配置为加载ghost博客blog.example.com
不知何故,它也导致example.com提供博客。但这也很好。

<Virtualhost *:80>
  ServerName blog.example.com
  ServerAdmin admin80@example.com
  ProxyPass        /  http://localhost:2368/
  ProxyPassReverse /  http://localhost:2368/
</Virtualhost>
Run Code Online (Sandbox Code Playgroud)

所以我刚刚安装phpmyadmin,我意识到我无法使用http://example.com/phpmyadmin. 访问该页面将显示未找到 ghost 的 404 页面。

所以我想我需要一些条件ProxyPass来忽略/phpmyadmin
我尝试了以下方法也不起作用。

<Virtualhost *:80>
  ServerName blog.example.com
  ServerAdmin admin80@example.com
  ProxyPass        /phpmyadmin  http://localhost/phpmyadmin
  ProxyPassReverse /phpmyadmin  http://localhost/phpmyadmin
  ProxyPass        /  http://localhost:2368/
  ProxyPassReverse /  http://localhost:2368/
</Virtualhost>
Run Code Online (Sandbox Code Playgroud)

Apache 只是挂起,当我点击 时我必须重新启动它http://example.com/phpmyadmin

更新

我尝试了以下操作,它加载了phpmyadmin登录页面。只是:80在 localhost 之后添加的。并为虚拟主机指定一个特定的域名而不是*.

<Virtualhost blog.example.com:80>
  ServerName blog.example.com
  ServerAdmin admin@example.com
  ProxyPass        /phpmyadmin  http://localhost:80/phpmyadmin
  ProxyPassReverse /phpmyadmin  http://localhost:80/phpmyadmin
  ProxyPass        /  http://localhost:2368/
  ProxyPassReverse /  http://localhost:2368/
</Virtualhost>
Run Code Online (Sandbox Code Playgroud)

现在的问题是,它重定向到http://localhost/phpmyadmin/index.php?token=8fa78a71a166399749b58cd3cb66b7f2phpmyadmin我猜可能是一些配置。

Ger*_*der 6

您可以使用!目标来阻止代理位置:

<Virtualhost *:80>
  DocumentRoot     /path/to/parent/of/phpmyadmin
  ProxyPass        /phpmyadmin !
  ProxyPass        /  http://localhost:2368/
  ProxyPassReverse /  http://localhost:2368/
</Virtualhost>
Run Code Online (Sandbox Code Playgroud)

这会将所有请求代理到localhost:2368,除了对 phpmyadmin 的请求。

当然你必须设置一个文档根目录,否则找不到phpmyadmin。