Я настраиваю среду разработки, которая использует nginx и пересылает запросы на php-сервер из командной строки, используя fastcgi. Когда я посылаю запросы на php-сервер напрямую, он обрабатывает их правильно. Сервер nginx может правильно обрабатывать запросы на файлы не-php. Однако, когда я отправляю php-запрос через nginx, сервер php срабатывает, но возвращается с «Неверный запрос (неверный HTTP-запрос)».
Извиняюсь за прикрепление всех моих файлов конфигурации, но я не уверен, с чего начать. Все файлы находятся в $PROJECT_PATH/dev-config/
,
Вот соответствующие части моего конфига nginx.
http {
...
server {
root .;
listen 8123;
server_name localhost;
location / {
index index.php;
}
location ~ \.php$ {
try_files $fastcgi_script_name =404;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass 127.0.0.1:9123;
fastcgi_index index.php;
include fastcgi_params; # this file is the default
}
}
}
Вот скрипт, который запускается для (повторного) запуска nginx и php:
#!/bin/bash
PROJECT_PATH="$(dirname $0)/../"
nginx -s stop || true
nginx -c dev-config/nginx.conf -p $PROJECT_PATH
php -c php-dev.ini -t $PROJECT_PATH -S 127.0.0.1:9123
Файл, который я отправляю, это test.php:
<? echo 'YAY!' ?>
Внутри моих журналов ошибок nginx я получаю такие сообщения:
2017/10/27 08:12:56 [error] 68934#0: *1 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9123", host: "localhost:8123"
Одновременно php отправляет такие сообщения:
[Fri Oct 27 08:12:56 2017] 127.0.0.1:52470 Invalid request (Malformed HTTP request)
Это показывает, что запрос обрабатывается nginx и отправляется дальше на сервер php. Но запрос как-то неверен.
Чтобы было ясно, это предназначено для запуска в среде разработчика на ноутбуке без изменений конфигурации для каждого пользователя.
Проблема, с которой я столкнулся, заключалась в том, что на php-сервере с командной строкой не работает fastcgi. Поскольку сервер командной строки уже является сервером, мне вообще не нужны fastcgi. Вместо этого я могу proxy_pass
к этому.
Я изменил блок местоположения PHP на это, и это сработало:
location ~ \.php$ {
proxy_pass http://127.0.0.1:9123;
}
Других решений пока нет …