Apache2 不會執行基於 shebang 的 cgi 文件
我正在嘗試使用 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>
標籤或塊或任何它被稱為的“選項”之一。
您需要採取一些額外的步驟。
- 啟用 CGI 子系統
a2enmod cgid
- 取消註釋中的 CGI 處理程序
mods-enabled/mime.conf
,或在您的特定 vHost 部分中包含此指令AddHandler cgi-script .cgi
- 包含
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