Hi pals,
I have my applications running on tomcat and to improve performance I
have
put nginx infront.Nginx proxy pass successfully pass all request to
tomcat
server.
There are some html static files and images in my application which I
don't
to be served by tomcat. again, I am trying to as much as performance
boost
for my app.
I am tried to do some research but unable to get solutions.
please see my current config ans suggest!
server {
index index.html index.htm;
listen 192.168.0.16:80;
server_name localhost;
location / {
root /var/www/nginx-default;
index index.html index.htm index.jsp;
}
location /abc/ {
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;
}
thanks in advance!
Irfan Khan
on 2012-12-07 12:09
on 2012-12-07 14:43
I'm still relatively new to nginx but find it to be great. My high-level recommendation would be twofold: 1) Make sure you define a "proxy_cache" (check the nginx website for details on these directives). In there you can define further how to cache anything that's even a bit "static" from tomcat. And if you're overriding specific paths or regex'es from tomcat (like if you know there are static images or something being served from your webapp that you can't easily move out to the flat filesystem), you'll want to add proxy_ignore_headers to override what tomcat is telling the browser, add the proxy_cache_valid, the Cache-Control header (see #2), and maybe "expires". 2) For images and other truly static content, add_header Cache-Control with some reasonable values. This will tell any downstream proxies and the actual client PC's to cache those images locally, so they won't be continuously fetched from your server. There is no "one size fits all", but the power contained in nginx is really great. You just have to take some time to try the settings and use something like fiddler on the desktop to see the differences when you make changes. (Be sure to clear your local browser's cache between tests!) Good Luck!
on 2012-12-07 17:02
On Fri, Dec 07, 2012 at 04:38:20PM +0530, Irfan Khan wrote: > There are some html static files and images in my application which I don't > to be served by tomcat. again, I am trying to as much as performance boost > for my app. > > I am tried to do some research but unable to get solutions. nginx chooses how to handle a request based on the location{} blocks you have defined. Currently, you have: if it starts with /abc/, proxy to tomcat; otherwise, serve from the filesystem. So: which urls do you really want proxied to tomcat, and which do you really want served from the filesystem? If I guess that "url starts with /abc/ and ends in html" means "serve from filesystem, not tomcat", then you could add one line: > location /abc/ { location ~ html$ {} > 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; > > } and a request for /abc/a.html will look for the file /usr/local/nginx/html/abc/a.html (or strictly: abc/a.html below whatever you have configured "root" to be). Best would be to make the non-tomcat things be in a different url prefix to the tomcat things -- such as /abc/static, for example -- because then you could just use prefix locations. That depends on how your application is written, which may not be changeable. f -- Francis Daly francis@daoine.org
on 2012-12-10 17:26
Hi, Thanks for the suggestion, but unfortunately it didn't worked. I have tried to create new location to be served by nginx but all requests goes to tomcat by next location directive. Any html within /foo/ directory doesn't work at all. I am a newbie to Nginx and really loves it. I hope some regex combination would help to solve the problem. Please suggestion! My config as follows; Location /foo/* Root /tomcat/webapps/abc/ Index.html > location /abc/ { 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; } Irfan Khan Lead - IT eNovate Media Solutions Pvt Ltd #204, 2nd Floor, Cunningham Classic 22, Cunningham Road Bangalore - 560052 Voice - + 91 80 41657660 | Mob - +91 903 589 38 14 www.enovatemedia.com
on 2012-12-10 20:49
On Mon, Dec 10, 2012 at 09:55:01PM +0530, Irfan Khan wrote:
Hi there,
> Thanks for the suggestion, but unfortunately it didn't worked.
What one url did you try that you wanted to be served from the
filesystem,
but was instead served by tomcat? (And why do you think that it was
served by tomcat?)
What config file do you use that shows the problem?
f
--
Francis Daly francis@daoine.org
on 2012-12-11 09:49
Hi, My config is same as earlier. I had tried to access /foo/learning.html from Nginx. But if I keep tomcat server off then I am unable to load this page. If I keep tomcat server up and try for some files (blah.html)which is not exists then tomcat reports an error on page. I have also tried giving full access to webapps directive just for testing purpose. Nothing worked! Kindly suggest, my config is as follows; Location /foo/* Root /tomcat/webapps/abc/ Index.html > location /abc/ { 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; } Thanks and Regards, Irfan Khan
on 2012-12-11 13:27
On Tue, Dec 11, 2012 at 02:18:27PM +0530, Irfan Khan wrote: Hi there, > My config is same as earlier. I had tried to access /foo/learning.html from > Nginx. But if I keep tomcat server off then I am unable to load this page. If you use the config you posted in the first mail, /foo/learning.html should give you the file /var/www/nginx-default/foo/learning.html, and should not involve tomcat at all (so shouldn't change whether tomcat is on or off). Does it give you that file? If not, what does it give you instead? Probably best is to copy-paste the output of curl -i http://192.168.0.16/foo/learning.html if it is not what you want it to be. The later mails, including this one, don't appear to include any other valid nginx config. > If I keep tomcat server up and try for some files (blah.html)which is not > exists then tomcat reports an error on page. curl -i http://192.168.0.16/blah.html should show you the file /var/www/nginx-default/blah.html, or an nginx http 404 message. curl -i http://192.168.0.16/abc/blah.html should show you whatever tomcat produces, if you use your original configuration; or should show you the content of (probably) /usr/local/nginx/html/abc/blah.html, if you add the change suggested. > I have also tried giving full access to webapps directive just for testing > purpose. Nothing worked! I want to use the nginx config that you provide, to reproduce the error that you report. So far, I can't. f -- Francis Daly francis@daoine.org
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.