NGINX - 在symfony2网站上提供静态文件

时间:2013-06-02 14:33:59

标签: symfony nginx

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

我想要的是拥有一个可以在GET参数中指定文件路径的URL,这样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;
}

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

虽然我不确定这是否有用,但您使用了ifset以及rewrite,这些东西太多了,我会尝试这个

location /getfile?oid=(.*) {             
      rewrite ^ /path/$1;
}