使用 nginx、fastcgi 和 php 设置开发环境时,我从 php 服务器获取 "Invalid request (Malformed HTTP request)"
When setting up a dev environment using nginx, fastcgi, and php, I am getting "Invalid request (Malformed HTTP request)" from php server
我正在设置一个使用 nginx 的开发环境,并使用 fastcgi 将请求转发到命令行 php 服务器。当我直接向 php 服务器发送请求时,它会正确处理它们。 nginx 服务器可以正确处理非 php 文件的请求。但是,当我通过 nginx 发送 php 请求时,php 服务器被命中,但是 returns 和 "Invalid request (Malformed HTTP request)".
抱歉附上我所有的配置文件,但我不确定从哪里开始。所有文件都位于 $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 [=14=])/../"
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 获取更多信息,确切地说,它正在收到什么请求?
明确地说,这意味着 运行 在笔记本电脑上的开发环境中,每个用户都没有配置更改。
我遇到的问题是命令行 php 服务器没有 fastcgi 运行 它。由于命令行服务器已经是服务器,所以我根本不需要fastcgi。相反,我可以 proxy_pass
它。
我将 php 位置块更改为此并且它有效:
location ~ \.php$ {
proxy_pass http://127.0.0.1:9123;
}
我正在设置一个使用 nginx 的开发环境,并使用 fastcgi 将请求转发到命令行 php 服务器。当我直接向 php 服务器发送请求时,它会正确处理它们。 nginx 服务器可以正确处理非 php 文件的请求。但是,当我通过 nginx 发送 php 请求时,php 服务器被命中,但是 returns 和 "Invalid request (Malformed HTTP request)".
抱歉附上我所有的配置文件,但我不确定从哪里开始。所有文件都位于 $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 [=14=])/../"
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 获取更多信息,确切地说,它正在收到什么请求?
明确地说,这意味着 运行 在笔记本电脑上的开发环境中,每个用户都没有配置更改。
我遇到的问题是命令行 php 服务器没有 fastcgi 运行 它。由于命令行服务器已经是服务器,所以我根本不需要fastcgi。相反,我可以 proxy_pass
它。
我将 php 位置块更改为此并且它有效:
location ~ \.php$ {
proxy_pass http://127.0.0.1:9123;
}