[Из песочницы] Настройка связки php-fpm + nginx под WSL

habr.png
Я — виндузятник и всячески увиливаю от окончательного перехода на Linux на своём PC не смотря на все его преимущества. Поэтому последние пару лет для создания локальных площадок под проекты использовал Docker for Windows. Не сказать что штука сверхстабильная, но существенных проблем не вызывала, пока на одном проекте на Laravel площадка не стала вести себя странно: часть запросов (и всегда разная часть) возвращались с ошибкой. Скрипт не мог открыть файл кэша.

Бесполезно потратив изрядное количество времени на поиск причины решил в данном случае отказаться от Docker и развернуть площадку под WSL в ручном режиме.
Поскольку WSL — почти Linux, т.е. — не совсем, настройка имеет свои особенности.
После того, как из bash были установлены MySQL, nginx и php7.2, в nginx настроен виртуальный сервер всё это отказалось работать. В логах nginx была такая запись:

 connect() to unix:/var/run/php/php7.2-fpm.sock failed (2: No such file or directory) while connecting to upstream

В WSL насколько мне известно, нет сокетов как таковых, поэтому пришлось сделать следующее:
  1. открыть на редактирование файл /etc/php/7.2/fpm/pool.d/www.conf, и исправить значение директивы listen
    ; listen = /run/php/php7.2-fpm.sock ; old value
    listen = 127.0.0.1:9000 ; new value
    

  2. установить то же значение в настройке виртуального сервера nginx
    location ~ \.php$ {
    ...
    fastcgi_pass   127.0.0.1:9000;
    ...
    }
    


Это дало вроде как работающий сервер. Вроде как потому что каждый запрос от обрабатывал оооооооооооооооооооооочень медленно. Аж по самый time limit. Для избавиться от тормозов, как оказалось, следует добавить строку в файл /etc/nginx/nginx.conf
http {
...
fastcgi_buffering off;
...
}

После этого система взлетела и пока отлично себя чувствует.
Описанные рецепты были найдены здесь.

P.S. уже после обнаружил как-бы способ все таки запустить связку на сокетах, но пока не проверял. И еще один.

© Habrahabr.ru