質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

さくらのレンタルサーバ

さくらのレンタルサーバとは、格安サーバーで知られるさくらインターネット社の提供する共有レンタルサーバー。Webサイトの構築から簡単なプログラミングまで幅広く利用することができ、プランが多いことも特徴です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2059閲覧

さくらインターネットのレンタルサーバにおいてFlaskが正常動作しない

Y.NINOMIYA

総合スコア32

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

さくらのレンタルサーバ

さくらのレンタルサーバとは、格安サーバーで知られるさくらインターネット社の提供する共有レンタルサーバー。Webサイトの構築から簡単なプログラミングまで幅広く利用することができ、プランが多いことも特徴です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/12 10:02

編集2020/04/13 00:57

発生している問題

さくらインターネットのレンタルサーバ(スタンダード)にて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

ヘッダーに<!--という不正な文字があるためリクエストを中止したって内容ということはわかります。
しかし、ヘッダーの設定はどこにも記述していないので対処しようがありません、、、、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/04/12 14:29

index.cgi の実行許可と、先頭に #! が必要では。 あと、index.cgi の内容はご自分のサイトに合わせて変更した方がいいと思います。
Y.NINOMIYA

2020/04/12 18:34 編集

chmod 755 index.cgi で権限は与えてあるはずです。 ================================= # -*- coding: utf-8 -*- #!/usr/local/bin/python をindex.cgiの先頭に追記しました。 ================================= index.cgiを自分の環境に合わせました。 依然同じエラーです.....
Y.NINOMIYA

2020/04/13 00:58

申し訳ありません。こちらの認識不足でした。 修正したコード、エラーなど本文に追記しました。 よろしくお願いします。
hoshi-takanori

2020/04/13 20:31

ヘッダー部分に HTML コメント <!-- ... --> があるようですね。 python index.cgi の出力の先頭部分を教えてください。
guest

回答1

0

自己解決

このレンタルサーバの使用を停止しました

投稿2020/04/25 21:23

Y.NINOMIYA

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問