Python

Apache2 不會執行基於 shebang 的 cgi 文件

  • May 16, 2020

我正在嘗試使用 Python 作為伺服器腳本語言而不是 PHP。

我已經配置了 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 和預設-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”。

後來

事實證明,在我的情況下,對這個問題的簡短回答(特別是)只是簡單地將“ExecCGI”添加為<Directory>標籤或塊或任何它被稱為的“選項”之一。

您需要採取一些額外的步驟。

  1. 啟用 CGI 子系統a2enmod cgid
  2. 取消註釋中的 CGI 處理程序mods-enabled/mime.conf,或在您的特定 vHost 部分中包含此指令
AddHandler cgi-script .cgi
  1. 包含Options ExecCGI在您希望這些程序可用的 vHost 或最頂層目錄中

為了測試,我所做的是在我的文件中包含 CGI 處理程序和ExecCGI語句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

引用自:https://unix.stackexchange.com/questions/585918