我有一个“hello world”fastcgi在127.0.0.1:9000上运行,并希望通过nginx提供。 我添加了以下几行到nginx.conf http块:
server { listen public.ip.address.here:80; server_name $host; location / { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } }
然而,而不是得到fastcgi的输出,我只得到一个502坏网关响应。
[error] 1924#0: *1 upstream prematurely closed FastCGI stdout while reading response header from upstream, client: myIP, server: $host, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "public.ip.address.here"
这听起来像是你的FastCGI应用程序中的实际问题。 看看它的错误日志或其他可能产生的输出。
一般来说,您可能需要更多的FastCGIconfiguration,才能将数据传递给您的应用程序。 更大的设置可能包括这些设置的东西:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
同样,你的FastCGI应用程序的输出应该告诉你更多,也可能是一个完全不相关的nginx问题
当我忘记把我的CGI转换成FastCGI时,我遇到了同样的问题,在CGI的内容之前添加了这三行输出:
print "HTTP/1.0 200 OK" print "Content-type: text/plain" print ""
如果可以帮助其他人有上述相同的症状:
在我的情况下,REQUEST_URI参数在nginx.conf文件包含的模块特定的conf文件中被正确configuration。 但是,因为fastcgi_params文件也被包含在内,所以REQUEST_URI被双重指定。 在fastcgi_params文件中注释掉了这个问题。