我想将这些域映射到这些端口。我该怎么做?
http://test1.example.com/phpmyadmin/ example.com:80/phpmyadmin/
http://test1.example.com/app1/ example.com:8080/app1/
http://test1.example.com/app2/ example.com:8090/app2/
http://webmin.example.com/ example.com:10000/
这就是我所做的。问题是,phpmyadmin
不起作用。它被转发到glassfish
.
webmin
正在工作,因为它是一个单独的域。
如何映射phpmyadmin
到同一个域?http://test1.example.com/phpmyadmin/
<VirtualHost *:80>
ServerName test1.example.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPass /admin/ https://localhost:4848/
ProxyPassReverse /admin/ https://localhost:4848/
</VirtualHost>
<VirtualHost *:80>
ServerName test1.example.com/phpmyadmin/
DocumentRoot /usr/share/phpmyadmin
Alias /phpmyadmin /usr/share/phpmyadmin
Alias /mysql /usr/share/phpmyadmin
</VirtualHost>
<VirtualHost *:80>
ServerName webmin.example.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:10000/
ProxyPassReverse / http://localhost:10000/
</VirtualHost>
答案1
将新位置放入顶部 VirtualHost 块内:
<VirtualHost *:80>
ServerName test1.example.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPass /admin/ https://localhost:4848/
ProxyPassReverse /admin/ https://localhost:4848/
ProxyPass /phpmyadmin/ https://localhost:80/phpmyadmin/
ProxyPassReverse /phpmyadmin/ https://localhost:80/phpmyadmin/
ProxyPass /app1/ https://localhost:8080/app1/
ProxyPassReverse /app1/ https://localhost:8080/app1/
ProxyPass /app2/ https://localhost:8090/app2/
ProxyPassReverse /app2/ https://localhost:8090/app2/
</VirtualHost>
答案2
正如 @josh-jolly 所建议的……将各种代理语句放入单个 VHost 中是有帮助的,因为您的配置有多个 VHost,所有这些 VHost 都在端口 80 上监听任何内容。
复杂性的基本顺序
然而,Josh 的建议没有传达(并且在他的示例中错误地说明)的是 mod_proxy 与 mod_rewrite 一样,按照接收的顺序处理提供的模式。
这意味着,如果您将以下几行放在其他 ProxyPass/ProxyPassReverse 块之前,则所有流量都将被此模式捕获。
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
这可能就是为什么所有流量都被发送到 Glassfish,而不是您想要的流量发送到 PHPMyAdmin。
复杂性的嵌套顺序
同样,您应该小心您希望以不同方式路由但嵌套的 URL 模式的复杂性规则的顺序。
以下示例显示了精心设计的复杂顺序规则集。
ProxyPass /myapp http://localhost:9090/
ProxyPassReverse /myapp http://localhost:9090/
ProxyPass /myapp/images http://localhost:8080/
ProxyPassReverse /myapp/images http://localhost:8080/
在此示例中,所有流量都将流向 9090 端口,因为两个 url 都会联系,/myapp
但 mod_proxy 在到达该/myapp/images
模式之前会匹配更基本的模式。
由于 URL 模式的复杂程度降低,按如下方式对块进行排序将允许两种模式适当匹配。
ProxyPass /myapp/images http://localhost:8080/
ProxyPassReverse /myapp/images http://localhost:8080/
ProxyPass /myapp http://localhost:9090/
ProxyPassReverse /myapp http://localhost:9090/
好习惯
- 在您的 VHost 配置中包含注释。您并不总是更新或管理它们的人。
- ProxyPass 和 ProxyPassReverse 应始终匹配。我从来没有找到两个指令应该不同的有效用途。在 URL 模式中包含或不包含尾部斜杠时尤其如此。
- 将相关指令分组在一起,并使用某种注释块在视觉上将它们分开。这对于大型或复杂的 VHost 配置特别有用。但是当练习成为一种习惯会让你的生活变得更加轻松。