Python flask & fast-cgi on apache - 500 内部服务器错误(脚本过早结束 headers)
Python flask & fast-cgi on apache - 500 Internal Server Error (Premature end of script headers)
我想在 apache 生产服务器上设置我的烧瓶应用程序。我创建了以下 .htaccess 文件:
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
<Files ~ (\.fcgi)>
SetHandler fcgid-script
Options +SymLinksIfOwnerMatch +ExecCGI
</Files>
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /fcgi-bin/runFlaskApp.fcgi/ [QSA,L]
</IfModule>
应该重定向到以下 fcgi 文件(设置为 chmod 755):
#!/usr/bin/env python2.7
# -*- coding: UTF-8 -*-
RELATIVE_WEB_URL_PATH = '/app_dict'
import os
# This points to the application on the local filesystem.
LOCAL_APPLICATION_PATH = os.path.expanduser('~') + '/html/app_dict'
import sys
sys.path.insert(0, LOCAL_APPLICATION_PATH)
from flup.server.fcgi import WSGIServer
from tmain import app
class ScriptNamePatch(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['SCRIPT_NAME'] = RELATIVE_WEB_URL_PATH
return self.app(environ, start_response)
app = ScriptNamePatch(app)
if __name__ == '__main__':
WSGIServer(app).run()
在 return 中应该启动以下烧瓶应用程序:
#!/usr/bin/env python2.7
# -*- coding: utf8 -*-
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
但是当我尝试访问该网站时,显示内部服务器错误 500。以下几行显示在 apache 错误日志中:
[warn] [client 0.0.0.0] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[error] [client 0.0.0.0] Premature end of script headers: runFlaskApp.fcgi
如果我 运行 fcgi 文件 "python2.7 runFlaskApp.fcgi" 它 return 如下:
WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Status: 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 12
Hello World!
我认为 header 错误是因为它不在 WSGIServer 的上下文中 运行。
我已经尝试通过添加格式错误的代码行来在 Flask 应用程序中引发异常。但是 apache 错误日志中没有出现异常。这让我相信 flask 应用程序甚至没有被 fcgi 脚本加载。
有没有办法进一步调试这个问题,或者有人知道这个问题的解决方案吗?
问题出在 fcgi 文件的权限或行尾。将它从 Windows 上传到服务器并设置 chmod 755 不起作用。
仅在服务器上创建文件然后 运行 chmod 755 对我有用。
我想在 apache 生产服务器上设置我的烧瓶应用程序。我创建了以下 .htaccess 文件:
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
<Files ~ (\.fcgi)>
SetHandler fcgid-script
Options +SymLinksIfOwnerMatch +ExecCGI
</Files>
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /fcgi-bin/runFlaskApp.fcgi/ [QSA,L]
</IfModule>
应该重定向到以下 fcgi 文件(设置为 chmod 755):
#!/usr/bin/env python2.7
# -*- coding: UTF-8 -*-
RELATIVE_WEB_URL_PATH = '/app_dict'
import os
# This points to the application on the local filesystem.
LOCAL_APPLICATION_PATH = os.path.expanduser('~') + '/html/app_dict'
import sys
sys.path.insert(0, LOCAL_APPLICATION_PATH)
from flup.server.fcgi import WSGIServer
from tmain import app
class ScriptNamePatch(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['SCRIPT_NAME'] = RELATIVE_WEB_URL_PATH
return self.app(environ, start_response)
app = ScriptNamePatch(app)
if __name__ == '__main__':
WSGIServer(app).run()
在 return 中应该启动以下烧瓶应用程序:
#!/usr/bin/env python2.7
# -*- coding: utf8 -*-
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
但是当我尝试访问该网站时,显示内部服务器错误 500。以下几行显示在 apache 错误日志中:
[warn] [client 0.0.0.0] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[error] [client 0.0.0.0] Premature end of script headers: runFlaskApp.fcgi
如果我 运行 fcgi 文件 "python2.7 runFlaskApp.fcgi" 它 return 如下:
WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Status: 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 12
Hello World!
我认为 header 错误是因为它不在 WSGIServer 的上下文中 运行。
我已经尝试通过添加格式错误的代码行来在 Flask 应用程序中引发异常。但是 apache 错误日志中没有出现异常。这让我相信 flask 应用程序甚至没有被 fcgi 脚本加载。
有没有办法进一步调试这个问题,或者有人知道这个问题的解决方案吗?
问题出在 fcgi 文件的权限或行尾。将它从 Windows 上传到服务器并设置 chmod 755 不起作用。 仅在服务器上创建文件然后 运行 chmod 755 对我有用。