У меня есть скрипт php, который возвращает изображение jpeg (1x1 пиксель) с типом содержимого «image / jpeg»:
// return image
$image_name = 'img/pixel.jpg';
$image = fopen($image_name, 'rb');
header('Content-Length: ' . filesize($image_name));
header('Content-Type: image/jpeg');
fpassthru($image);
Этот скрипт работает на nginx / 1.2.1 с модулем php5-fpm. Проблема в том, что все ответы на запросы, соответствующие "расположение ~ \ .php $"иметь заголовок Content-Type"текст / html; charset = UTF-8", игнорируя мою функцию php заголовок ('Content-Type: image / jpeg'). В результате я получаю картинку jpeg с типом содержимого «text / html».
Вот упрощенная конфигурация моего виртуального хоста:
server {
listen 80;
server_name localhost default_server;
set $main_host "localhost";
root /var/www/$main_host/www;
location / {
root /var/www/$main_host/www/frontend/web;
try_files $uri /frontend/web/index.php?$args;
location ~* ^/(.+\.(css|js|jpg|jpeg|png|gif|bmp|ico|mov|swf|pdf|zip|rar))$ {
try_files $uri /frontend/web/$1?$args;
}
}
location /admin {
alias /var/www/$main_host/www/backend/web;
try_files $uri /backend/web/index.php?$args;
location ~* ^/admin/(.+\.php)$ {
try_files $uri /backend/web/$1?$args;
}
location ~* ^/admin/(.+\.(css|js|jpg|jpeg|png|gif|bmp|ico|mov|swf|pdf|zip|rar))$ {
try_files $uri /backend/web/$1?$args;
}
}
location ~ \.php$ {
try_files $uri /frontend/web$uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Вы уверены, что это nginx, а не PHP, который добавляет Content-type: text/html
? Это не похоже на вашу вставленную конфигурацию. Возможно, у вас есть другой PHP-код, который устанавливает его первым. Попробуйте изменить вызов заголовка PHP, чтобы он выглядел так:
header('Content-Type: image/jpeg', true);
Второй аргумент отменяет любые другие предыдущие вызовы для этого конкретного заголовка.
Вы также можете посмотреть на $upstream_http_content_type
, который является переменной nginx, содержащей Content-type
заголовок, созданный PHP. Если вам нужен уродливый хакер, вы можете использовать его с if
в вашей конфигурации nginx.