我有以下设置:
现在我的问题:我如何configuration代理服务器(一个完全可configuration的Apache 2.2与PHP 5.3)来解释从普通服务器的纯PHP文件?
例如:在Plain-Server上指定一个小的php脚本“hello.php”(可通过http://plainserver/hello.php访问):
<?php echo "Hello World"; ?>
Plain-Server只输出纯文本,不parsingphp代码。
在代理服务器上,文件“hello.php”不存在。 但是当从代理服务器请求hello.php时,它应该使用mod_proxy(反向代理)从Plain-Server获得hello.php。 它也应该parsing和执行PHP,只说“Hello World”。
反向代理已经在运行,但执行php代码不起作用。 我试过mod_filter,但不能使它工作。 任何想法如何? (注:也张贴在stackoverflow.com)
你没有。 那么,不pipe用mod_proxy。 你可以有一个代理PHP脚本,请求的内容和evals它,但…呃。
无论你在做什么,公平地说你做错了。
我用mod_ext_filterfind了另一种方法。 将以下内容添加到您的httpd.conf中:
ProxyPass /test/ http://localhost:9000/ <IfModule mod_ext_filter.c> ExtFilterDefine parse-php mode=output intype=text/html cmd="/usr/bin/php" </IfModule> ProxyPassReverse /test/ http://localhost:9000/ <LocationMatch "\.php"> SetOutputFilter parse-php </LocationMatch>
所以它运行在/ usr / bin /中find的外部应用程序php。 坏事情:启动一个单独的进程,并parsingphp文件,这不是文件夹/ test /的一部分。
我也尝试使用fast-cgi或mod_php来parsingphp文件,但无法使其工作。 任何想法如何使用fast-cgi解释php文件?
这是非常糟糕的解决scheme…但在代理机器上不要configuration任何代理,而是添加
ErrorDocument 404 /index.php
并在index.php中放置检查$ _SERVER ['REQUEST_URI']的逻辑,从内容服务器下载代码并使用eval执行它。
但这很糟糕,包括不会工作… womble是正确的。 只是尝试另一种方法。 如果你真的绝望,也许使用webdav和davfs ,但这仍然是丑陋的黑客攻击,如果你坚持在一台机器上托pipe代码并在另一台机器上解释,nfs会更有效率。
我有一个类似的问题 – 在我的情况下,主“纯文本”服务器可以parsingXQuery到HTML,但不是PHP。 所以我决定填补与Apache的差距,但也希望整个网站是自足的,以便于备份。
我通过将Apache的DocumentRoot设置为与主服务器提供的文件相同的目录解决了这个问题,然后使用ProxyPassMatch匹配以.php结尾的请求,并通过添加!来告诉mod_proxy 不要代理这些文件! 到指令声明的末尾:
DocumentRoot "/path/to/localhost.main/ … ProxyRequests off ProxyPassMatch ^/(.*\.php)$ ! ProxyPass / http://localhost.main:8080/ ProxyPassReverse / http://localhost.main:8080/ ProxyPassReverseCookieDomain localhost.proxy localhost.main
这样,所有的PHP文件都得到parsing(在我的情况下通过FastCGI,但也应该与mod_php一起工作),并由Apache服务,其余的通过到主服务器。
我也在做这个重写,尽pipe如此,要将酷的URI映射到一个带有查询参数的处理脚本,这需要另一个规则才能正常工作,尽pipe这里的逻辑是反转的,因为它在正则expression式本身内部是否定的(使用否定向后看):
RewriteRule ^/(.*(?<!\.php))$ /path/to/script/$1 [L,PT,QSA]