Настройка связки 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. уже после обнаружил как-бы способ все таки запустить связку на сокетах, но пока не проверял. И еще один.
Share post

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 3

    +1
    часть запросов (и всегда разная часть) возвращались с ошибкой. Скрипт не мог открыть файл кэша

    storage на volume вынесен? С каким драйвером?


    В WSL насколько мне известно, нет сокетов как таковых

    Есть и уже давно, только надо пермишшены выставить правильно.

      +1

      Сокеты в WSL были, есть и будут.
      Как проверить что сокет доступен? Под deb-дистром sudo -u www-data ls /path/to/fpm.sock.
      В чем разница между UNIX-сокетом и TCP-сокетом? UNIX-сокеты — файлы, поэтому они более защищены и доступ к ним можно контролировать более гранулярно чем к TCP-сокету, также обращение к ним более "дешево". Но при высокой нагрузке UNIX-сокеты придется тюнить раньше чем TCP.


      PS: дико извиняюсь, думал пощу комментарий, а не отвечаю кому-то.

        0
        К сожалению, сейчас уже не смогу вспомнить. Тому конфигу, как и тексту, уже с полгода как.
        Писался, в основном, как шпаргалка для себя же. Чтобы заново не вспоминать.

      Only users with full accounts can post comments. Log in, please.