码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-03-13 08:08:38      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

这段时间由于服务器架构,需要研究在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。。。。

昏过去啊。。。。。

 

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

标签:

原文地址:http://www.cnblogs.com/littlejedi/p/4334213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!