2013-06-02 4 views
1

Я пытаюсь настроить виртуальное место в nginx, чтобы обслуживать большие статические файлы из каталога. Главное приложение - программа symfony2.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; 
} 
+0

Являются ли эти файлы не под вашим веб-корнем? Если да, то почему бы не поместить их туда или символизировать каталог? – Gerry

ответ

0

Хотя я не уверен, если это будет работать или нет, но вы использовали if и а set и rewrite, слишком много не-нужны вещи, я хотел бы попробовать это

location /getfile?oid=(.*) {    
     rewrite^/path/$1; 
} 
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.

Смежные вопросы