private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ... scalability guidance for your apps and Ajax/Comet projects ... development services from 1 day to full product delivery
In this section you will see how to configure Jetty to serve WordPress via FastCGI.
The first step is to have WordPress installed in your server machine, for example under
/var/www/wordpress. For more information about how to install WordPress,
please refer to the WordPress Installation Guide.
The second step is to install
php-fpm and make sure it is configured to listen
on a TCP socket; typically it is configured to listen to
The third step is to install Jetty, for example under
/opt/jetty, called in the
Refer to Downloading Jetty for more information about how to install Jetty.
The fourth step is to create a Jetty base directory (see Managing Jetty Base and Jetty Home),
called in the following
$JETTY_BASE, where you setup the configuration needed to support
FastCGI in Jetty, and configure the
so that Jetty will be able to accept HTTP requests from browsers, convert them in FastCGI, and proxy
$ mkdir -p /usr/jetty/wordpress $ cd /usr/jetty/wordpress $ java -jar $JETTY_HOME/start.jar --add-to-module=fcgi,http,deploy
The fifth step is to deploy the web application that provides the proxying of client requests to
the FastCGI server,
Typically this is done by deploying a
*.war file in the
directory, but in case of FastCGI there is really nothing of this web application that you have to write:
all the work is already done for you by the Jetty developers.
Therefore you just need to deploy a Jetty XML file that configures the web application directly.
Copy and paste the following content as
Explanation of this file content:
At line 6 it is specified the WordPress installation directory, in this example
/var/www/wordpress (as defined in the first step).
At line 9 it is specified the context path at which WordPress will be served, in this example
at the root context path
At line 10 it is specified the resource base of the context, also set to the WordPress installation directory. This allows Jetty to serve static resources directly from the WordPress installation directory.
At line 12 it is specified the welcome file as
index.php, so that
Jetty can perform the proper redirects in case of URIs ending with the
At line 15 it is specified the
TryFilesFilter, a Servlet Filter that has been inspired
by the try_files functionality
offered by Nginx.
This filter tries to serve the resource from the file system first, and if the resource is not found
it forwards the request as
index.php?p=$path, which will match the proxy servlet
defined below. Refer to the
documentation for further information.
At line 29 it is specified Jetty's
DefaultServlet to serve static content such as
DefaultServlet will serve these files by looking
in the resource base of the context, defined at line 10 (see above).
At line 47 it is specified the
FastCGIProxyServlet, a Servlet that proxies HTTP
requests arriving from clients to FastCGI requests to the FastCGI server.
At line 52 it is specified the TCP address of the FastCGI server (
HTTP requests are forwarded as FastCGI requests.
At line 60 it is specified once again the WordPress installation directory, so that the
FastCGIProxyServlet can pass this information to the FastCGI server.
At line 64 it is specified a regular expression that matches request URIs performed to this servlet, in addition to the standard URL mapping defined by Servlet at line 49. Refer to the FastCGIProxyServlet documentation for further information.
The last step is to start Jetty (see Chapter 9, Starting Jetty) and hit
with your browser and enjoy WordPress:
$ cd $JETTY_BASE $ java -jar /opt/jetty/start.jar
In order to configure Jetty to listen for HTTP/2 requests from clients that are HTTP/2 enabled
and forward them to the FastCGI server as FastCGI requests, you need to enable the
module, which in turn will require a TLS connector and consequently a keystore to read
the key material required by TLS.
http2 is really simple; in additions to the modules you have enabled
above, add the
$ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar --add-to-start=http2
The command above adds the
http2 module (and its dependencies) to the existing modules
and uses the default Jetty keystore to provide the key material required by TLS. You will want to use
your own keystore with your own private key and certificate for your own domain.
Remember that by adding the
http2 module, you will start two JVMs: one that reads the
configuration, and one that has the ALPN boot boot jar
in the boot classpath, as explained in Configuring HTTP/2.
Since now your site will run over TLS, you need to make sure that the WordPress URL is also
If you have followed the steps of the previous section,
your WordPress site is served at
You will need to change that to be
https://localhost:8443 from the WordPress
administration web interface, or follow the
to do so without using the administration web interface.
The minimal modules required to run WordPress with Jetty on HTTP/2 are therefore:
These will setup a clear text connector on port 8080 for HTTP/1.1 and a TLS connector on
port 8443 for HTTP/2 and HTTP/1.1.
At this point, you can start Jetty (see Chapter 9, Starting Jetty), hit
with your browser and enjoy WordPress via HTTP/2 using a HTTP/2 enabled browser:
$ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar
If you don't have a HTTP/2 enabled browser, WordPress will still be available over plain HTTP/1.1.