ロリポップでPythonのCGIスクリプトが動かない場合の対処法

レンタルサーバーのロリポップで、 PythonのCGIスクリプトが動かない場合の 対応方法をいくつか紹介します。

「500 Internal Server Error」が出る場合

Internalは「内部の」という意味なので、 CGIスクリプト側に何らかの問題がある可能性が高いです。
この場合は次の4点を確認してください。

  • スクリプトのパスが間違っていないかどうか
  • 実行権限の付与を忘れていないかどうか
  • スクリプトファイルの改行コードがLFかどうか
  • CGIとして動作するための最低限のコードをかいているかどうか

順番に説明していきます。

スクリプトのパス

パスはロリポップの次のページで確認してください。
CGI・SSI・PHP・SENDMAILについて - ロリポップ!レンタルサーバー

2024年の時点でPythonのバージョンは3.4、又は3.7が使えます。 サーバーによって異なる場合もあるので上記のサイトで必ず確認してください。

# 3.4の場合
#!/usr/local/bin/python3.4

# 3.7の場合
#!/usr/local/bin/python3.7

実行権限の付与

CGIスクリプトファイルに実行権限が無い場合はエラーになります。 一番手っ取り早いのは「FFFTP」などのGUIベースのFTPクライアントソフトを使うことです。

改行コードがLFかどうか

1番目のパスと2番目の実行権限はすぐに気づきやすいのですが、 3番目の改行コードは意外と盲点です。

特にWindows環境で開発している場合は、 改行コードがCR+LFになっている可能性があります。 その場合はLFに変更してからアップロードしてください。

スクリプトファイルの拡張子に関しては、 サーバーによっては「.cgi」に変更する必要がありますが、 ロリポップは「.py」で大丈夫です。

CGIとして動作するための最低限のコード

例えば動作確認用テストとして、次のようなコードを書いて実行しても動作しません。

#!/usr/local/bin/python3.7

print("Hello");

上記コードでは「500 Internal Server Error」となります。

「PHP」の経験がある人は「これで動くのでは?」と思いがちですが、 CGIとして動作するための最低限のコードが必要です(Content-Typeの指定等)。
以下のページを参考にして、コードを記述してから実行してみてください。

CGIスクリプトの基本(文字化け対策版)

「502 Bad Gateway Error」が出る場合

502は通信状態に異常があることを示すエラーです。 502が出る場合は、少し待ってから再度CGIを実行してみてください。

私の場合は502エラーが出てから5分後に再度実行してみると、 正常に実行できました。

補足:開発時はアクセラレーターをOFFにする

ロリポップサーバーには、アクセラレーター機能(キャッシュ機能)があります。

Web開発時はPythonのファイルだけでなく、HTMLやCSSのファイルを変更することも多くあります。 その際にサーバーのアクセラレーター機能がONになっていると、 HTMLやCSSの変更がすぐに反映されずにイラっとします。

開発時にはアクセラレーターをOFFにして、 安定して運用できるようになったらONにすることをおすすめします。
ドメインやサブドメイン設定時にON/OFFを指定できますし、 後から設定することも可能です。

Python