RewriteRule с флагом [L] остановка кэширования?

Я использую программное обеспечение для управления сервером plesk с apache и nginx. Я установил в apache и nginx заголовок с истекшим сроком действия для файлов javascript на один год. Это работает. Я вижу один год для "expires" в заголовке.

Теперь я хочу получить доступ к файлам javascript и php с перезаписью (без перенаправления).

APACHE

ExpiresActive On
ExpiresByType text/javascript A31556952

RewriteEngine On
RewriteRule fake/(.+\.(?:js|php))$ original/$1 [L]

NGINX

location ~* ^/(.*\.js)$ {
    try_files $uri @fallback;

    expires 1y;
    add_header Cache-Control "public";
}

Это RewriteRule работает. Я могу получить доступ к этим файлам, но заголовок «expires» в «fake/file.js» исчез. Что я делаю не так?

example.com/original/file.js = истекает через год

example.com/fake/file.js = нет заголовка для expires

SOLUTION Все статические файлы обычно обрабатываются NGINX, а не apache. Поэтому установите в apache эту строку для javascript, дайте ему кэш.

Набор заголовков Cache-Control "max-age=31556952, public"

Флаг [L] в RewriteRule должен остановить обработку статических файлов nginx, а ExpiresByType игнорируется.

1
задан 28 June 2021 в 13:22
1 ответ

почему статические файлы вообще не обрабатываются nginx?

Потому что /fake/file.js больше не является «статическим файлом» (это не существует), поэтому передается в Apache, где он внутренне переписывается, чтобы получить требуемый ответ.

 ExpiresByType text / javascript A31556952 
 

text / javascript может быть неправильным mime-типом для ответов JavaScript на вашем сервере . Вам необходимо подтвердить, какой тип mime (например, заголовок Content-Type ) ваш сервер отправляет обратно с этими ответами, но в наши дни обычно это application / javascript .Другими словами:

ExpiresByType application/javascript A31556952

Чтобы уточнить, mod_expires ExpiresByType устанавливает заголовки HTTP-ответа Expires и Cache-Control: max-age . Cache-Control: max-age имеет приоритет во всех современных браузерах. Expires действительно только для поддержки устаревших версий.

Флаг [L] в RewriteRule должен останавливать обработку статических файлов с помощью nginx

Флаг L просто останавливает текущий проход механизма перезаписи на Apache. Сами по себе эти директивы не влияют на Nginx (который, похоже, действует как интерфейсный прокси).

1
ответ дан 28 July 2021 в 13:08

Теги

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