Linux

使用 Apache/Httpd 在 CentOS 7 上執行 Perl CGI 腳本

  • January 27, 2018

我的 CGI Perl 腳本 CentOS 7 執行不正確,它們要麼顯示為純文字,要麼出現伺服器錯誤。

我一直把我的腳本放到預設/var/www/cgi-bin目錄中,但沒有運氣。

我試圖將 CGI 腳本放入/var/www/html/another-dir其中,但它們只是以純文字形式出現。

這是在 CentOS 7 上正確執行 CGI Perl 腳本的方法。

我把這個留在這裡,因為網際網路上的很多資源似乎沒有結合這些步驟,讓像我這樣的人非常困惑。

簡而言之,這是需要做的。

  1. 安裝軟體。
  2. 創建您的測試 CGI 文件。
  3. 確保已載入 CGI 模組。裡面httpd.conf
  4. 更改目錄設置httpd.conf
  5. 更改權限以允許 CGI 執行。

安裝和配置軟體

sudo yum update
sudo yum install httpd
sudo yum install perl perl-CGI
sudo systemctl start httpd.service
sudo systemctl enable httpd.service

創建您的測試 CGI 文件

即使一直遵循這些步驟,我也從來沒有在/var/www/cgi-bin不修改內部 Web 根目錄的情況下載入CGI 腳本httpd.conf。相反,我決定在另一個目錄中啟動 CGI。

在我的伺服器上,我希望 Web 根目錄html保存我的 CGI 文件。這是/var/www/html/hello.cgi

#!/usr/bin/perl
print "Content-type: text/html\n\n"; # This is mandatory.
print "<h2>Hello world!</h2>";

確保已載入 CGI 模組。裡面httpd.conf

您可以通過命令對此進行簡單檢查。

grep -n "LoadModule" /etc/httpd/conf/httpd.conf

我可以看到沒有指定 CGI 模組,我通過以下方式確認它們存在於模組文件夾中:

find /etc/httpd/modules/ -iname "*cgi*"

這是我所追求的:

/etc/httpd/modules/mod_cgi.so

讓我們將其添加到/etc/httpd/conf/httpd.conf文件中:

LoadModule cgi_module modules/mod_cgi.so

我相信您需要在 Ubuntu 中以不同的方式載入模組,請記住這一點。

更改目錄設置httpd.conf

在重新啟動之前httpd,我們必須在裡面再改變一件事/etc/httpd/conf/httpd.conf

<Directory "var/www/html">
   Options +ExecCGI
   AddHandler cgi-script .cgi .pl
</Directory>

根據許多Google搜尋,您可能還必須修改httpd.conf文件的這一部分,使其指向與上述相同的目錄"var/www/html"

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

我沒有修改我的,它似乎沒有任何區別。

更改權限以允許 CGI 執行

而這個讓我陷入了很多困境!不要小看這一點!

您需要告訴您的伺服器這些 CGI 腳本允許作為程序執行。

chmod 705 *.cgi

或者,您可以針對單個 CGI 腳本。

chmod 705 hello.cgi

網上有人這麼說,chmod 755777可能行得通。)

現在httpd像這樣重新啟動:

sudo systemctl restart httpd.service

此時我的 CGI 腳本正在正確地呈現為 HTML。

它們是從網路根目錄提供的,如下所示:http://<IP>/hello.cgi

請隨時添加更多可能對其他人有所幫助的資訊。

引用自:https://serverfault.com/questions/752272