
У меня проблемы с expires
полем заголовка. Следующие правила nginx выдают мне этот заголовок (без заголовка expire). Идеи, почему заголовки expires не передаются?
Заголовок для: /css/v1/afile.css
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 14 Sep 2013 07:29:59 GMT
Content-Type: text/css
Content-Length: 12548
Last-Modified: Sat, 11 May 2013 11:05:51 GMT
Connection: keep-alive
Accept-Ranges: bytes
Конфигурация Nginx:
server {
listen 80 default_server;
server_name _;
root /var/www/apps/myapp/public/app/webroot;
index index.php index.html index.htm;
server_tokens off;
access_log /var/www/apps/myapp/logs/access.log;
error_log /var/www/apps/myapp/logs/error.log;
client_max_body_size 20M;
rewrite_log on;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ /(js|css)/v[0-9]+/(.*) {
access_log off;
expires 7d;
add_header Cache-Control public;
try_files $uri $uri/ /$1/$2;
}
# Pass the PHP scripts to FastCGI server
location ~ \.php$ {
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_intercept_errors on; # to support 404s for PHP files not found
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
решение1
Следующий код должен отобразить заголовок expires, который был установлен в том же блоке location...
try_files $uri $uri/ /$1/$2 =404;
Согласно вики Nginx,try_filesдолжен заканчиваться URI или кодом статуса. Вы можете получить больше информации о том, почему не установлены истечения, если включитеотладка в Nginx.
Обновлять:
Идеи, почему заголовки expires не передаются?
Я включил отладку, чтобы разобраться в этой интересной ситуации. Вот что я обнаружил...
Вот прямая цитата из статьи вики try_files, ссылка на которую приведена ранее...
Если ни один из файлов не найден, выполняется внутреннее перенаправление на URI, указанный в последнем параметре.
Итак, когда вы использовали следующий код...
try_files $uri $uri/ /$1/$2;
nginx не смог найти $uri
и $uri/
(в вашем случае /css/v1/afile.css и /css/v1/afile.css/) делается внутренний редирект на URI, указанный в последнем параметре. Итак, после внутреннего редиректа местоположение /$1/$2
находится (в вашем случае /css/afile.css),в другом блоке локации. Поскольку он выполняется другим блоком местоположения, у которого нет сроков действия, вы не увидели сроков действия.