| type=page | |
| status=published | |
| title=Administering Web Applications | |
| next=logging.html | |
| prev=threadpools.html | |
| ~~~~~~ | |
| Administering Web Applications | |
| ============================== | |
| [[GSADG00009]][[gbbjk]] | |
| [[administering-web-applications]] | |
| 6 Administering Web Applications | |
| -------------------------------- | |
| This chapter explains how to administer web applications in the | |
| GlassFish Server Open Source Edition 5.0 environment. | |
| The following topics are addressed here: | |
| * link:#beagk[Invoking a Servlet by Alternate Means] | |
| * link:#gixud[Changing Log Output for a Servlet] | |
| * link:#beagc[Defining Global Features for Web Applications] | |
| * link:#gixrb[Redirecting a URL] | |
| * link:#gfaad[Administering `mod_jk`] | |
| * link:#CIHJDAJD[Administering `mod_proxy_ajp`] | |
| Instructions for accomplishing some of these tasks by using the | |
| Administration Console are contained in the Administration Console | |
| online help. | |
| [[beagk]][[GSADG00548]][[invoking-a-servlet-by-alternate-means]] | |
| Invoking a Servlet by Alternate Means | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| You can call a servlet deployed to GlassFish Server by using a URL in a | |
| browser or embedded as a link in an HTML or JSP file. The format of a | |
| servlet invocation URL is as follows: | |
| [source,oac_no_warn] | |
| ---- | |
| http://server:port/context-root/servlet-mapping?name=value | |
| ---- | |
| The following table describes each URL section. | |
| [[GSADG857]][[sthref20]][[fvyhk]] | |
| Table 6-1 URL Fields for Servlets Within an Application | |
| [width="100%",cols="21%,79%",options="header",] | |
| |======================================================================= | |
| |URL element |Description | |
| |server`:`port a| | |
| The IP address (or host name) and optional port number. | |
| To access the default web module for a virtual server, specify only this | |
| URL section. You do not need to specify the context-root or servlet-name | |
| unless you also wish to specify name-value parameters. | |
| |context-root a| | |
| For an application, the context root is defined in the `context-root` | |
| element of the `application.xml`, `sun-application.xml`, or | |
| `sun-web.xml` file. For an individually deployed web module, the context | |
| root is specified during deployment. | |
| For both applications and individually deployed web modules, the default | |
| context root is the name of the WAR file minus the `.war` suffix. | |
| |servlet-mapping |The `servlet-mapping` as configured in the `web.xml` | |
| file. | |
| |`?`name`=`value`...` |Optional request parameters. | |
| |======================================================================= | |
| [[GSADG00166]][[giyhf]] | |
| Example 6-1 Invoking a Servlet With a URL | |
| In this example, `localhost` is the host name, `MortPages` is the | |
| context root, and `calcMortgage` is the servlet mapping. | |
| [source,oac_no_warn] | |
| ---- | |
| http://localhost:8080/MortPages/calcMortgage?rate=8.0&per=360&bal=180000 | |
| ---- | |
| [[GSADG00167]][[giyib]] | |
| Example 6-2 Invoking a Servlet From Within a JSP File | |
| To invoke a servlet from within a JSP file, you can use a relative path. | |
| For example: | |
| [source,oac_no_warn] | |
| ---- | |
| <jsp:forward page="TestServlet"/><jsp:include page="TestServlet"/> | |
| ---- | |
| [[gixud]][[GSADG00549]][[changing-log-output-for-a-servlet]] | |
| Changing Log Output for a Servlet | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| `ServletContext.log` messages are sent to the server log. By default, | |
| the `System.out` and `System.err` output of servlets are sent to the | |
| server log. During startup, server log messages are echoed to the | |
| `System.err` output. Also by default, there is no Windows-only console | |
| for the `System.err` output. | |
| You can change these defaults using the Administration Console Write to | |
| System Log box. If this box is checked, `System.out` output is sent to | |
| the server log. If it is unchecked, `System.out` output is sent to the | |
| system default location only. | |
| [[beagc]][[GSADG00550]][[defining-global-features-for-web-applications]] | |
| Defining Global Features for Web Applications | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| You can use the `default-web.xml` file to define features such as | |
| filters and security constraints that apply to all web applications. | |
| For example, directory listings are disabled by default for added | |
| security. To enable directory listings in your domain's | |
| `default-web.xml` file, search for the definition of the servlet whose | |
| `servlet-name` is equal to `default`, and set the value of the | |
| `init-param` named `listings` to `true`. Then restart the server. | |
| [source,oac_no_warn] | |
| ---- | |
| <init-param> | |
| <param-name>listings</param-name> | |
| <param-value>true</param-value> | |
| </init-param> | |
| ---- | |
| If `listings` is set to `true`, you can also determine how directory | |
| listings are sorted. Set the value of the `init-param` named `sortedBy` | |
| to `NAME`, `SIZE`, or `LAST_MODIFIED`. Then restart the server. | |
| [source,oac_no_warn] | |
| ---- | |
| <init-param> | |
| <param-name>sortedBy</param-name> | |
| <param-value>LAST_MODIFIED</param-value> | |
| </init-param> | |
| ---- | |
| The `mime-mapping` elements in `default-web.xml` are global and | |
| inherited by all web applications. You can override these mappings or | |
| define your own using `mime-mapping` elements in your web application's | |
| `web.xml` file. For more information about `mime-mapping` elements, see | |
| the Servlet specification. | |
| You can use the Administration Console to edit the `default-web.xml` | |
| file, or edit the file directly using the following steps. | |
| [[fvymc]][[GSADG00370]][[to-use-the-default-web.xml-file]] | |
| To Use the `default-web.xml` File | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| 1. Place the JAR file for the filter, security constraint, or other | |
| feature in the domain-dir`/lib` directory. | |
| 2. Edit the domain-dir`/config/default-web.xml` file to refer to the | |
| JAR file. | |
| 3. To apply your changes, restart GlassFish Server. + | |
| See link:domains.html#ginqj[To Restart a Domain]. | |
| [[gixrb]][[GSADG00551]][[redirecting-a-url]] | |
| Redirecting a URL | |
| ~~~~~~~~~~~~~~~~~ | |
| You can specify that a request for an old URL be treated as a request | |
| for a new URL. This is called redirecting a URL. | |
| To specify a redirected URL for a virtual server, use the `redirect_n` | |
| property, where n is a positive integer that allows specification of | |
| more than one. Each of these `redirect_n` properties is inherited by all | |
| web applications deployed on the virtual server. | |
| The value of each `redirect_n` property has two components which can be | |
| specified in any order: | |
| * The first component, `from`, specifies the prefix of the requested URI | |
| to match. | |
| * The second component, `url-prefix`, specifies the new URL prefix to | |
| return to the client. The from prefix is replaced by this URL prefix. | |
| [[GSADG00168]][[giyis]] | |
| Example 6-3 Redirecting a URL | |
| This example redirects `from` `dummy` to `etude`: | |
| [source,oac_no_warn] | |
| ---- | |
| <property name="redirect_1" value="from=/dummy url-prefix=http://etude"/> | |
| ---- | |
| [[gfaad]][[GSADG00552]][[administering-mod_jk]] | |
| Administering `mod_jk` | |
| ~~~~~~~~~~~~~~~~~~~~~~ | |
| The Apache Tomcat Connector `mod_jk` can be used to connect the web | |
| container with web servers such as Apache HTTP Server. By using | |
| `mod_jk`, which comes with GlassFish Server, you can front GlassFish | |
| Server with Apache HTTP Server. | |
| You can also use `mod_jk` directly at the JSP/servlet engine for load | |
| balancing. For more information about configuring `mod_jk` and Apache | |
| HTTP Server for load balancing with GlassFish Server 5.0 refer to | |
| "link:../ha-administration-guide/http-load-balancing.html#GSHAG00009[Configuring HTTP Load Balancing]" in GlassFish Server | |
| Open Source Edition High Availability Administration Guide. | |
| The following topics are addressed here: | |
| * link:#gixqw[To Enable `mod_jk`] | |
| * link:#gixpx[To Load Balance Using `mod_jk` and GlassFish Server] | |
| * link:#gjpat[To Enable SSL Between the `mod_jk` Load Balancer and the | |
| Browser] | |
| * link:#gjpan[To Enable SSL Between the `mod_jk` Load Balancer and | |
| GlassFish Server] | |
| [[gixqw]][[GSADG00371]][[to-enable-mod_jk]] | |
| To Enable `mod_jk` | |
| ^^^^^^^^^^^^^^^^^^ | |
| You can front GlassFish Server with Apache HTTP Server by enabling the | |
| `mod_jk` protocol for one of GlassFish Server's network listeners, as | |
| described in this procedure. A typical use for `mod_jk` would be to have | |
| Apache HTTP Server handle requests for static resources, while having | |
| requests for dynamic resources, such as servlets and JavaServer Pages | |
| (JSPs), forwarded to, and handled by the GlassFish Server back-end | |
| instance. | |
| When you use the `jk-enabled` attribute of the network listener, you do | |
| not need to copy any additional JAR files into the `/lib` directory. You | |
| can also create JK connectors under different virtual servers by using | |
| the network listener attribute `jk-enabled`. | |
| 1. Install Apache HTTP Server and `mod_jk`. | |
| * For information on installing Apache HTTP Server, see | |
| `http://httpd.apache.org/docs/2.2/install.html`. | |
| * For information on installing `mod_jk`, see | |
| `http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html`. | |
| 2. Configure the following files: | |
| * `apache2/conf/httpd.conf`, the main Apache configuration file | |
| * `apache2/conf/workers.properties` + | |
| link:#gixrq[Example 6-4] and link:#gixqt[Example 6-5] provide examples | |
| of configuring these two files. | |
| 3. Start Apache HTTP Server (`httpd`). | |
| 4. Start GlassFish Server with at least one web application deployed. + | |
| In order for the `mod_jk`-enabled network listener to start listening | |
| for requests, the web container must be started. Normally, this is | |
| achieved by deploying a web application. | |
| 5. Create a jk-enabled network listener by using the | |
| link:../reference-manual/create-network-listener.html#GSRFM00046[`create-network-listener`] subcommand. + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> create-network-listener --protocol http-listener-1 \ | |
| --listenerport 8009 --jkenabled true jk-connector | |
| ---- | |
| 6. If you are using the `glassfish-jk.properties` file to use | |
| non-default values of attributes described at | |
| `http://tomcat.apache.org/tomcat-5.5-doc/config/ajp.html`), set the | |
| `jk-configuration-file` property of the network listener to the | |
| fully-qualified file name of the `glassfish-jk.properties` file. + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> set server-config.network-config.network-listeners.network-listener.\ | |
| jk-connector.jk-configuration-file=domain-dir/config/glassfish-jk.properties | |
| ---- | |
| 7. If you expect to need more than five threads for the listener, | |
| increase the maximum threads in the `http-thread-pool` pool: + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> set configs.config.server-config.thread-pools.thread-pool.\ | |
| http-thread-pool.max-thread-pool-size=value | |
| ---- | |
| 8. To apply your changes, restart GlassFish Server. + | |
| See link:domains.html#ginqj[To Restart a Domain]. | |
| [[GSADG00169]][[gixrq]] | |
| Example 6-4 `httpd.conf` File for `mod_jk` | |
| This example shows an `httpd.conf` file that is set for `mod_jk`. In | |
| this example, `mod_jk` used as a simple pass-through. | |
| [source,oac_no_warn] | |
| ---- | |
| LoadModule jk_module /usr/lib/httpd/modules/mod_jk.so | |
| JkWorkersFile /etc/httpd/conf/worker.properties | |
| # Where to put jk logs | |
| JkLogFile /var/log/httpd/mod_jk.log | |
| # Set the jk log level [debug/error/info] | |
| JkLogLevel debug | |
| # Select the log format | |
| JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " | |
| # JkOptions indicate to send SSL KEY SIZE, | |
| JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories | |
| # JkRequestLogFormat set the request format | |
| JkRequestLogFormat "%w %V %T" | |
| # Send all jsp requests to GlassFish | |
| JkMount /*.jsp worker1 | |
| # Send all glassfish-test requests to GlassFish | |
| JkMount /glassfish-test/* worker1 | |
| ---- | |
| [[GSADG00170]][[gixqt]] | |
| Example 6-5 `workers.properties` File for `mod_jk` | |
| This example shows a `workers.properties` that is set for `mod_jk`. This | |
| `workers.properties` file is referenced in the second line of | |
| link:#gixrq[Example 6-4]. | |
| [source,oac_no_warn] | |
| ---- | |
| # Define 1 real worker using ajp13 | |
| worker.list=worker1 | |
| # Set properties for worker1 (ajp13) | |
| worker.worker1.type=ajp13 | |
| worker.worker1.host=localhost | |
| worker.worker1.port=8009 | |
| ---- | |
| [[GSADG858]] | |
| See Also | |
| For more information on Apache, see `http://httpd.apache.org/`. | |
| For more information on Apache Tomcat Connector, see | |
| `http://tomcat.apache.org/connectors-doc/index.html`. | |
| [[gixpx]][[GSADG00372]][[to-load-balance-using-mod_jk-and-glassfish-server]] | |
| To Load Balance Using `mod_jk` and GlassFish Server | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| Load balancing is the process of dividing the amount of work that a | |
| computer has to do between two or more computers so that more work gets | |
| done in the same amount of time. Load balancing can be configured with | |
| or without security. | |
| In order to support stickiness, the Apache `mod_jk` load balancer relies | |
| on a `jvmRoute` system property that is included in any `JSESSIONID` | |
| received by the load balancer. This means that every GlassFish Server | |
| instance that is front-ended by the Apache load balancer must be | |
| configured with a unique `jvmRoute` system property. | |
| 1. On each of the instances, perform the steps in link:#gixqw[To Enable | |
| `mod_jk`]. + | |
| If your instances run on the same machine, you must choose different JK | |
| ports. The ports must match `worker.worker*.port` in your | |
| `workers.properties` file. See the properties file in | |
| link:#gixqt[Example 6-5]. | |
| 2. On each of the instances, create the `jvmRoute` system property of | |
| GlassFish Server by using the link:../reference-manual/create-jvm-options.html#GSRFM00042[`create-jvm-options`] | |
| subcommand. + | |
| Use the following format: + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> create-jvm-options "-DjvmRoute=/instance-worker-name"/ | |
| ---- | |
| where instance-worker-name is the name of the worker that you defined to | |
| represent the instance in the `workers.properties` file. | |
| 3. To apply your changes, restart Apache HTTP Server and GlassFish | |
| Server. | |
| [[GSADG00171]][[gjjzu]] | |
| Example 6-6 `httpd.conf` File for Load Balancing | |
| This example shows an `httpd.conf` file that is set for load balancing. | |
| [source,oac_no_warn] | |
| ---- | |
| LoadModule jk_module /usr/lib/httpd/modules/mod_jk.so | |
| JkWorkersFile /etc/httpd/conf/worker.properties | |
| # Where to put jk logs | |
| JkLogFile /var/log/httpd/mod_jk.log | |
| # Set the jk log level [debug/error/info] | |
| JkLogLevel debug | |
| # Select the log format | |
| JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " | |
| # JkOptions indicate to send SSL KEY SIZE, | |
| JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories | |
| # JkRequestLogFormat set the request format | |
| JkRequestLogFormat "%w %V %T" | |
| # Send all jsp requests to GlassFish | |
| JkMount /*.jsp worker1 | |
| # Send all glassfish-test requests to GlassFish | |
| JkMount /glassfish-test/* loadbalancer | |
| ---- | |
| [[GSADG00172]][[gjjzf]] | |
| Example 6-7 `workers.properties` File for Load Balancing | |
| This example shows a `workers.properties` or `glassfish-jk.properties` | |
| file that is set for load balancing. The `worker.worker*.port` should | |
| match with JK ports you created. | |
| [source,oac_no_warn] | |
| ---- | |
| worker.list=worker1,worker2,loadbalancer | |
| worker.worker1.type=ajp13 | |
| worker.worker1.host=localhost | |
| worker.worker1.port=8009 | |
| worker.worker1.lbfactor=1 | |
| worker.worker1.socket_keepalive=1 | |
| worker.worker1.socket_timeout=300 | |
| worker.worker2.type=ajp13 | |
| worker.worker2.host=localhost | |
| worker.worker2.port=8010 | |
| worker.worker2.lbfactor=1 | |
| worker.worker2.socket_keepalive=1 | |
| worker.worker2.socket_timeout=300 | |
| worker.loadbalancer.type=lb | |
| worker.loadbalancer.balance_workers=worker1,worker2 | |
| ---- | |
| [[gjpat]][[GSADG00373]][[to-enable-ssl-between-the-mod_jk-load-balancer-and-the-browser]] | |
| To Enable SSL Between the `mod_jk` Load Balancer and the Browser | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| To activate security for `mod_jk` on GlassFish Server, you must first | |
| generate a Secure Socket Layer (SSL) self-signed certificate on the | |
| Apache HTTP Server with the `mod_ssl` module. The tasks include | |
| generating a private key, a Certificate Signing Request (CSR), a | |
| self-signed certificate, and configuring SSL-enabled virtual hosts. | |
| [[GSADG859]] | |
| Before You Begin | |
| The `mod_jk` connector must be enabled. | |
| 1. Generate the private key as follows: + | |
| [source,oac_no_warn] | |
| ---- | |
| openssl genrsa -des3 -rand file1:file2:file3:file4:file5 -out server.key 1024 | |
| ---- | |
| where `file1:file2:` and so on represents the random compressed files. | |
| 2. Remove the pass-phrase from the key as follows: + | |
| [source,oac_no_warn] | |
| ---- | |
| openssl rsa -in server.key -out server.pem | |
| ---- | |
| 3. Generate the CSR is as follows: + | |
| [source,oac_no_warn] | |
| ---- | |
| openssl req -new -key server.pem -out server.csr | |
| ---- | |
| Enter the information you are prompted for. | |
| 4. Generate a temporary certificate as follows: + | |
| [source,oac_no_warn] | |
| ---- | |
| openssl x509 -req -days 60 -in server.csr -signkey server.pem -out server.crt | |
| ---- | |
| This temporary certificate is good for 60 days. | |
| 5. Create the `http-ssl.conf` file under the `/etc/apache2/conf.d` | |
| directory. | |
| 6. In the `http-ssl.conf` file, add one of the following redirects: | |
| * Redirect a web application, for example, `JkMount /hello/* worker1`. | |
| * Redirect all requests, for example, `JkMount /* worker1`. + | |
| [source,oac_no_warn] | |
| ---- | |
| # Send all jsp requests to GlassFish | |
| JkMount /*.jsp worker1 | |
| # Send all glassfish-test requests to GlassFish | |
| JkMount /glassfish-test/* loadbalancer | |
| ---- | |
| [[GSADG00173]][[gjpnc]] | |
| Example 6-8 `http-ssl.conf` File for `mod_jk` Security | |
| A basic SSL-enabled virtual host will appear in the `http-ssl.conf` | |
| file. In this example, all requests are redirected. | |
| [source,oac_no_warn] | |
| ---- | |
| Listen 443 | |
| <VirtualHost _default_:443> | |
| SSLEngine on | |
| SSLCipherSuite ALL:!ADH:!EXP56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL | |
| SSLCertificateFile "/etc/apache2/2.2/server.crt" | |
| SSLCertificateKeyFile "/etc/apache2/2.2/server.pem" | |
| JkMount /* worker1 | |
| </VirtualHost> | |
| ---- | |
| [[gjpan]][[GSADG00374]][[to-enable-ssl-between-the-mod_jk-load-balancer-and-glassfish-server]] | |
| To Enable SSL Between the `mod_jk` Load Balancer and GlassFish Server | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| This procedure does not enable SSL transfer between `mod_jk` and | |
| GlassFish Server. It enables `mod_jk` to forward SSL-encrypted | |
| information from the browser to GlassFish Server. | |
| [[GSADG860]] | |
| Before You Begin | |
| The self-signed certificate must be configured. | |
| 1. Perform the steps in link:#gixqw[To Enable `mod_jk`]. | |
| 2. Start another GlassFish Server with at least one web application | |
| deployed. + | |
| In order for the `mod_jk`-enabled network listener to start listening | |
| for requests, the web container must be started. Normally, this is | |
| achieved by deploying a web application. | |
| 3. Follow instructions from link:http_https.html#ggnbj[To Configure an | |
| HTTP Listener for SSL] on the `mod_jk` connector. + | |
| Use the following format: + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> create-ssl --type http-listener --certname sampleCert new-listener | |
| ---- | |
| 4. Add the following directives in the `httpd.conf` file under the | |
| `/etc/apache2/conf.d` directory: + | |
| [source,oac_no_warn] | |
| ---- | |
| # Should mod_jk send SSL information (default is On) | |
| JkExtractSSL On | |
| # What is the indicator for SSL (default is HTTPS) | |
| JkHTTPSIndicator HTTPS | |
| # What is the indicator for SSL session (default is SSL_SESSION_ID) | |
| JkSESSIONIndicator SSL_SESSION_ID | |
| # What is the indicator for client SSL cipher suit (default is SSL_CIPHER ) | |
| JkCIPHERIndicator SSL_CIPHER | |
| # What is the indicator for the client SSL certificated? (default is SSL_CLIENT_CERT ) | |
| JkCERTSIndicator SSL_CLIENT_CERT | |
| ---- | |
| 5. To apply your changes, restart Apache HTTP Server and GlassFish | |
| Server. | |
| [[CIHJDAJD]][[GSADG861]][[administering-mod_proxy_ajp]] | |
| Administering `mod_proxy_ajp` | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| The Apache Connector `mod_proxy_ajp` can be used to connect the web | |
| container with Apache HTTP Server. By using `mod_proxy_ajp`, you can | |
| front GlassFish Server with Apache HTTP Server. | |
| [[GSADG862]][[sthref21]] | |
| [[to-enable-mod_proxy_ajp]] | |
| To Enable `mod_proxy_ajp` | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| You can front GlassFish Server with Apache HTTP Server and its | |
| `mod_proxy_ajp` connector by enabling the AJP protocol for one of | |
| GlassFish Server's network listeners, as described in this procedure. A | |
| typical use for `mod_proxy_ajp` would be to have Apache HTTP Server | |
| handle requests for static resources, while having requests for dynamic | |
| resources, such as servlets and JavaServer Pages (JSPs), forwarded to, | |
| and handled by the GlassFish Server back-end instance. | |
| 1. Install Apache HTTP Server. + | |
| For information on installing Apache HTTP Server, see | |
| `http://httpd.apache.org/docs/2.2/install.html`. | |
| 2. Configure `apache2/conf/httpd.conf`, the main Apache configuration | |
| file. + | |
| For example: + | |
| [source,oac_no_warn] | |
| ---- | |
| LoadModule proxy_module /usr/lib/httpd/modules/mod_proxy.so | |
| LoadModule proxy_ajp_module /usr/lib/httpd/modules/mod_proxy_ajp.so | |
| Listen 1979 | |
| NameVirtualHost *:1979 | |
| <VirtualHost *:1979> | |
| ServerName localhost | |
| ErrorLog /var/log/apache2/ajp.error.log | |
| CustomLog /var/log/apache2/ajp.log combined | |
| <Proxy *> | |
| AddDefaultCharset Off | |
| Order deny,allow | |
| Allow from all | |
| </Proxy> | |
| ProxyPass / ajp://localhost:8009/ | |
| ProxyPassReverse / ajp://localhost:8009/ | |
| </VirtualHost> | |
| ---- | |
| 3. Start Apache HTTP Server (`httpd`). | |
| 4. Create a jk-enabled network listener by using the | |
| `create-network-listener` subcommand. + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> create-network-listener --protocol http-listener-1 \ | |
| --listenerport 8009 --jkenabled true jk-connector | |
| ---- | |
| 5. If you expect to need more than five threads for the listener, | |
| increase the maximum threads in the `http-thread-pool` pool: + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> set configs.config.server-config.thread-pools.thread-pool.\ | |
| http-thread-pool.max-thread-pool-size=value | |
| ---- | |
| 6. To apply your changes, restart GlassFish Server. + | |
| See link:domains.html#ginqj[To Restart a Domain]. | |
| [[GSADG863]] | |
| See Also | |
| For more information on Apache, see `http://httpd.apache.org/`. | |
| For more information on the Apache `mod_proxy_ajp` Connector, see | |
| `http://httpd.apache.org/docs/2.1/mod/mod_proxy.html` and | |
| `http://httpd.apache.org/docs/2.1/mod/mod_proxy_ajp.html`. | |
| For more information on the AJP protocol, see | |
| `http://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html`. | |
| [[GSADG1049]][[sthref22]] | |
| [[to-load-balance-using-mod_proxy_ajp-and-glassfish-server]] | |
| To Load Balance Using `mod_proxy_ajp` and GlassFish Server | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| Load balancing is the process of dividing the amount of work that a | |
| computer has to do between two or more computers so that more work gets | |
| done in the same amount of time. In the GlassFish Server context, load | |
| balancing is most frequently used to distribute work among the instances | |
| in a GlassFish Server cluster. | |
| To configure load balancing using `mod_proxy_ajp`, you must use the | |
| `mod_proxy_balancer` Apache module in addition to `mod_proxy_ajp`. | |
| In order to support stickiness, the `mod_proxy_balancer` load balancer | |
| relies on a `jvmRoute` system property that is included in any | |
| `JSESSIONID` received by the load balancer. Consequently, every | |
| GlassFish Server instance that is front-ended by the Apache load | |
| balancer must be configured with a unique `jvmRoute` system property. | |
| 1. Install Apache HTTP Server. + | |
| For information on installing Apache HTTP Server, see | |
| `http://httpd.apache.org/docs/2.2/install.html`. | |
| 2. [[BABIFEEC]] + | |
| Configure `apache2/conf/httpd.conf`, the main Apache configuration file. + | |
| For example: + | |
| [source,oac_no_warn] | |
| ---- | |
| LoadModule proxy_module /usr/lib/httpd/modules/mod_proxy.so | |
| LoadModule proxy_ajp_module /usr/lib/httpd/modules/mod_proxy_ajp.so | |
| LoadModule proxy_balancer_module /usr/lib/httpd/modules/mod_proxy_balancer.so | |
| # Forward proxy needs to be turned off | |
| ProxyRequests Off | |
| # Keep the original Host Header | |
| ProxyPreserveHost On | |
| <Proxy *> | |
| Order deny,allow | |
| Deny from all | |
| Allow from localhost | |
| </Proxy> | |
| # Each BalancerMember corresponds to an instance in the GlassFish Server | |
| # cluster. The port specified for each instance must match the ajp port | |
| # specified for that instance. | |
| <Proxy balancer://localhost> | |
| BalancerMember ajp://localhost:8009 | |
| BalancerMember ajp://localhost:8010 | |
| BalancerMember ajp://localhost:8011 | |
| </Proxy> | |
| ---- | |
| 3. Start Apache HTTP Server (`httpd`). | |
| 4. In GlassFish Server, use the `create-network-listener` subcommand to | |
| create a jk-enabled network listener targeted to the cluster. + | |
| For example: + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> create-network-listener --jkenabled true --target cluster1 \ | |
| --protocol http-listener-1 --listenerport ${AJP_PORT} jk-listener | |
| ---- | |
| In this example, `cluster1` is the name of the cluster and `jk-listener` | |
| is the name of the new listener. | |
| 5. If you expect to need more than five threads for the listener, | |
| increase the maximum threads in the `http-thread-pool` pool: + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> set configs.config.cluster1-config.thread-pools.thread-pool.\ | |
| http-thread-pool.max-thread-pool-size=value | |
| ---- | |
| 6. Use the `create-jvm-options` subcommand to create the `jvmRoute` | |
| property targeted to the cluster. + | |
| For example: + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> create-jvm-options --target cluster1 \ | |
| "-DjvmRoute=\${AJP_INSTANCE_NAME}" | |
| ---- | |
| 7. Use the `create-system-properties` subcommand to define the | |
| `AJP_PORT` and `AJP_INSTANCE_NAME` properties for each of the instances | |
| in the cluster, making sure to match the port values you used in | |
| Step link:#BABIFEEC[2] when specifying the load balancer members. + | |
| For example: + | |
| [source,oac_no_warn] | |
| ---- | |
| asadmin> create-system-properties --target instance1 AJP_PORT=8009 | |
| asadmin> create-system-properties --target instance1 \ | |
| AJP_INSTANCE_NAME=instance1 | |
| asadmin> create-system-properties --target instance2 AJP_PORT=8010 | |
| asadmin> create-system-properties --target instance2 \ | |
| AJP_INSTANCE_NAME=instance2 | |
| asadmin> create-system-properties --target instance3 AJP_PORT=8011 | |
| asadmin> create-system-properties --target instance3 \ | |
| AJP_INSTANCE_NAME=instance3 | |
| ---- | |
| In this example, `instance1`, `instance2` and `instance3` are the names | |
| of the GlassFish Server instances in the cluster. | |
| 8. To apply your changes, restart GlassFish Server. + | |
| See link:domains.html#ginqj[To Restart a Domain]. | |