発生している問題
さくらインターネットのレンタルサーバ(スタンダード)にてFlaskをどうさせたいのですがどうもできません。さくらの管理画面から見れるエラーは以下の通りです。
error
1[Sun Apr 12 18:40:40.314361 2020] [cgi:error] [pid 96285] [client 126.**.103.**:0] AH01215: suexec policy violation: see suexec log for more details: /home/**ユーザ名**/www/index.cgi 2[Sun Apr 12 18:40:40.314471 2020] [cgi:error] [pid 96285] [client 126.**.103.**:0] End of script output before headers: index.cgi 3[Sun Apr 12 18:40:40.352756 2020] [cgi:error] [pid 10072] [client 126.**.103.**:0] AH01215: suexec policy violation: see suexec log for more details: /home/**ユーザ名**/www/index.cgi, referer: http://**ユーザ名**.sakura.ne.jp/ 4[Sun Apr 12 18:40:40.352895 2020] [cgi:error] [pid 10072] [client 126.**.103.**:0] End of script output before headers: index.cgi, referer: http://**ユーザ名**.sakura.ne.jp/
アクセス元IPとユーザ名は一部伏せてあります。
Chromeからアクセスすると、
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at support@sakura.ad.jp to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
と、500番エラーです。
ソースコード
ファイルはwwwディレクトリ内にあります。
app.py
Python
1# -*- coding: utf-8 -*- 2from flask import Flask 3app = Flask(__name__) 4 5@app.route('/') 6def index(): 7 return "Hello World!\n" 8 9if __name__ == '__main__': 10 app.run()
index.cgi
cgi
1import cgitb 2cgitb.enable() 3 4from wsgiref.handlers import CGIHandler 5from app import app 6 7from sys import path 8 9path.insert(0, '/miyablo/www/hello/') 10from app import app 11class ProxyFix(object): 12 def __init__(self, app): 13 self.app = app 14 def __call__(self, environ, start_response): 15 16 environ['SERVER_NAME'] = "miyablo.sakura.ne.jp" 17 environ['SERVER_PORT'] = "80" 18 environ['REQUEST_METHOD'] = "GET" 19 environ['SCRIPT_NAME'] = "" 20 environ['PATH_INFO'] = "/" 21 environ['QUERY_STRING'] = "" 22 environ['SERVER_PROTOCOL'] = "HTTP/1.1" 23 return self.app(environ, start_response) 24if __name__ == '__main__': 25 app.wsgi_app = ProxyFix(app.wsgi_app) 26 CGIHandler().run(app)
.htaccess
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.cgi/$1 [QSA,L] <Files ~ ".py$"> deny from all </Files>
現状
https://qiita.com/ninoko1995/items/8b01fd02bada3a2fa794
上記の記事を参考に構築していきました。
記事ではpython index.cgi
と、直接動かして500番エラーになり上のソースコードのindex.cgiに修正しエラーを解消させていました。
ただ、自分の環境でもindex.cgiを修正しpython index.cgi
を実行したらステータスは200番で無事接続されたのですが、ブラウザの方からは依然500番エラーのままでした。
どなたか詳しい方
回答よろしくお願いします。
追記
index.cgiを編集しました。
index.cgi
cgi
1#!/usr/local/bin/python //Pythonのパスを追記 2 3# -*- coding: utf-8 -*- //文字コードを追記 4import cgitb 5cgitb.enable() 6 7from wsgiref.handlers import CGIHandler 8from app import app 9 10from sys import path 11 12path.insert(0, '/**ユーザ名**/www/') //Flask、index.cgiを置いているディレクトリに変更 13from app import app 14class ProxyFix(object): 15 def __init__(self, app): 16 self.app = app 17 def __call__(self, environ, start_response): 18 19 environ['SERVER_NAME'] = "**ユーザ名**.ne.jp" //サーバネームを変更 20 environ['SERVER_PORT'] = "80" 21 environ['REQUEST_METHOD'] = "GET" 22 environ['SCRIPT_NAME'] = "" 23 environ['PATH_INFO'] = "/" 24 environ['QUERY_STRING'] = "" 25 environ['SERVER_PROTOCOL'] = "HTTP/1.1" 26 return self.app(environ, start_response) 27if __name__ == '__main__': 28 app.wsgi_app = ProxyFix(app.wsgi_app) 29 CGIHandler().run(app)
index.cgiにはchmod 755 index.cgi
で実行権限を付与
エラーは依然そのままです。
追記②
CGIの#!は必ず1行目ということを知りませんでした。失礼しました。
index.cgi
cgi
1# -*- coding: utf-8 -*- //文字コードを追記 2 3#!/usr/local/bin/python //Pythonのパスを追記 4 5import cgitb 6cgitb.enable() 7 8from wsgiref.handlers import CGIHandler 9from app import app 10 11from sys import path 12 13path.insert(0, '/**ユーザ名**/www/') //Flask、index.cgiを置いているディレクトリに変更 14from app import app 15class ProxyFix(object): 16 def __init__(self, app): 17 self.app = app 18 def __call__(self, environ, start_response): 19 20 environ['SERVER_NAME'] = "**ユーザ名**.ne.jp" //サーバネームを変更 21 environ['SERVER_PORT'] = "80" 22 environ['REQUEST_METHOD'] = "GET" 23 environ['SCRIPT_NAME'] = "" 24 environ['PATH_INFO'] = "/" 25 environ['QUERY_STRING'] = "" 26 environ['SERVER_PROTOCOL'] = "HTTP/1.1" 27 return self.app(environ, start_response) 28if __name__ == '__main__': 29 app.wsgi_app = ProxyFix(app.wsgi_app) 30 CGIHandler().run(app)
他のエラーが吐かれました
error
1[Mon Apr 13 09:52:33.316835 2020] [http:error] [pid 96285] [client 126.***.103.**:0] AH02429: Response header name '<!--' contains invalid characters, aborting request
ヘッダーに<!--という不正な文字があるためリクエストを中止したって内容ということはわかります。
しかし、ヘッダーの設定はどこにも記述していないので対処しようがありません、、、、
回答1件
あなたの回答
tips
プレビュー