У меня проблема, которая не описана в Интернете. Я использую VPS Debian 8 Nginx + PHP7.0-FPM . Мой сервер предоставляет php-файлы в исходном коде и не компилирует их, когда я настраиваю Nginx и PHP7.
все мои хосты включают этот файл, поэтому мне нужно настроить собственный сокет в каждом файле хоста. Я делаю это так:
location ~ '\ .php $ | ^ / update.php' { fastcgi_split_path_info ^ (. +? \. php) (| /.*)$; fastcgi_pass unix: /var/run/php/example.com.php7.0-fpm.conf; включить / etc / nginx / fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/example.com/www$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT /var/www/example.com/www; fastcgi_param PHP_ADMIN_VALUE upload_tmp_dir = / var / www / example.com / tmp / upload; fastcgi_param PHP_ADMIN_VALUE session.save_path = / var / www / example.com / tmp / sessions; }
отредактируйте основной файл пула php7.0-fpm /etc/php/7.0/fpm/pool.d/www.conf, чтобы прослушивать сокет (но теперь я не понимаю, зачем мне это здесь):
listen = / var / run / php / php7.0-fpm.sock
отредактируйте файл пула моего сайта /etc/php/7.0/fpm/pool.d/example.com.conf, чтобы настроить его собственный сокет (так вот он я думаю, необходимо):
listen = /var/run/php/example.com.php7.0-fpm.sock
restart services:
service nginx restart && service php7.0-fpm restart
так что мой index.php загружается, как и когда я захожу на любую страницу сайта.
Но если я использую tcp socket fastcgi_pass 127.0.0.1:9000;
, он работает нормально.
Похоже, у вас неправильное имя файла для fastcgi_pass
, это должно быть:
fastcgi_pass unix:/var/run/php/example.com.php7.0-fpm.sock;
Убедитесь, что php-fpm запущен и что файл сокета существует и имеет правильные разрешения для nginx на доступ к файлу. Если у вас установлен и применяется selinux, вам также может потребоваться проверить его журналы, чтобы узнать, не блокирует ли он доступ к файлу nginx.
На стороне php-fpm каждый из этих файлов конфигурации в pool.d
- это отдельный пул исполняемых файлов PHP, и каждому нужен свой сокет. www.conf
не является «основным» файлом конфигурации, это полностью отдельный пул процессов, и его следует отключить / удалить, если вы его не используете. Поскольку оба пула настроены на использование одного и того же сокета, здесь определенно возникает конфликт.
Что происходит со слишком сложным местоположением
?
location ~ '\.php$|^/update.php' {
Я ожидаю, что ваши запросы на самом деле не соответствуют это.
Все, что вам действительно нужно, это:
location ~ \.php$ {
Сокеты Unix имеют разрешения
Сокет, соединяющий php и nginx, создается службой php7.2-fpm в соответствии с конфигурацией
sudo nano /etc/php/7.2/fpm/pool.d/www.conf
этот файл имеет
listen = /run/php/php7.2-fpm.sock
listen.owner = www-data
listen.group = www-data
после запуска / перезапустите эту службу
sudo systemctl restart php7.2-fpm.service
, он создает файл, представляющий сокет с указанным владельцем и группой
ls -la /run/php
НО Nginx по умолчанию использует другого пользователя, вы можете проверить его у
sudo nano /etc/nginx/nginx.conf
пользователя nginx;
Теперь он работает вам, как вы хотите настроить разрешения. Либо предоставьте больше прав для файла сокета, либо смените пользователя для прослушивания, либо измените пользователя nginx ... вы выбираете свой ответ.