最小的 flup fastcgi 服务器不能与 Nginx 一起工作

Bare minimal flup fastcgi server not working with Nginx

我写了一个最小的 Python fastcgi 脚本 webapp.py 用于测试:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import sys, os, traceback
from html import escape
from flup.server.fcgi import WSGIServer

def app(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    yield 'hello world'

WSGIServer(app, bindAddress=('127.0.0.1',3001)).run()

我可以启动脚本./webapp.py没问题。我还可以使用 telnet 与 localhost:3001 建立连接。

然后我创建一个 Nginx 默认配置,如下所示:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name _;
    location / {
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        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;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_pass localhost:3001;
    }
}

在我的本地机器上使用这个最低限度的配置,我启动了 nginx 并尝试访问 http://localhost。 Nginx 默认站点失败(502 Bad Gateway)。在日志消息中,我只能反复看到这样的错误:

2017/01/05 01:23:07 [error] 30464#30464: *3 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:3001", host: "localhost"

我的设置或代码出了什么问题?

我的错误

如果您像我一样关注 Python3 官方 HOWTO: Use Python in the web, installed flup-py3 1.0.2-1 并感到困惑。别这样这不是你的错。

上面的代码和设置没有问题。问题是我如何安装 flup-py3。我是这样安装的:

sudo pip3 install flup-py3

不应该这样做。

解决方案

你(和我)的问题的答案很简单。 "stable" 版本 1.0.2-1 根本不适用于 Python 3。于是官方的HOWTO fxx大涨。

在 pypi 上的官方稳定版本更新之前,您应该通过以下任一方式安装您的 flup-py3:

sudo pip3 install hg+https://hg.saddi.com/flup-py3.0/#egg=flup-py3

或:

sudo pip3 install git+https://github.com/pquentin/flup-py3.git#egg=flup-py3

第一个 (hg) 是原开发者 Allan Saddi 的 flup-py3 开发版。而第二个(github 版本)是由 Quentin Pradet 创建的副本。这两个来源都包含 2012 - 2014 年修复 flup 兼容性问题的补丁。

相关Link

2018 年更新 **

最新版本的flup-py3(>=1.0.3)已经修复了这个问题。您可以正常使用 pip 安装它。