Мне нужно, чтобы прокси nginx использовал кеш, если внутренний сервер не работает:
это моя конфигурация. но похоже, что nginx использует кеш без проверки внутреннего сервера.
http {
# ...
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_cache_path /tmp/nginx levels=1:2 keys_zone=tmpzone:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
server {
server_name _;
location / {
proxy_connect_timeout 5s;
proxy_read_timeout 5s;
proxy_cache tmpzone;
proxy_cache_valid 200 304 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host 'www.example.com';
proxy_pass http://www.example.com;
}
}
}
Вопрос в том, как я могу обойти кеш прокси, если внутренний сервер работает? это моя конфигурация. но, похоже, nginx использует кеш без проверки внутреннего сервера. http {# ... proxy_set_header Host $ host; ...
Мне нужно, чтобы прокси nginx использовал кеш, если внутренний сервер не работает:
это моя конфигурация. но похоже, что nginx использует кеш без проверки внутреннего сервера.
http {
# ...
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_cache_path /tmp/nginx levels=1:2 keys_zone=tmpzone:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
server {
server_name _;
location / {
proxy_connect_timeout 5s;
proxy_read_timeout 5s;
proxy_cache tmpzone;
proxy_cache_valid 200 304 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host 'www.example.com';
proxy_pass http://www.example.com;
}
}
}
Вопрос в том, как я могу обойти кеш прокси, если внутренний сервер работает? это моя конфигурация. но, похоже, nginx использует кеш без проверки внутреннего сервера. http {# ... proxy_set_header Host $ host; ...
Мне нужно, чтобы прокси nginx использовал кеш, если внутренний сервер не работает:
это моя конфигурация. но похоже, что nginx использует кеш без проверки внутреннего сервера.
http {
# ...
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_cache_path /tmp/nginx levels=1:2 keys_zone=tmpzone:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
server {
server_name _;
location / {
proxy_connect_timeout 5s;
proxy_read_timeout 5s;
proxy_cache tmpzone;
proxy_cache_valid 200 304 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host 'www.example.com';
proxy_pass http://www.example.com;
}
}
}
Вопрос в том, как я могу обойти кеш прокси, если внутренний сервер работает? А когда бэкэнд-сервер работает, мой прокси-сервер вообще не использует кеш.
Использовать proxy_intercept_errors и прокси 500 для сервера, на котором включено кэширование.
Похоже на дубликат:
Короче говоря, используйте proxy_cache_use_stale
В качестве обновления, я протестировал это, и оно работает нормально. Я сделал тест на своей рабочей станции, где у меня есть (для полноты):
Fedora 23 nginx 1.8.1 сконфигурирован как ssl терминатор + кэш + обратный прокси Apache 2.4.18 настроен на прослушивание на порту 80
С apache, работающим как upstream, обслуживающим только статический файл я сделал этот тест:
Конфигурация nginx, которую я использовал:
nginx.conf :
http {
[...]
location
proxy_cache_path /var/lib/nginx/tmp/proxy/ levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/local.conf :
upstream localhost {
server 127.0.0.1:80;
[...]
}
server {
listen 127.0.0.1:443 ssl;
[...]
location /be/ {
proxy_pass http://localhost;
proxy_cache STATIC;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error;
}