Появилась необходимость настроить nginx для tomcat. Nginx будет кешировать всю статику и отдавать ее сразу клиенту без обращения к tomcat, тем самым уменьшит нагрузку на tomcat в целом.
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 5;
gzip_proxied any;
gzip_types text/plan text/css application/json application/x-javascript
text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
gzip_buffers 16 8k;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#Путь хранения кэша, уровень вложенности, имя и размер зоны, время не
#использования кэша после которого он удаляется, максимальный размер кэша
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=serg_cache:90m inactive=100m max_size=110m;
Далее настроим, что нам необходимо кешировать и какие передавать заголовки tomcat. Кешируем все картинки, таблицы стилей и js. В своих файлах я добавляю параметр ?v= версию файла, при изменении я увеличиваем цифру или указываю дату (например так 20150223), тем самым говорим бразеру, что бы он перезагрузил файл с сервера, а не брал копию из своего кэша. В коментарии есть пояснения для основных значений конфигурации.
location / {
if ($request_uri ~* ".(jpg|jpeg|gif|css|png|ico|js)(\?v=[0-9.]+)?$") {
#говорим браузеру, что кешированные файлы нужно хранить 3 дня
expires 3d;
access_log off;
break;
}
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_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
add_header X-Cache-Status $upstream_cache_status;
#адресс tomcat
proxy_pass http://localhost:8080;
index index.jsp
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
proxy_cache serg_cache;
proxy_cache_min_uses 1;
proxy_cache_valid 200 302 120m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
set $no_cache "";
#не кешировать если у пользователя есть кука начинающаяся на JSESSION
if ($http_cookie ~* "JSESSION*"){
set $no_cache 1;
}
#если в uri есть management или client
if ($request_uri ~* "(/management*|/client*)") {
set $no_cache 1;
}
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;
}
Теперь необходимо настроить сам tomcat. Для этого достаточно в файле server.xml прописать.
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
address="127.0.0.1"
URIEncoding="UTF-8"
redirectPort="8443" />