1

我正在尝试在 nginx 中设置一个虚拟位置,以便从目录中提供大型静态文件。主应用程序是一个 symfony2 程序。

我想做的是有一个 url,您可以在其中指定 GET 参数中的文件路径,这样 nginx 可以直接将文件提供给客户端。

在我的示例中,位置将是 /getfile

这是我到目前为止的配置

server
{
    listen                                              80;
    server_name                                         website_url;
    set                                                 $path_web /myapp/webdir;

    client_max_body_size                                200m;   

location /getfile {             
    root /path_to_dir;
        if ($args ~ ^oid=(.*+)) {
          set $key1 $1;
          rewrite ^.*$  $key1;
        }   
    }

location ~ \.php($|/)
{
      set  $script     $uri;
      set  $path_info  "";

      if ($uri ~ "^(.+\.php)(.*)") {
          set  $script     $1;
          set  $path_info  $2;
      }


      fastcgi_pass   unix:/tmp/php-fpm.sock;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $path_web$script;
      fastcgi_param  SCRIPT_NAME      $script;
      fastcgi_param  PATH_INFO        $path_info;

      include   /etc/nginx/conf.d/fastcgi.conf;
}


    root                                                    $path_web;
    index                                                   app.php app_dev.php;

    location / 
    {   
    set $idx_file app.php;

    if ($args ~ debug=true) {
        set $idx_file app_dev.php;
        }

        if ( !-f $request_filename) {
    rewrite ^(.*)$ /$idx_file last; 
        }
    }

    location ~ /\.ht
    {
    deny                 all;
    }



    # logs path
    access_log                                          /path_to_logdir/access.log main;
    error_log                                           /path_to_logdir/error.log;
}
4

2 回答 2

1

我正在添加我的答案,因为没有明确的答案。我宁愿使用 try_files,所以它看起来像这样。

location /my/path {
  # try to serve file directly, fallback to rewrite
  try_files $uri $uri @rewrite;

}
location @rewrite {
  rewrite ^/(.*)$ /app.php/$1 last;
}

然后,服务器将首先在给定路径中查找图像,如果未找到则回退到 app.php。它比 ifs 和 elses 好得多,因为它不应该回退到 app.php。

于 2014-05-21T16:20:16.893 回答
0

虽然我不确定这是否可行,但你已经使用了 anif和 aset和 a rewrite,太多不需要的东西,我会试试这个

location /getfile?oid=(.*) {             
      rewrite ^ /path/$1;
}
于 2013-06-02T23:46:45.350 回答