Newbie: Proxy to Glassfish

Hello,
I’m migrating an app from Apache/JBoss to nginx/Glassfish. I think I’m
starting to grasp the server-location design but am getting errors when
I try to proxy a request to Glassfish. Here’s a clip from my config:

server {
server_name www.foobar.com foobar.com;
root html/prod;
index index.html;
location /dc {
proxy_pass $scheme://localhost:8080$request_uri;
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;
}
}

The gist of it is I want all dynamic content (dc) to go to glassfish,
i.e. foobar.com/dc/somepath/page.jsp
Everything else (presumably the static content) is served from
html/prod. (That part works)
I want the path to determine what happens, not the file extensions
(because I have some .js that is static and other that is generated by
the server).

I have a “hello world” app running on glassfish that works when accessed
directly from localhost:8080/webtest/home,
but when I try foobar.com/dc/webtest/home I get a 502 Bad Gateway error
in the browser. The nginx error log reports this:

2011/04/08 14:13:30 [notice] 3884#3940: signal process started
2011/04/08 14:13:35 [error] 828#3472: *6 no resolver defined to resolve
localhost, client: 127.0.0.1, server: www.foobar.com, request: “GET
/dc/webtest/home HTTP/1.1”, host: “foobar.com

Any ideas what might be wrong with my configuration?
Thanks!
Greg

Posted at Nginx Forum:

Hello!

On Fri, Apr 08, 2011 at 03:25:53PM -0400, GZ1 wrote:

  proxy_pass              $scheme://localhost:8080$request_uri;
  •   proxy_pass              $scheme://localhost:8080$request_uri;
    
  •   proxy_pass              http://localhost:8080;
    

I want the path to determine what happens, not the file extensions
localhost, client: 127.0.0.1, server: www.foobar.com, request: “GET
/dc/webtest/home HTTP/1.1”, host: “foobar.com

Any ideas what might be wrong with my configuration?

Don’t use variables in proxy_pass directive unless you really know
why you need them and what it implies.

Maxim D.

Don’t use variables in proxy_pass directive unless you really know
why you need them and what it implies.

Ok, I changed that line to this:

  proxy_pass              localhost:8080;

Still getting the same error unfortunately.

Posted at Nginx Forum:

On Sat, Apr 9, 2011 at 4:55 AM, GZ1 [email protected] wrote:

One question, though… this didn’t work:

proxy_pass localhost:8080;

This did:

proxy_pass http://localhost:8080;

Because the http:// is required.

What if I want to proxy my ssl too?

I believe it is not recommended to proxy to ssl backend (if possible at
all).

Making progress! The /dc location wasn’t working because it wasn’t just
rewriting the url, just proxying, so on my Glassfish server it was
looking for /dc/…, which wasn’t there.

So for now I’ll just use location / and figure out another way to
differentiate the dynamic and static content by location.
At least now I can reach Glassfish from nginx, which is pretty cool.

Thanks for the lead!

One question, though… this didn’t work:

proxy_pass localhost:8080;

This did:

proxy_pass http://localhost:8080;

What if I want to proxy my ssl too?

Posted at Nginx Forum:

On Sat, 2011-04-09 at 16:00 +0700, Edho P Arief wrote:

What if I want to proxy my ssl too?

I believe it is not recommended to proxy to ssl backend (if possible at all).

You cannot “proxy SSL”, but you can setup a separate SSL connection to
the backend.

Cliff