Python+Apache+CGI徹底配置

http://www.tuicool.com/articles/jIZfaqQphp

操做系統環境:Ubuntu 15.10html

0.需求緣由java

想在個人Linux上架設Apache來運行CGI程序,方便之後用Apache部署Python的Web應用,但遇到各類各樣的問題,網上找的答案要麼都太舊了(4/5年前跟如今已經差不少了),要麼就不完整,因此這裏總結一下,做爲最新版本吧。python

1.Apache安裝linux

採用的是源碼編譯安裝的形式。首先要說明的是,要成功安裝Apache,須要依次安裝完下面的軟件(函數庫)纔算是成功地安裝了Apache:web

(1)apr安裝sql

下載地址: http://apr.apache.org/shell

注意這個網站上有兩個相應的軟件下載,一個是apr,另一個是下面將要安裝的apr-util,因爲英文名字看起來太容易混淆,因此必定要看清楚下載的是哪一個。這裏我下載的是: apr-1.5.2.tar.gzapache

第一步:解包瀏覽器

xpleaf@leaf:~/下載$ tar xvf apr-1.5.2.tar.gz ...... apr-1.5.2/mmap/win32/ apr-1.5.2/mmap/win32/mmap.c apr-1.5.2/apr-config.in

第二步:運行configure檢測和設置編譯選項

xpleaf@leaf:~/下載/apr-1.5.2$ ./configure ...... config.status: creating include/arch/unix/apr_private.h config.status: executing libtool commands rm: cannot remove 'libtoolT': No such file or directory config.status: executing default commands

正常狀況下是沒有問題的,若是出現問題,能夠自行查找,這個好解決。

第三步:編譯和安裝

xpleaf@leaf:~/下載/apr-1.5.2$ make ...... xpleaf@leaf:~/下載/apr-1.5.2$ sudo make install ......

OK,這樣的話,apr就安裝完成了。

(2)apr-util安裝

下載地址跟上面的是同樣的,這裏我下載的版本是: apr-util-1.5.4.tar.gz

apr-util安裝的步驟跟上面的差很少,不過有一步要注意的, 就是在執行./configure命令的時候須要指定apr的安裝目錄 :

xpleaf@leaf:~/下載/apr-util-1.5.4$ ./configure
......
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed Applying apr-util hints file rules for x86_64-unknown-linux-gnu checking for APR... no configure: error: APR could not be located. Please use the --with-apr option. #注意看上面的報錯提示

先找到apr的安裝目錄:

xpleaf@leaf:~/下載/apr-util-1.5.4$ whereis apr apr: /usr/local/apr

再添加相應參數執行apr-util的./configure命令:

xpleaf@leaf:~/下載/apr-util-1.5.4$ ./configure --with-apr=/usr/local/apr ...... config.status: creating test/Makefile config.status: creating include/private/apu_config.h config.status: executing default commands

這樣的話預編譯就算完成了,再執行下面的make和sudo make install:

xpleaf@leaf:~/下載/apr-util-1.5.4$ make xpleaf@leaf:~/下載/apr-util-1.5.4$ sudo make install

OK,這樣的話,apr-util的安裝也完成了。

(3)pcre安裝

這不是必需的,前提是你的系統原來已經安裝了它的庫,若是尚未安裝的話,在你編譯Apache的時候就會出現下面的錯誤提示:

configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

因此若是你也出現了這樣的狀況,請先下載安裝pcre。

下載地址: http://sourceforge.net/projects/pcre/files/pcre/

這裏我下載的版本是: pcre-8.38.tar.gz

安裝步驟跟上面的同樣,並且這裏也不會出現什麼問題,直接給出步驟好了:

xpleaf@leaf:~/下載$ tar zxvf pcre-8.38.tar.gz xpleaf@leaf:~/下載/pcre-8.38$ ./configure xpleaf@leaf:~/下載/pcre-8.38$ make xpleaf@leaf:~/下載/pcre-8.38$ sudo make install

pcre也安裝完以後,下面就能夠真正安裝Apache了。

(4)Apache安裝

在上面的三個軟件安裝完成以後,這下面纔開始安裝Apache.

下載地址: http://httpd.apache.org/download.cgi

我下載的版本是: httpd-2.4.18.tar.gz

a.安裝   

只要上面的幾步完成了,安裝apache就比較容易了,依次執行下面的命令就能夠了。

xpleaf@leaf:~/下載$ tar zxvf httpd-2.4.18.tar.gz xpleaf@leaf:~/下載/httpd-2.4.18$ ./configure --enable-module=shared xpleaf@leaf:~/下載/httpd-2.4.18$ make xpleaf@leaf:~/下載/httpd-2.4.18$ sudo make install

b.參數說明

須要注意的是,若是在執行./configure時沒有指定apache的安裝目錄,默認是安裝在 /usr/local/apache2 ,你也能夠經過下面的方式來查看它的安裝目錄:

xpleaf@leaf:~$ whereis apache2 apache2: /usr/local/apache2

另外,上面在執行./configure時添加了 -enable-module=shared 參數,即 經過把模塊編譯成動態共享對象,讓Apache啓動時動態加載,這樣之後須要加載新模塊時,只需在配置文件中設置便可 。固然,爲了這樣的便捷性而損失必定的性能是否值得,我的衡量。因此這個參數你不加也是沒有問題的。

c.沒法啓動的解決方案

安裝完成後,就能夠啓動了,由於採用的是編譯安裝,因此須要用下面的方式啓動:

xpleaf@leaf:~$ sudo /usr/local/apache2/bin/apachectl start /usr/local/apache2/bin/httpd: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

可是你會發現又報錯了,並且報的錯爲: 沒法加元libpcre.so.1庫函數 。

libpcre.so.1 ,很熟悉的名字,前面不是已經安裝了?確實是安裝的,只是Apache沒有找到它而已,查看一下:

xpleaf@leaf:~$ ldd /usr/local/apache2/bin/httpd 
    linux-vdso.so.1 =>  (0x00007ffdf9fe6000) libpcre.so.1 => not found libaprutil-1.so.0 => /usr/local/apr/lib/libaprutil-1.so.0 (0x00007f8192a47000) libapr-1.so.0 => /usr/local/apr/lib/libapr-1.so.0 (0x00007f8192813000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f81925f5000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f819222b000) libexpat.so.0 => /usr/local/apr/lib/libexpat.so.0 (0x00007f8192002000) libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f8191dca000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8191bc6000) /lib64/ld-linux-x86-64.so.2 (0x00005637a587b000)

這時咱們把pcre對應的該庫函數軟件連接到 /lib 目錄就能夠了:

xpleaf@leaf:~$ sudo ln -s /usr/local/lib/libpcre.so.1 /lib

下面再啓動試試:

xpleaf@leaf:~$ sudo /usr/local/apache2/bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

OK,這時再打開瀏覽器,經典的"It works"顯示出來了:

這樣的話,Apache的安裝也算是完成了,下面就說說CGI的配置。

2.CGI配置

Apache支持CGI配置,下面就來詳細說明配置的過程。

找到安裝Apache的目錄 /usr/local/apache2/conf ,並對 httpd.conf 配置文件進行修改,以下面的說明:

(1)加載cgi模塊

大概在httpd.conf的137行:

#LoadModule cgid_module modules/mod_cgid.so

去掉註釋:

LoadModule cgid_module modules/mod_cgid.so

(2)設置cgi腳本文件路徑

大概在httpd.conf的329行:

ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

能夠看到apache將"/usr/local/apache2/cgi-bin/"映射爲/cgi-bin/,即當你經過瀏覽器訪問/cgi-bin/目錄時,實際上就是訪問"/usr/local/apache2/cgi-bin/"目錄,爲了方便,我將其設置爲以下:

ScriptAlias /cgi-bin/ /home/xpleaf/Source_Code/cgi_for_py/

注意這裏 路徑末尾必定要加/ ,不然apache是沒法打到該路徑下的文件的。

(3)設置cgi路徑的訪問權限

大概在httpd.conf195行:

<Directory /> AllowOverride none Require all denied </Directory>

將上面的內容所有修改成下面的內容:

<Directory "/home/xpleaf/Source_Code/cgi_for_py/"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory>

注意這裏的目錄是修改成前面咱們改的:/home/xpleaf/Source_Code/cgi_for_py/

這樣的修改是有緣由的,若是沒有在這裏設置權限,當你在瀏覽器中訪問你的cgi腳本文件時,獲得的多是這樣的提示:

Forbidden

(4)設置apache可解釋python的cgi腳本文件

大概在httpd.conf的386行:

#AddHandler cgi-script .cgi

去掉註釋,將其修改成:

AddHandler cgi-script .cgi .py

加上.py後,就能夠解釋python的腳本文件了,若是你須要解釋shell的腳本文件,能夠添加.pl,其它的相似。

OK,完成上面的4步以後,CGI配置就算完成了。不過在配置完成以後,咱們須要重啓一下Apache服務:

xpleaf@leaf:/usr/local/apache2/conf$ sudo /usr/local/apache2/bin/apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

3.添加CGI腳本文件

(1)建立cgi腳本文件

在/home/xpleaf/Source_Code/cgi_for_py/目錄下添加下面一個文件,並命名爲hello.py:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

print "Content-type:text/html"
print
print '<html>' print '<head>' print '<title>Hello</title>' print '</head>' print '<body>' print '<h2>Hello Word! This is my first CGI program</h2>' print '</body>' print '</html>'

注意 #!/usr/bin/env python 必定要加上,不然會出現500錯誤提示。   

(2)設置cgi腳本文件的文件權限爲755    

xpleaf@leaf:~/Source_Code/cgi_for_py$ chmod 755 hello.py xpleaf@leaf:~/Source_Code/cgi_for_py$ ls -l hello.py -rwxr-xr-x 1 xpleaf xpleaf 289 1月 31 16:02 hello.py

此步很是很是重要 ,若是忘記這步,不管你怎麼找配置文件也找不出錯誤,就算看代碼也不會發現有錯誤,而後經過瀏覽器訪問時會一直顯示500錯誤,因此必定要記得該步操做!   

4.經過瀏覽器訪問cgi腳本文件

直接在瀏覽器中輸入 localhost/cgi-bin/hello.py 或 127.0.0.1/cgi-bin/hello.py 就能夠訪問咱們的cgi腳本文件了:

終於能夠了!

Ok,那麼到這裏就結束了,若是是徹底按照上面的操做來進行的話,相信是不會有太大的問題的,只是要注意的細節問題比較多。固然確定不會跟我這裏的狀況徹底同樣,由於這還取決於你所使用的環境,這裏個人操做系統是:Ubuntu 15.10,因此仍是僅提供參考。

但願幫到有須要的朋友。

相關文章
相關標籤/搜索