在嵌入式Jetty(Embedded Jetty)中部署FastCGI Servlet载入PHP程序

这段时间由于服务器架构,需要研究在Java基础上的Jetty中部署PHP程序(Wordpress,Discuz)

在网上查了很多资料,都是用httpd或者nginx当前段Web Server,Jetty在后台服务器的。介于我之前用的嵌入式Jetty(embedded jetty),所以并不适合这种解决方案。

后来又搜索了一下,发现Jetty原来本身就有这个支持:

http://www.eclipse.org/jetty/documentation/9.2.7.v20150116/configuring-fastcgi.html

http://lutaf.com/141.htm

https://gutspot.com/2014/06/24/%E6%B5%8B%E8%AF%95jetty%E7%9A%84fastcgi%E6%94%AF%E6%8C%81/

由于官方说明给的是XML形式的配置,我把它转了如下的Java形式,这里特别注意两个servlet都要设置成AsyncSupported = true,不然Jetty会报错

public WebAppContext phpWebAppContext() throws Exception {
        String root = "/root/php/yourPHPScriptLocation";
        WebAppContext ctx = new WebAppContext();
        ctx.setContextPath("/php");
        ctx.setResourceBase(root);
        ctx.setWelcomeFiles(new String[]{"index.php"});
        ServletHolder defaultServletHolder = new ServletHolder(DefaultServlet.class);
        defaultServletHolder.setAsyncSupported(true);
        ctx.addServlet(defaultServletHolder, "/");
        ServletHolder proxyHolder = new ServletHolder(FastCGIProxyServlet.class);
        proxyHolder.setAsyncSupported(true);
        proxyHolder.setInitParameter("proxyTo", "http://localhost:9000");
        proxyHolder.setInitParameter("scriptRoot", root);
        proxyHolder.setInitParameter("scriptPattern", "(.+?\\.php)");
        ctx.addServlet(proxyHolder, "*.php");
        return ctx;       
    }

之后在服务器上启动,用服务器自带的Package Manager就可以下载到。

我启动了以后一切都正常,没有报错,可是显示页面的结果却一直是404 File Not Found。我查了半天,感觉设置都是对的,而且php-fpm的access log也成功显示接到请求了。

究竟什么原因呢??查了半天,在php-fpm的配置文件里看到这一段(样例配置文件可以看这里:https://github.com/perusio/php-fpm-example-config/):

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user‘s group
; will be used.
user = apache
group = apache

发现运行的时候主进程和子进程都是以apache运行的,我在好奇心之下,把两个都改成root,然后用了php-fpm -R 运行(-R是允许用root运行)

一试,竟然好了!

真是晕倒,没有权限访问竟然也不提示错误,就说file not found。。。。

昏过去啊。。。。。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。