nginx истекает заголовок и обратный прокси не работает
Я пытаюсь настроить заголовок Expires для статических файлов на nginx (0.7.67). Статические файлы подаются с обратного прокси Golang:
location /rev/ {
proxy_pass http://localhost:8910/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
# I am putting this here, because nginx only uses one location. Is this OK?
location ~* .(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ {
expires 30d;
}
}
Когда я делаю это таким образом, нет ошибки перезапуска nginx, но статические файлы больше не обслуживаются.
Я уже пробовал следующее созвездие, но оно не работает:
server {
...
location /rev/ {
proxy_pass http://localhost:8910/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
location ~* .(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ {
expires 30d;
}
}
Вопрос : Как я могу применить заголовок expires для статических файлов, которые находятся в приложении за реверсом доверенность?
3 ответа:
Единственный способ, которым мне удалось это сделать, был такой:
location / { proxy_pass http://tomcat; } # CACHING WITH NO LOGGING location ~* ^.+\.(atom|bmp|bz2|doc|docx|eot|exe|gif|gz|ico|jpeg|jpg|mid|midi|mp4|ogg|ogv|otf|pdf|png|ppt|pptx|rar|rss|rtf|svg|svgz|swf|tar|tgz|ttf|txt|wav|woff|xls|zip)$ { access_log off; log_not_found off; expires max; proxy_pass http://tomcat; } # CACHING WITH 404 LOGGING location ~* ^.+\.(css|js|xml)$ { access_log off; log_not_found on; expires max; proxy_pass http://tomcat; }Надеюсь, это поможет!
Из чтения документов в http://wiki.nginx.org/HttpProxyModule я нахожу упоминания об использовании директив
proxy_cache_*для достижения аналогичной функциональности, хотя и не совсем то, что вы ищете. Документы утверждают, что:Upstream cache-related directives have priority over proxy_cache_valid value, in particular the order is: X-Accel-Expires Expires/Cache-Control proxy_cache_validТаким образом, кажется, что установка заголовка
Expiresна уровне прокси не поддерживается или не рекомендуется.У меня такое чувство, что вы должны установить Заголовок
Expiresвверх по потоку. Это можно сделать в Go (немного по-хамски, я уверен, что есть более приятный способ чтобы исправить часовой пояс в строке), установив заголовок на http.ResponseWriter в функции обработчика http:w.Header().Set("Expires", strings.Replace(time.Now().AddDate(0, 0, 30).Format(time.RFC1123), "UTC", "GMT", 1))Как было указано ранее, это заменяет
UTCнаGMTв выходной строке. Я не уверен, что это необходимо, но я заметил, что это, кажется, обычная форма в любых HTTP-заголовках, которые я проверил. Я не смотрел спецификацию, чтобы увидеть, будут лиUTCодинаково приняты браузерами, но я не вижу, почему бы и нет.Жаль, что это не совсем ответ Nginx, надеюсь это помогает!
Я думаю, что Директива
expiresилиadd_header- это то, что вы возвращаете в браузер.Если вы слепо хотите кэшировать то, что приходит из бэкенда, вы можете попробовать:
proxy_cache_valid any 1m;Http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_valid