【发布时间】:2017-03-05 23:14:59
【问题描述】:
我只想将受保护的图像提供给授权用户。因此,我在控制器中使用BinaryFileResponse,它工作正常。但是,我想使用 Nginx 的 XSendfile (X-Accel-Redirect)。我已经完成了与 Nginx 的documantation 中解释的相同步骤。
我还添加了BinaryFileResponse::trustXSendfileTypeHeader(); 到控制器。但现在我不断收到 404 响应。
这是我的配置和代码:
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。
【问题讨论】:
-
将用于通过
getPictureAction获取照片的网址添加到 OP 中 -
@MaxP。你好。我不明白你所说的 OP 是什么意思?
-
OP = 原帖,问题
-
@MaxP。仔细阅读我的帖子,网址在底部