概念介紹php
一、apache server 是一個流行的http服務器。對應的可執行軟件是httpd 和 apachectl。httpd提供http服務,apachectl控制httpd的執行。html
二、CGI 即 Common Gateway Interface, 是apache server 上程序和http交互的協議,在多種語言上都有實現,因此你在apache服務器上能夠運行perl、php、python等腳本。apache默認提供的是文旦內容,即訪問服務上的資源時,獲得的是一個純文本文檔。CGI讓程序可以提供動態網頁內容。python
三、FCGI, Fast CGI ,是CGI的改進版,性能比CGI好。web
四、apache能夠加載動態模塊,FCGI就是用於給apache加載的一個動態庫。apache要加載哪些模塊,是在配置文件中設置的。apache
五、在apache上使用CGI運行腳本的時候,須要給腳本文件設置可執行權限,不然被認爲是服務器異常,http返回500狀態碼,日誌中輸出: Permission denied: AH01241: exec of '/usr/local/bin/apache/cgi-bin/printenv' failed。bash
六、APR 、 APR-UTIL 安裝運行apache軟件須要的環境服務器
七、Perl 一個腳本語言app
環境搭建
ide
一、安裝apache server性能
進入download頁下載壓縮文件。解壓後是沒法直接安裝的。須要下載 APR 、 APR-UTIL 並解壓到apache的srclib目錄下。文件層級以下
以後執行下面的命令,把其中的PREFIX替換成安裝目錄
$ ./configure --prefix=PREFIX $ make $ make install $ sudo PREFIX/bin/apachectl start
安裝後的apache服務默認監聽的端口是80,監聽這個端口須要使用root權限。你能夠在config/httpd.config文件中修改要監聽的端口:Listen 8081。
apachectl start啓動服務後,訪問 http://localhost:8081/ 能夠看到 It Works頁面,說明apache 正常啓動了。此時apache只提供文檔內容,尚未配置CGI交互能力。
二、apache基本配置
apache的配置文件使用xml格式,默認配置文件是config/httpd.config。
apache按目錄進行配置。<Directory> 標籤用來配置某一個目錄的信息。下面的配置表示設置/usr/local/bin/apache/htdocs目錄的訪問權限對全部ip公開(Require all granted ,2.4版本之前使用Allow指令設置,2.4之後的版本不能使用Allow 指令),表示設置該目錄的子目錄不能夠重寫配置(AllowOverride None),表示該目錄下的能夠進行的操做有顯示列表(Indexes),訪問鏈接文件(FollowSymLinks)。
<Directory "/usr/local/bin/apache/htdocs"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
apache默認輸出的日誌不多,你須要在http.config中把LogLevel修改成下面的內容來打印更多的信息。若是不修改,下面提到的一些日誌你是看不到的。
LogLevel debug
三、CGI模塊安裝 和 apache 配置CGI功能 (以Perl爲例)
從apache官網下載模塊mod_fcgid,解壓後執行:
./configure.apxs make make install
安裝好以後,apache的modules目錄下應該有modules/mod_cgid.so文件。在http.config文件中增長配置:LoadModule cgid_module modules/mod_cgid.so,從而使得apache能加載CGI模塊。
http.config中默認有下面的配置: 它表示給/usr/local/bin/apache/cgi-bin/路徑設置一個別名 /cgi-bin/ 即 可使用 http://localhost:8081/cgi-bin/test-cgi 形式的地址訪問/usr/local/bin/apache/cgi-bin/下的test-cgi資源。Alias指令也是設置別名,不一樣的是ScriptAlias下的資源會當作腳原本執行。
ScriptAlias /cgi-bin/ "/usr/local/bin/apache/cgi-bin/"
修改配置後,直接重啓apache是不能運行腳本的。從error.log中能夠看到對應的錯誤提示。
一、第一個錯誤是腳本執行權限錯誤。由於/cgi-bin目錄下的腳本默認只有讀寫權限,直接訪問會致使http 500錯誤,此時error.log中會輸出 Permission denied: AH01241: exec of '/usr/local/bin/apache/cgi-bin/printenv' failed。
二、第二個錯誤是腳本格式錯誤。此時error.log中提示:Exec format error: AH01241: exec of '/usr/local/bin/apache/cgi-bin/printenv' failed。須要在腳本頭中添加#!/bin/bash #!/usr/bin/perl 等,用來代表使用哪個解釋器來執行腳本。
三、若是你執行perl腳本,還有可能看到這條日誌: can't locate fcgi.pm in @inc。它代表你的perl缺乏CGI模塊。能夠按照perl官網的提示下載安裝。
最終在apache上經過CGI訪問腳本的效果以下:
四、配置php腳本的CGI
首先從apache官網下載mod_fcgid模塊,解壓後執行下面的命令進行安裝:
./configure.apxs make make install
httpd.conf 中設置.php 處理器
AddHandler fcgid-script .php
安裝後在apache的modules目錄下會出現 mod_fcgid.so 。此時在httpd.config 中配置加載mod_fcgid.so( )
LoadModule fcgid_module modules/mod_fcgid.so <IfModule fcgid_module> FcgidBusyTimeout 3600 </IfModule>
若是遇到這個異常 Can't locate FCGI.pm in @INC,請安裝prel的FCGI模塊(從perl官網安裝)
給腳本目錄配置處理器 SetHandler fcgid-script
<Directory "/usr/local/bin/apache/cgi-bin"> #AddHandler fcgid-script .php SetHandler fcgid-script AllowOverride None Options None Require all granted </Directory>
給php腳本添加可執行權限 chmod u+x *.php 。此時訪問php腳本能夠看到腳本提供的動態網頁內容。腳本和效果以下:
<?php phpinfo() ?>
若是你遇到這個錯誤(mod_fcgid: error reading data),請按照下面的內容配置httpd.config
Alias /webroot/ /Users/k/webroot/ <Location /webroot/> AddHandler fcgid-script .php Options +ExecCGI FcgidWrapper /Users/k/weblib/php-wrapper .php # Customize the next two directives for your requirements. Order allow,deny Allow from all </Location> <Directory "/Users/k/webroot"> AddHandler fcgid-script .php AllowOverride None #Options None Options +ExecCGI Require all granted </Directory>
安裝WordPress
配置好apache和php cgi以後,直接下載WrodPress並解壓到apache訪問目錄,設置腳本的可執行權限。
配置目錄索引頁支持index.php
<IfModule dir_module> DirectoryIndex index.html index.php </IfModule>
以後訪問WordPress資源,就能夠看到WordPress的安裝頁了,效果入下:
按照WordPress的安裝引導完成設置後,你可能遇到這個錯誤(php JIT compilation failed: no more memory in):解決的辦法是找到php的配置文件php.ini 按照下面的內容修改。
把 ;pcre.jit=1 改爲 pcre.jit=0 注意刪除前面的逗號