使用 nginx、fastcgi 和 php 设置开发环境时,我从 php 服务器收到“无效请求(格式错误的 HTTP 请求)”

And*_*erg 3 php fastcgi nginx

我正在建立一个使用 nginx 的开发环境,并使用 fastcgi 将请求转发到命令行 php 服务器。当我直接向 php 服务器发送请求时,它会正确处理它们。nginx 服务器可以正确处理非 php 文件的请求。但是,当我通过 nginx 发送 php 请求时,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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是运行以(重新)启动 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
Run Code Online (Sandbox Code Playgroud)

我发送的文件是 test.php:

<? echo 'YAY!' ?>
Run Code Online (Sandbox Code Playgroud)

在我的 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"
Run Code Online (Sandbox Code Playgroud)

同时,php 正在发送这样的消息:

[Fri Oct 27 08:12:56 2017] 127.0.0.1:52470 Invalid request (Malformed HTTP request)
Run Code Online (Sandbox Code Playgroud)

这表明请求由 nginx 处理并继续发送到 php 服务器。但是请求在某种程度上是不正确的。

  1. 我该怎么做才能发送格式正确的请求?
  2. 或者,如果现在无法判断,我该怎么做才能从 php 获取更多关于请求的信息,确切地说,它正在获取什么?

需要明确的是,这意味着在笔记本电脑上的开发环境中运行,无需为每个用户更改配置。

And*_*erg 5

我遇到的问题是命令行 php 服务器没有运行 fastcgi。由于命令行服务器已经是服务器,我根本不需要fastcgi。相反,我可以proxy_pass

我将 php location 块更改为这个并且它起作用了:

location ~ \.php$ {
    proxy_pass http://127.0.0.1:9123;
}
Run Code Online (Sandbox Code Playgroud)