Microcosm и переход с lighttpd на nginx
Решил я заменить lighttpd на nginx. Уж очень часто его нахваливают в интернете. Всё прошло гладко. Но споткнулся о небольшое приложение для хранения геоданных - Microcosm. Написано оно на PHP. В документации есть только вариант для Apache:
# BEGIN Microcosm
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /m/microcosm.php [L]
</IfModule>
# 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 /var/www/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.
Обратите внимание, что заметки могут обновляться со временем. Это может быть как исправление найденных ошибок, так и доработка содержания с целью более полного раскрытия темы. Информация об изменениях доступна в репозитории на github. Там же вы можете оставить в Issue ваши замечания по данной заметке.
Если данная заметка оказалась вам полезной, можете поблагодарить автора финансово.