Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

In order to pass traffic to JBoss/TomCat on port 80 using Apache we used to install and configure mod_jk.

Is there an equivalent for nginx? Basically want all port 80 traffic to be passed to jboss.

share|improve this question

migrated from stackoverflow.com Jul 23 '11 at 14:01

This question came from our site for professional and enthusiast programmers.

add comment

5 Answers

You don't have to use mod_jk, you can use mod_proxy, i.e. pass the traffic through over HTTP instead of AJP. If nginx has proxy ability, that should work just as well.

share|improve this answer
5  
The problem with a proxy is that it is slower than mod_jk/fastcgi/ajp –  Adam Gent Sep 28 '10 at 20:27
add comment

For nginx checkout their docs here. Proxy support is built in.

In the example below from their site, you will see that specific port 80 traffic is being sent to a single servlet container running on port 8080.

Note that if you want to run multiple backend servlet containers ( for load balancing, scaling, etc... ) you should look at the Upstream Fair Module that will send traffic to the least-busy backend server. It is not shipped by defaul w/nginx.

server {
  listen          80;
  server_name     YOUR_DOMAIN;
  root            /PATH/TO/YOUR/WEB/APPLICATION;
  location / {
    index index.jsp;
  }
  location ~ \.do$ {
    proxy_pass              http://localhost:8080;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
  }                                                                                                       
  location ~ \.jsp$ {
    proxy_pass              http://localhost:8080;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
  }
  location ^~/servlets/* {
    proxy_pass              http://localhost:8080;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
  }
}
share|improve this answer
1  
There's a typo, before index.jsp you must add the index directive: index index.jsp; or it will fail. –  Marc Climent Dec 20 '10 at 11:52
add comment

Another way to do it like it's described in LikeApache wiki page.

server {
    listen myhost:80;
    server_name  myhost;
    location / {
        root /path/to/myapp/public;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_pass http://myapp:8080;
    }
}

I have as well tested it as well with /myapp instead of root and works as well, putting location /myapp and proxypass http://myapp:8080/myapp;

As well, this configuration maps everything to the Java application, which is useful when you have nice URLs that are mapped by an MVC framework like Struts.

share|improve this answer
add comment

You can check my blog post on configuring Nginx as reverse proxy for Tomcat.

It may be interesting to you, as example includes few additional tweaks as caching content only for not logged in users and redirecting for different languages.

share|improve this answer
add comment

There is now a pretty fresh ajp_module for nginex. I dont have experience with it, but I think the session stickyness and especially the persistent backend connections are quite helpfull for Tomcat. Both methods (http proxy or ajp proxy) are sadly inflexible for longrunning queries (comet) or large file transfers (uploads).

https://github.com/yaoweibin/nginx_ajp_module#readme

lighthttp BTW has a general proxy module which can handle FCGI,HTTP,CGIS and AJP13 encoding. This looks like a better approach (but I think from reading it has the same limitations with regards to untypical long/large request/response patterns).

http://redmine.lighttpd.net/wiki/1/Docs:ModProxyCore

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.