20 мар. 2012 г.

Microcosm и переход с lighttpd на nginx

Решил я заменить lighttpd на nginx. Уж очень часто его нахваливают в интернете. Всё прошло гладко. Но споткнулся о небольшое приложение для хранения геоданных - Microcosm. Написано оно на php. В документации есть только вариант для Apache:
# BEGIN Microcosm

RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /m/microcosm.php [L]


# END Microcosm
В lighttpd настройка была ещё проще:
url.rewrite = ( "^/api/(.*)$" => "m/microcosm.php/$1" )
С nginx получилось немного сложнее:
location /api/ {
   fastcgi_pass unix:/var/spool/php-fpm.socket; # PHP-FPM socket
   root   /home/web/htdocs/m/; # Microcosm directory
   fastcgi_index microcosm.php;
   include        fastcgi_params;
   fastcgi_split_path_info ^(\/api)(.*)$;
   fastcgi_param SCRIPT_FILENAME $document_root/microcosm.php;
   fastcgi_param PATH_INFO $fastcgi_path_info;
}
Используется директива fastcgi_split_path_info. Она разбивает адресную строку запроса на 2 части, которые описаны регулярными выражениями. Первая часть — это /api, попадает в переменную $fastcgi_script_name. Вторая часть попадает в $fastcgi_path_info. Её и скармливаем php в виде $_SERVER['PATH_INFO']. Эта переменная и используется в microcosm.

1 комментарий:

  1. К слову http://habrahabr.ru/company/boxowerview/blog/174569/#comment_6078947
    Рекомендую https://play.google.com/store/apps/details?id=dk.tacit.android.foldersync.full
    У меня он сам кидает в дропбокс новые gpx в момент, когда я их экспортирую из osmtracker.
    папок синхронизации может быть несколько

    ОтветитьУдалить