Chr*_*ian 5 proxy ip .htaccess subdomain apache-2.2
假设我有以下子域及其自己的文档根等:
monad2.mysite.com
Run Code Online (Sandbox Code Playgroud)
我希望所有请求都代理到一个 IP(例如193.159.3.129
),但它们必须通过服务器mysite.com
(假设monad2
在同一台服务器上)。
我有以下(htaccess)配置,它适用于子域,但无法代理任何其他请求......
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://193.159.3.129/$1 [P]
Run Code Online (Sandbox Code Playgroud)
我的问题是,虽然它确实适用于http://monad2.mysite.com/a.php
(url 保持不变),但它不适用于(urlhttp://monad2.mysite.com/a/b
转换为http://193.159.3.129/a/b
)之类的请求。请注意,后一个地址显示了代理服务器的目录列表,这是正确的,只是子域更改为 ip。
另外,我认为这个系统肯定不能用于 HTTPS 请求,对吗?
编辑:经过更多的故障排除后,我确切地找到了问题发生的时间。每当我尝试访问没有最后一个斜杠的目录时,代理就会失败,我最终会得到一个 IP。一些例子:
Original | Result
--------------------------------+--------------------------------
http://monad2.mysite.com | http://monad2.mysite.com
http://monad2.mysite.com/a/ | http://monad2.mysite.com/a/
http://monad2.mysite.com/a | http://193.159.3.129/a/ <- !
http://monad2.mysite.com/a.php | http://monad2.mysite.com/a.php
Run Code Online (Sandbox Code Playgroud)
您需要ProxyPassReverse
- 它捕获Location
响应标头中的字段并更改它们,以便客户端将继续与代理通信,而不是后端服务器。
ProxyPass
并且ProxyPassReverse
不能在.htaccess
文件中 - 所以用这个替换你当前的重写规则,它应该在你<VirtualHost>
的子域块中:
ProxyPass / http://193.159.3.129/
ProxyPassReverse / http://193.159.3.129/
Run Code Online (Sandbox Code Playgroud)
顺便说一句:.htaccess
在可以避免的情况下不要使用。查看有关此事的Apache 文档。
通常,当您无权访问主服务器配置文件时,您应该只使用 .htaccess 文件。
归档时间: |
|
查看次数: |
6253 次 |
最近记录: |