使用 Apache/Httpd 在 CentOS 7 上執行 Perl CGI 腳本
我的 CGI Perl 腳本 CentOS 7 執行不正確,它們要麼顯示為純文字,要麼出現伺服器錯誤。
我一直把我的腳本放到預設
/var/www/cgi-bin
目錄中,但沒有運氣。我試圖將 CGI 腳本放入
/var/www/html/another-dir
其中,但它們只是以純文字形式出現。
這是在 CentOS 7 上正確執行 CGI Perl 腳本的方法。
我把這個留在這裡,因為網際網路上的很多資源似乎沒有結合這些步驟,讓像我這樣的人非常困惑。
簡而言之,這是需要做的。
- 安裝軟體。
- 創建您的測試 CGI 文件。
- 確保已載入 CGI 模組。裡面
httpd.conf
。- 更改目錄設置
httpd.conf
。- 更改權限以允許 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 755
也777
可能行得通。)現在
httpd
像這樣重新啟動:sudo systemctl restart httpd.service
此時我的 CGI 腳本正在正確地呈現為 HTML。
它們是從網路根目錄提供的,如下所示:
http://<IP>/hello.cgi
請隨時添加更多可能對其他人有所幫助的資訊。