Настройка связки php-fpm + nginx под WSL

Я — виндузятник и всячески увиливаю от окончательного перехода на 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. уже после обнаружил как-бы способ все таки запустить связку на сокетах, но пока не проверял. И еще один.
Tags:
php, nginx, wsl

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.