我只想向受權用戶提供受保護的圖像。所以我在控制器內使用BinaryFileResponse
,它工作正常。不過,我想使用Nginx的XSendfile(X-Accel-Redirect)。我已經完成了與Nginx的documantation中所解釋的相同的步驟。Symfony - 如何使用nginx的X-Accel-Redirect從控制器提供圖像
此外我還將BinaryFileResponse::trustXSendfileTypeHeader();
添加到控制器。但是現在我一直在收到404響應。
這裏是我的CONFIGS和代碼:
Nginx的:
server {
listen 80;
listen 443 ssl http2;
server_name symfony.app;
root "/home/vagrant/Sites/Symfony/web";
index index.html index.htm index.php app.php app_dev.php;
charset utf-8;
location/{
try_files $uri $uri/ /app.php?$query_string;
}
location /images/ {
internal;
alias /home/vagrant/Sites/Symfony/app/media/images/listings/4/;
}
client_max_body_size 100m;
# DEV
location ~ ^/(app_dev|app_test|config)\.php(/|$) {
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_split_path_info ^(.+\.php)(/.*)$; # allows trailing slash after app_dev.php/
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
# PROD
location ~ ^/app\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
internal;
}
location ~ /\.ht {
deny all;
}
ssl_certificate /etc/nginx/ssl/symfony.app.crt;
ssl_certificate_key /etc/nginx/ssl/symfony.app.key;
}
Symfony的控制器:
public function getPictureAction($id)
{
$filePath = 'media/images/listings/4/';
$path = $this->get('kernel')->getRootDir() . '/' . $filePath . $id;
BinaryFileResponse::trustXSendfileTypeHeader();
$response = new BinaryFileResponse($path);
$response->headers->set('Content-Type', 'image/jpg');
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE);
return $response;
}
所以,要http://symfony.app/images/1 .jpg應該會返回一張圖片,但會得到一張404圖片。
添加到OP您使用過'getPictureAction' –
@MaxP拿到照片的URL。你好。我不明白OP的意思嗎? – rvaliev
OP =原文,問題 –