For this purpose we essentially use proxy_pass module of nginx. Its very very simple with nginx, create two different location context and serve them differently. Once using the root mean providing the directory where to find the file, and other use proxy_pass
server {
server_name www.example.com;
location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
root /var/www;
access_log off;
expires 365d;
}
location / {
proxy_pass http://localhost:8181;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Now here come some basic knowledge of nginx
1. In nginx you can set as many locations as possible, what ever is best match will be picked and executed.2. If you want to create something like "www.example.com/static/" and entire URL after /static/ should be served from nginx only, you can do that.
location /static/ {
root /var/www/static/;
access_log off;
expires 30d;
}
3. "access_log off" means, it will not create any log record for such request which match that location.
4. "expires 30d" means, it will set expiry header to 30 days for all such requests which will match that location. Like in apache we use mod_expires for setting expiration time of the static contents, so that browser can cache that contents for a long time. In nginx its just a one line, :)
5. proxy_pass will let you forward the request to any back-end server.
"proxy_pass http://localhost:8080;" will forward your request for dynamic contents possibly to back-end tomcat server.
#How to set expiration time for static contents while using nginx