Apache2はshebangベースのcgiファイルを実行しません。

Apache2はshebangベースのcgiファイルを実行しません。

PHPの代わりにPythonをサーバースクリプト言語として使用しようとしています。

localhostを設定し、その下でPHPファイルが正しく実行されています。

ファイルを作成すると、.../localhost/temp/test.cgi(実行可能になります):

#!/home/mike/python_venvs/test_venv369/bin/python

print( """Content-type:text/html\n\n
            <!DOCTYPE html>
            <html lang="en">
                <head>
                    <meta charset="utf-8"/>
TEST
                    <title>My server-side template</title>
                </head>
                <body>""" )
print( "</body></html>")

...Pythonスクリプトでは実行されません。ファイルのテキストはブラウザにのみ表示されます。

私はこれについてたくさんの検索をしました。 httpd.confのようなファイルはありません。私のApache2設定は次のとおりです。 /usr/sbin/apache2で実行可能で、ほとんどの設定ファイルは明らかに/etc/apache2の下にあります。特に/sites-availableのように見えます。 000-default .conf と default という 2 つのファイルがあります。 -ssl.conf.

私は間違っているかもしれませんが、httpd.confはこれを行う「古い」Apacheメソッドだと思います。

000-default.confの下部で完全に混乱していますが、(ただ)可能性のある行を見つけました。

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf

...それでapache2サービスのコメントを外して再起動しました。変わりません。

000-default.confの詳細
(/etc/apache2/sites-availableから)。 localhostディレクトリを変更しようとすると、このファイルの変更がうまくいくようです。

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that...

    ServerAdmin webmaster@localhost

    DocumentRoot "/media/mike/W10 D drive/My Documents/localhost"
    <Directory />
                Options FollowSymLinks
                 AllowOverride All 
    </Directory>
    <Directory /media/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Require all granted
    </Directory>
    ...

CGIスクリプトがどこに行くのか、どこで設定するのかはわかりませんが(下の最初の答えを確認しますが)、上記のように... / localhost /の下の.htmlファイルで作業したいことを考えると、場所を「CGI有効」に設定したいです。

〜の後
<Directory>私の場合、この質問に対する短い答え(具体的には)は、タグやブロック、または何と呼ばれるかを「オプション」の1つとして「ExecCGI」を単純に追加することでした。

ベストアンサー1

いくつかの追加措置を講じる必要があります。

  1. CGIサブシステムの有効化a2enmod cgid
  2. mods-enabled/mime.conf特定のvHostセクションでCGIハンドラのコメントを削除するか、このディレクティブを含めます。

    AddHandler cgi-script .cgi
    
  3. Options ExecCGIこれらのプログラムを使用できる仮想ホストまたは最上位ディレクトリに含まれています。

テストのために私がしたことは、私のファイルExecCGIにCGIハンドラとステートメントを含めることでした。sites-enabled/000-default.conf

<VirtualHost *:80>
        ...

        AddHandler cgi-script .cgi

        <Directory "/var/www/html">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch

                Require all granted
        </Directory>
</VirtualHost>

その後、次の実行可能スクリプトを作成して実行できました。time.cgi

おすすめ記事