Назад | Перейти на главную страницу

Ошибка установки NGINX proxy_pass при добавлении местоположения для устаревших типов файлов

При добавлении следующего в мой блок сервера конфигурации Nginx расположение / blog / начинает 404 со всеми указанными типами файлов. Как правильно использовать директиву expires и продолжить работу proxy_pass в полном объеме? Есть ли способ настроить регулярное выражение, чтобы отображать все эти типы файлов, кроме каталогов / blog / *?

location ~*  \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
    expires 7d;
}

Ниже приведены ссылки на другие местоположения в серверном блоке. Если вытащу истекающий 7d; все работает нормально.

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

location /blog/ {
    proxy_pass https://blog.domain.com/;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}

error_page 404 /index.php;

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}
# browser caching of static assets
location ~*  \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
    expires 7d;
}

Например:

map $uri $expires {
    default off;
    ~\.(jpg|jpeg|png|gif|ico|css|js|pdf)$ 7d;
}

server {
    ...
    location / {
        expires $expires;
        try_files $uri $uri/ /index.php?$query_string;
    }
    ...
}

При таком подходе вы можете указать время истечения срока действия dirrerent для разных типов файлов:

map $uri $expires {
    default off;
    ~\.(jpg|jpeg|png|gif|ico)$ 30d;
    ~\.(css|js|pdf)$ 7d;
}

Другой способ - установить срок действия по типу содержимого тела запроса, например из официальная документация:

map $sent_http_content_type $expires {
    default         off;
    application/pdf 42d;
    ~image/         max;
}

server {
    ...
    expires $expires;
    ...
}