在嵌入式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。。。。

昏过去啊。。。。。

时间: 2024-10-13 00:05:20

在嵌入式Jetty(Embedded Jetty)中部署FastCGI Servlet载入PHP程序的相关文章

在IIS中部署ASP.NET 5应用程序遭遇的问题

用VS2015中创建了一个非常简单的ASP.NET5程序: 在Startup.cs中只输入一行代码: using System; using Microsoft.AspNet.Builder; using Microsoft.AspNet.Http; namespace HellowAspNet5 { public class Startup { public void Configure(IApplicationBuilder app) { app.Run(context => context

Jetty学习四:部署到Jetty

Web应用的框架 标准Jetty发布版本能部署标准servlet Spec Web应用和Jetty内部ContextHandler部署描述符,或者两者的一个混合. Web应用是可部署的动态(servlets.filters.jsps.等等)和静态内容.支持库.和绑定到特定上下文路径的描写性的元数据的集合. 格式和布局最终都是通过Servlet Spec定义,你可以查阅官方Servlet Spec文档获取关于Web应用布局和结构的更多细节,这里将给出一个基本的轮廓. Web应用能被捆绑到一个单个的

在Docker容器中部署Web应用

本文直接讲解如何在Docker容器中实战部署一个Web应用程序,关于Docker相关的概念和如何安装Docker请参考相关资料完成. 第一步:工具准备 演示如何在Docker容器中部署一个Java Web应用程序,需要准备的软件工具包括:jre,tomcat和webapp应用.另外,为了实现在容器启动时自动启动webapp,需要编写一个脚本工具完成该工作. 安装jre,请参考:http://www.wikihow.com/Install-Java-on-Linux 安装tomcat,请参考:ht

在Jetty中部署Jenkins遇到的问题

1. Jetty 9.0.3 启动时的错误: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@kvm-guest jetty-9.0.3]# java -jar start.jar Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/jetty/start/Main : Unsupported major.minor version 51.0 at j

一.配置简单的嵌入式tomcat和jetty

我们写了一个web应用,打成war包后,就需要找一个server来部署.对于我们的实际应用,我们基本没必要自己再写一个嵌入式的server.接下来两篇文章只是以钻研的心态来学习一下嵌入式tomcat和jetty. 促使我去写这篇文章是因为在我看来,gretty不完美,无论用tomcat还是jetty,修改类之后,reload几次内存占用高涨,硬盘读写频繁,最终感到无奈(应用存在内存不正确释放,或许我使用的方式不对).我选用了<<gradle的war插件>>简单开发的web应用,此例

基于embedded jetty server的websocket开发

websocket提供一种在浏览器和服务器之间的全双工通信(full-duplex),替代了传统的轮询(polling)做法.目前,在一些web-base的富文本编辑器中有广泛的应用,例如Etherpad,石墨文档,有道云笔记等.具体的关于websocket的定义请参见:http://baike.baidu.com/view/3623887.htm 和 https://en.wikipedia.org/wiki/WebSocket.下文是一个基于embedded jetty server的web

在Azure Cloud Service中部署Java Web App(1)

Microsoft Azure是一个开放的,灵活的云平台,除了对自家的.Net平台有良好的支持外,对于各种开源的软件,语言,工具,框架都有着良好的支持,比如Java,Php,Python等等,你可以使用自己喜欢的语言开发任何应用部署在Azure的web site或者云服务中. Azure的云服务是Azure的一个PAAS平台,同样支持多种不同的语言和框架,并且可以基于多种不同的阈值如CPU负载,队列,定时等等实现Auto scaling等高级功能,如下图所示: 本文简单介绍如何使用Azure所提

在Tomcat 中部署Solr4.x

1.安装Tomcat (1)下载并解压至/opt/tomcat中 [[email protected] solr]# cd /opt [[email protected] opt]# tar -zxvf apache-tomcat-7.0.54.tar.gz [[email protected] opt]# mv apache-tomcat-7.0.54 tomcat 将目录重命名为tomcat [[email protected] opt]# ls apache-tomcat-7.0.54.t

【Jetty】Jetty 的工作原理以及与 Tomcat 的比较

Jetty 应该是目前最活跃也是很有前景的一个 Servlet 引擎.本文将介绍 Jetty 基本架构与基本的工作原理:您将了解到 Jetty 的基本体系结构:Jetty 的启动过程:Jetty 如何接受和处理用户的请求.你还将了解到 AJP 的一些细节:Jetty 如何基于 AJP 工作:以及 Jetty 如何集成到 Jboss:最后我们将比较一下两个 Servlet 引擎:Tomcat 和 Jetty 的优缺点. Jetty 的基本架构 Jetty 目前的是一个比较被看好的 Servlet