Управление кэша для постоянного 301 перенаправления nginx

Используя perfmon, категории MSSQL:Latches и MSSQL:Locks имеют счетчики, которые, кажется, так близки, как мы можем добраться.

Это ясно теперь, когда дб не имеет "способности к параллелизму", который может измеряться. (Не тот же способ, которым сервер имеет емкость хранения, которая может измеряться).

Приложения, которые хорошо работали вчера, могут начать блокироваться внезапно. Из-за повышения уровня блокировок, новые планы запросов и т.д...

3
задан 30 May 2012 в 19:25
2 ответа

Have you tried Cache-Control flags in your nginx configuration ?

Sample configuration:

upstream yourappserver{
  server 0.0.0.0:6677;
}


proxy_cache_path  /tmp/cache levels=1:2 keys_zone=my-test-cache:8m max_size=5000m inactive=300m;

server {
    listen 80;
    server_name your.domain.tld;
    root /path/to/the/document/root/;

    access_log  /var/log/nginx/access.log;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_cache my-test-cache;
      proxy_cache_valid  200 404  1m;
      proxy_cache_valid 302 20m;

      proxy_cache_use_stale   error timeout invalid_header updating;
      proxy_redirect off;

      if (-f $request_filename/index.html) {
        rewrite (.*) $1/index.html break;
      }
      if (-f $request_filename.html) {
        rewrite (.*) $1.html break;
      }
      if (!-f $request_filename) {
        proxy_pass http://yourappserver;
        break;
      }
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
      root html;
    }
}

I think you are looking for this particular configuration snippet

proxy_cache_valid 302 20m;
2
ответ дан 3 December 2019 в 07:08

Я тоже использую «трюк с переменной среды», чтобы сделать это в Apache, и искал аналогичный метод в nginx. Прошло несколько лет с тех пор, как этот вопрос был впервые задан, поэтому с тех пор все могло измениться, но я нашел способ установить время жизни по умолчанию для перенаправлений в nginx 1.14.

В блоке server вы можете эффективно установить новые значения по умолчанию Cache-Control и Expires для всех 301 перенаправлений, используя переменную карты для установки значение директивы expires основано на коде состояния возврата ($status). При желании это новое значение по умолчанию можно переопределить в более конкретных блоках location. В качестве дополнительного бонуса вам не нужно повторно указывать переменную среды при каждом перенаправлении, как в Apache.

Вот иллюстрирующий это пример, когда все HTTP-запросы обновляются до HTTPS с использованием «постоянных» переадресаций 301, которые длятся всего час. Исключение сделано для URI с префиксом /override, где 301 действительно остается постоянным.

map $status $expires {
        default off;
        301     1h;
}

server {
        listen 80 default_server;
        server_name _;
        expires $expires;
        location /override {
                return 301 https://$host/somewhere;
                expires off;
        }
        location / {
                return 301 https://$host$request_uri;
        }
}

Это дает ожидаемые значения заголовка:

$ curl -I http://localhost
HTTP/1.1 301 Moved Permanently
Server: nginx/1.14.0 (Ubuntu)
Date: Thu, 11 Jun 2020 01:01:43 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
Location: https://localhost/
Expires: Thu, 11 Jun 2020 02:01:43 GMT
Cache-Control: max-age=3600

$ curl -I http://localhost/override
HTTP/1.1 301 Moved Permanently
Server: nginx/1.14.0 (Ubuntu)
Date: Thu, 11 Jun 2020 01:01:49 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
Location: https://localhost/somewhere
2
ответ дан 11 June 2020 в 01:12

Теги

Похожие вопросы