nginx, не устанавливающий, истекает заголовки на направляющих статические активы

Если быть более точным, предположим, что у вас есть такая функция:

T(n) = T(n-1) + T(n-1) + T(n-1), T(0) = 1

Способ, которым это написано. Сложность по времени в точности равна O (3 ^ n).

Ваша функция немного лучше, чем эта функция, но все же сложность по времени та же O (3 ^ n)

Теперь, если мы переписаем мой предложенный код, например: [115 ]

T(n) = 3 * T(n-1), T(0) = 1

Сложность просто O (n)! потому что результаты предыдущих вызовов повторно используются без повторного вызова.

Таким образом, в вашей реализации, если вы можете иметь буфер, чтобы не вызывать, а просто использовать ранее вызванные значения (некоторые языки действительно могут это поддерживать), тогда сложность снизится до O (n).

7
задан BartoszKP 23 January 2014 в 20:10
поделиться

3 ответа

Итак, я нашел решение. Мое регулярное выражение было немного неправильным, так как я не принимал во внимание возможность того, что метка времени? Не существует.

Это регулярное выражение сработало для меня.

location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {
5
ответ дан 6 December 2019 в 14:09
поделиться

Возможно, это поможет:

location ~* ^.*\.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {

Также прочтите , как Nginx оценивает местоположение . Вы уверены, что у вас нет другой строки location в вашем файле конфигурации, которая соответствует вашим статическим ресурсам до того, как это будет у вашего regexp location ?

Кстати, подумайте об использовании try_files вместо if (-f $ document_root / ...) .

0
ответ дан 6 December 2019 в 14:09
поделиться

Просто хотел отметить, что делать метку времени необязательной — плохая идея. Если она не включена, то установка expires max неверна, так как не будет возможности обновить файл.

Кроме того, директива location в Nginx не может видеть строку запроса, поэтому опубликованное здесь решение никогда не соответствует «необязательной» метке времени.

Правильное решение (т. е. такое, при котором максимальный срок действия истекает только тогда, когда файл был запрошен с временной меткой):

location ~* \.(js|css|png|jpg)$ {
  if ($query_string ~ "^[0-9]+$") {
    expires max;
    break;
  }
}

Если временная метка не указана, вы полагаетесь на Last-Modified и ETag, которые автоматически обрабатываются Nginx.

10
ответ дан 6 December 2019 в 14:09
поделиться
Другие вопросы по тегам:

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