ubuntu 18 下配置apache2並和運行cgi腳本
配置環境太惡心了,各種問題,感謝度娘。
這個小作業還是不可避免的需要在linux下運行,沒辦法,只能繼續在linux下整一個環境。
安裝apache2
1、解決權限問題
安裝過程中不可避免的會遇到一些里的權限不足的問題,所以安裝前需要解決權限的問題。
su root
可以獲取最高權限,並在這個終端下左右的命令都具有root權限。第一次使用需要配置密碼,以后只用只需輸入密碼即可。比較推薦這種方式。
sudo + 命令
可以讓這條命令具有root權限。
2、解決依賴包
pache2安裝前需要先解決apache2的依賴包:否則直接安裝往往會出現apr not found
、APR-util not found
、pcre-config for libpcre not found
類似的錯誤。
arp和apr-util的下載地址在這,可以找到自己適合的版本,以下兩個地址是我安裝的版本直接下載地址。
apr-1.4.5.tar.bz2下載地址
apr-util-1.5.2.tar.bz2
3、安裝apr:
首先根剪切apr與apr-util到/usr/local/src下,然后進行解壓和編譯安裝操作
mv apr-1.4.6.tar.bz2 /usr/local/src
mv apr-util-1.5.2.tar.bz2 /usr/local/src
tar -xjvf apr-1.4.6.tar.bz2
tar -xjvf apr-util-1.5.2tar -xjvf apr-1.4.6.tar.bz2
cd apr-1.4.6
./configure --prefix=/usr/local/apr #安裝在/usr/local/下 命名為apr
make
make install
4、編譯安裝apr-util
mv apr-util-1.5.2.tar.bz2 /usr/local/src
tar -xjvf apr-util-1.5.2.tar.bz2
cd apr-util-1.5.2
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
5、pcre-devel包
httpd-2.4.4編譯過程也要依賴於pcre-devel軟件包,需要事先安裝。此軟件包系統光盤自帶,因此,找到並安裝即可。
yum -y install pcre-devel
如果沒有,這里可以下載pcre-8.31.zip
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre # (除了指定Apache的安裝目錄外,還要安裝apr、apr-util、pcre,並指定參數)
make
make install
6、安裝apache2
在解決以上依賴包之后,現在開始進行apache2的安裝。
httpd-2.4.4.tar.bz2下載地址
mv httpd-2.4.4.tar.bz2 /usr/local/src
tar -xjvf httpd-2.4.4.tar.bz2
cd httpd-2.4.4
./configure --prefix=/usr/local/apache2 --enable-module=shared
命令解釋
--enable-so:支持動態共享模塊,如果支持php將不能與apache一起工作。必須要有
--enable-ssl:啟用ssl功能,如果不啟用將無法使用https
--enable-mpms-shared=all:prefork、worker、event
--with-mpm=event:event為默認
--enable-rewrite:支持URL重寫
--enable-cgi :支持cgi
--enable-cgid:httpd使用event或者worker得啟用被線程方式訪問
--enable-modules=most :啟用大多數模塊
--enable-mods-shared=most:啟用大多數共享模塊
7、運行apache
sudo apt-get remove --purge apache apache2 # (徹底刪除)
sudo /etc/init.d/apache2 restart # 重啟
sudo /etc/init.d/apache2 start # 啟動
sudo /etc/init.d/apache2 stop # 停止
sudo makedir /home/htdocs
sudo chmod 777 /home/htdocs # 生成網站目錄,並修改權限
啟動apache后,在瀏覽器地址欄輸入localhost
即可運行。
配置apache支持cgi腳本
1、建立保存cgi腳本的文件夾,進入/var/www/
文件下,建立cgi-bi
cd /var/www
mkdir cig-bin
2、在ubuntu 18下,apache2的配置文件都在/etc/apache2下.進入/etc/apache2/mods-enabled
,打開mime.load 文件,添加模塊
LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so # 這一行是添加的
3、進入/etc/apache2/conf-enabled
,打開serve-cgi-bin.conf
,按如下修改:
以下第11行和12行是修改后的路徑,16行是新添加的。
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
AddHandler cgi-script .cgi .pl .py .sh
</Directory>
</IfDefine>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
4、重啟apache2
sudo /etc/init.d/apache2 restart
運行腳本
1、運行.sh腳本
在/var/www/cgi-bin/
文件夾建立hw0.sh
(建立命令為touch hw0.sh
),並寫入以下內容:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "hello web"
exit 0
然后賦予可執行權限:
sudo chmod a+x hw0.sh
之后在瀏覽器地址欄輸入:localhost/cig-bin/hw0.sh
即可
2、運行c腳本
在/var/www/cgi-bin/
文件夾建立hello.c
,並寫入以下內容:
#include <stdio.h>
int main()
{
printf("Content-Type: text/html\n\n");
printf("Hello, world\n");
return 0;
}
然后生成cgi文件,這里不需要賦予可執行權限。
gcc hello.c -o hello.cgi
之后瀏覽器輸入localhost/cgi-bin/hello.cgi
即可。
注意的問題
錯誤代碼404
404為找不到文件,有可能是路徑錯誤。
apache2的html默認文件夾在/etc/apche2/sites-enabled/000-default.conf
文件中DocumentRoot
即默認路徑。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
錯誤代碼500
這是我配置過程遇到最多的問題。
1、如果c腳本生成cgi可以運行,但py,sh腳本不能運行,原因可能是沒有為sh腳本賦予可執行權限
2、還有可能的原因為腳本第一行路徑不對,解決方式為找到自己的環境的路徑,具體參考我上篇文章。
至此apache環境配置完成,終於可以應用起來了,如果你在配置過程中遇到各種報錯,不要氣餒,我前前后后也是安裝了幾遍才可以,其中遇到的問題不計其數,感謝度娘。