Можно ли иметь кеш Nginx все 301
перенаправить запросы на proxy_pass
?
Например:
Запрос №1: Клиент A запрашивает / some / path -> отправлено proxy_pass
-> приводит к перенаправлению 301 на /some/other/path
-> nginx кэширует этот ответ, поскольку это перенаправление 301.
Запрос №2: Клиент B запрашивает / some / path -> nginx возвращает кэшированное перенаправление 301 на /some/other/path
.
nginx уже может кэшировать 301 редирект. Вы можете изменить время их кеширования с помощью proxy_cache_valid директива:
proxy_cache_valid 301 365d; # Cache permanent redirects for a whole year
Я обнаружил, что ответ @Michael доставил мне большую часть пути, но когда я включил proxy_cache
, он автоматически кэширует файлы с Expires
и Cache-Control
. Итак, я пришел к этому решению.
proxy_cache_path /tmp/nginx levels=1:2 keys_zone=main-cache:8m max_size=1000m inactive=600m;
proxy_temp_path /tmp/nginx/tmp;
proxy_cache main-cache;
proxy_cache_valid 301 60m;
proxy_cache_key "$scheme://$host$request_uri";
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
Если вы хотите перенаправить все, вы можете использовать этот способ:
location / {
proxy_pass http://127.0.0.1:8080/VirtualHostBase/https/$server_name:443/some/path/VirtualHostRoot;
}
В ваших примерах может потребоваться комбинация rewrite
и proxy_pass
:
location / {
rewrite ^(.*)$ /VirtualHostBase/https/$server_name:443/some/path/VirtualHostRoot$1 break;
proxy_pass http://127.0.0.1:8080;
}
Предупреждение: у вас другой переписать redirect
эффект: break
вместо этого возвращает 301 permanent
возвращает 302.
РЕДАКТИРОВАТЬ Вверх по потоку этот модуль / модули, которые вам нужно использовать proxy_cache_valid
директивный:
proxy_cache_valid 301 1h;
Предупреждение, директивы, связанные с кешем восходящего потока, имеют приоритет над значением proxy_cache_valid, в частности, порядок следующий:
Ссылка: HttpProxyModule, Обратный прокси Nginx + перезапись URL