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

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

ただいまの
回答率

89.97%

mampでpythonをcgiとして実行したいが500インターネットサーバーエラー

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,606

SoraSue

score 28

前提・実現したいこと

現在chrome拡張機能を作成しており、jsとpythonをajaxなどで連携させたいと考えています。そこで、pythonをmampでcgiとして実行したいのですが、500Internal Server Error
と表示されます。
環境は以下の通りです。

  • macOS Sierra
  • Python 3.6.1 :: Anaconda 4.4.0 (x86_64)
  • MAMP バージョン4.2 

発生している問題・エラーメッセージ

例えば、http://localhost/background/cgi-bin/py.cgiにアクセスすると、(ディレクトリは正しいとします)

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, you@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


と表示されます。
また、mampのエラーログは次のように言っています。

Premature end of script headers

該当のソースコード

実行したいpythonファイルは以下の通りです。
シバン行はanaconda3の中のものを指定しています。

#!/usr/bin/env /Users/suegamisora/.pyenv/versions/anaconda3-4.4.0/lib/python3.6

print("Content-Type: text/plain")
print()

import sys
print(sys.version)


また、mampのapache2のhttpd.confは以下の通りです。(文字数制限のため、コメントアウトは除きます。)

<IfModule !mpm_netware.c>
PidFile logs/httpd.pid
</IfModule>

Listen 80

LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule dbd_module modules/mod_dbd.so
LoadModule bucketeer_module modules/mod_bucketeer.so
LoadModule dumpio_module modules/mod_dumpio.so
LoadModule echo_module modules/mod_echo.so
LoadModule case_filter_module modules/mod_case_filter.so
LoadModule case_filter_in_module modules/mod_case_filter_in.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule charset_lite_module modules/mod_charset_lite.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule ident_module modules/mod_ident.so
LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule fastcgi_module modules/mod_fastcgi.so
LoadModule cgid_module modules/mod_cgid.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule imagemap_module modules/mod_imagemap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule perl_module modules/mod_perl.so
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule xsendfile_module modules/mod_xsendfile.so

LoadModule php7_module        /Applications/MAMP/bin/php/php7.1.6/modules/libphp7.so

AddType application/x-httpd-php .php .phtml

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>

User (ここには僕のユーザー名が入力されてます。)
Group #-1

</IfModule>
</IfModule>

<IfModule xsendfile_module>
    XSendFile on
</IfModule>

ServerAdmin you@example.com

ServerName localhost:80

DocumentRoot "/Users/(僕のユーザー名)/Desktop/Computers/broaden_your_horizons"

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride None
</Directory>

<Directory "/Users/(僕のユーザー名)/Desktop/Computers/broaden_your_horizons">
    MultiViews
    Options All
    files.
    AllowOverride All
    Order allow,deny
    Allow from all

    XSendFilePath "/Applications/MAMP/htdocs"
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html index.php

    <IfModule perl_module>
        DirectoryIndex index.pl
    </IfModule>

    <IfModule wsgi_module>
        DirectoryIndex index.wsgi index.py
    </IfModule>

</IfModule>

AccessFileName .htaccess

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

<Files ~ "^\.DS_Store">
    Order allow,deny
    Deny from all
</Files>

ErrorLog "/Applications/MAMP/logs/apache_error.log"

LogLevel error

<IfModule log_config_module>

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

  </IfModule>

<IfModule alias_module>
     If you

    Alias /favicon.ico "/Applications/MAMP/bin/favicon.ico"

    Alias /icons/ "/Applications/MAMP/Library/icons/"

    <Directory "/Applications/MAMP/Library/icons">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

    Alias /phpMyAdmin "/Applications/MAMP/bin/phpMyAdmin"
    Alias /phpmyadmin "/Applications/MAMP/bin/phpMyAdmin"

    <Directory "/Applications/MAMP/bin/phpMyAdmin">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

    Alias /phpPgAdmin "/Applications/MAMP/bin/phpPgAdmin"
    Alias /phppgadmin "/Applications/MAMP/bin/phpPgAdmin"

    <Directory "/Applications/MAMP/bin/phpPgAdmin">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

    Alias /phpLiteAdmin "/Applications/MAMP/bin/phpLiteAdmin"
    Alias /phpliteadmin "/Applications/MAMP/bin/phpLiteAdmin"

    <Directory "/Applications/MAMP/bin/phpLiteAdmin">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

    Alias /MAMP "/Applications/MAMP/bin/mamp"

    <Directory "/Applications/MAMP/bin/mamp">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

    Alias /adminer "/Applications/MAMP/bin/adminer"

    <Directory "/Applications/MAMP/bin/adminer">
        DirectoryIndex adminer.php
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>


    ScriptAlias /cgi-bin/ "/Applications/MAMP/cgi-bin/"

    Alias /perl/ "/Applications/MAMP/cgi-bin/"

    <IfModule perl_module>
        PerlModule ModPerl::Registry
        <Location /perl>
            SetHandler perl-script
            PerlResponseHandler ModPerl::Registry
            PerlOptions +ParseHeaders
            Options +ExecCGI
        </Location>
    </IfModule>
</IfModule>

<IfModule cgid_module>

</IfModule>

ScriptAliased

<Directory "/Applications/MAMP/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>


DefaultType text/plain

<IfModule mime_module>

    TypesConfig /Applications/MAMP/conf/apache/mime.types


    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

    server

    AddHandler cgi-script .cgi .pyd


</IfModule>


<IfModule mime_magic_module>
    MIMEMagicFile /Applications/MAMP/conf/apache/magic
</IfModule>


directory can be

<IfModule ssl_module>
SSLRandomSeed startup file:/dev/urandom 1024
SSLRandomSeed connect file:/dev/urandom 1024

learn more google for "POODLE SSLv3".

</IfModule>

試したこと

teratailに似たような質問があったので、以下のサイトを参考に、シバン行を変えてみたり、文字コードを変えてみたりしましたが、エラーは消えませんでした。
CGI形式でpythonを実行する際、pyenvで指定したバージョンのpythonが実行されるようにしたいです

PythonでcgiのHello World

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2017/09/03 17:24 編集

    Webブラウザに表示されたエラーメッセージではなく、MAMP のログに 1行だけでなく、もうすこし詳細なエラーメッセージが残っていないでしょうか? 

    キャンセル

  • fiwa

    2017/09/03 17:34

    普通にhtdocsに入れてもダメなのですか?

    キャンセル

  • SoraSue

    2017/09/03 17:40

    [Sun Sep 03 17:23:41 2017] [error] [client ::1] env: /Users/(僕のユーザー名)/.pyenv/versions/anaconda3-4.4.0/lib/python3.6: Permission denied [Sun Sep 03 17:23:41 2017] [error] [client ::1] Premature end of script headers: py.cgiというエラーログが出ました。

    キャンセル

  • SoraSue

    2017/09/03 21:37

    みなさんの協力のおかげで、無事pythonのcgiを実行させられました!以下の3点を修正して直りました。①chmod +xでファイルに実行権限を与える。②シバン行では、anacondaのpythonではなく、/usr/local/bin/python3.6を指定する。③httpd.confのScriptAriasでcgiファイルを実行したいフォルダを指定する。

    キャンセル

回答 2

+2

cgiファイルに実行権限はついていますか?
chmod +x /Applications/MAMP/cgi-bin/py.cgi
などで試しに実行権限をつけてみてはいかがでしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/03 17:48

    /path/to/directory/py.cgiとすると、anacondaの中のpythonに対するPermissionがないと言われました。

    キャンセル

  • 2017/09/03 17:58

    では anacondaの中のpythonにも
    chmod +x
    で実行権限をつけてみましょう。

    キャンセル

  • 2017/09/03 21:32

    anacondaはなぜか実行権限をつけられなかったのですが、pythonの指定を#!/usr/local/bin/python3.6にしたら動きました!
    ありがとうございます!

    キャンセル

checkベストアンサー

+1

Anacondaがどういう挙動をするものかよく知らないのですが、私の環境ではMAMPの設定はデフォルトのままで、py.cgiのパーミッションを755にしておけばそのままhtdocsに放り込めば読まれています。

Sierra 10.12.6, MAMP 4.2(845), python3.6.2 [via homebrew]

Finder
Safari

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/03 17:59

    htdocs内で実行したらうまく動きました!
    ありがとうございます!
    なぜhtdocs内じゃないと500エラーになるのでしょうか?

    キャンセル

  • 2017/09/03 18:53

    普通なら/Applications/MAMP/cgi-binフォルダにpy.cgiを入れた場合でも(Apacheのポートを80に変更しているとして)、http://localhost/cgi-bin/py.cgi で表示されるはずですが、そこには入れたくないということなので。それ以外のディレクトリに置いたCGIを実行したいならhttpd.confでScriptAriasのところをきちんと書いてやる必要があるかと思います。

    キャンセル

  • 2017/09/03 21:33

    pythonの指定を#!/usr/local/bin/python3.6にし、ScriptAriasを書き換えたところ、ちゃんと実行されました!ありがとうございます!

    キャンセル

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

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる