1. apache
apache 需要依賴幾個模塊:apr, apr-util, pcre,也分別源碼安裝。
1.1 編譯安裝
1.1.1 apr apr-util
下載地址:http://apr.apache.org/download.cgi
分別下載解壓,然后在源碼目錄下 ./configure --prefix=xxx(apr-util 需要設置 --with-apr=[apr的安裝路徑]),然后 make && make install 即可。
1.1.2 pcre
下載地址:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
可以下載一個最新版的,然后同樣也是在源碼目錄下 ./configure --prefix=xxx && make && make install 即可。
1.1.3 httpd
官網下載地址:http://httpd.apache.org/
下載解壓后在源碼目錄下 ./configure --with-apr=[apr安裝路徑] --with-apr-util=[apr-util安裝路徑] --with-pcre=[pcre安裝路徑] --prefix=[httpd安裝路徑] && make && make install 完成安裝。
1.2 httpd服務配置啟動
cd [httpd安裝路徑]/conf,修改以下兩個配置文件:
1.2.1 httpd.conf
(1) Listen 2080 (因為我是安裝在用戶目錄下且不打算以root身份啟動,所以默認的80端口需要改為其它的)
(2) ServerName localhost (這行是為了在 httpd -k start 時不出現 warning 的提示,可以不加)
(3) 把 Include conf/extra/httpd-vhosts.conf 前的注釋去掉 (后面需要配置這個文件)
1.2.2 extra/httpd-vhosts.conf
去掉文件里原有的兩個 example 主機配置,改為如下:
<VirtualHost *:2080> DocumentRoot "/home/xxx/domain_name/" ServerName domain_name.com DirectoryIndex index.php index.html ScriptAlias /cgi_bin/ "/home/xxx/domain_name/cgi_bin/" AddHandler cgi-script .cgi .sh .py <Directory /> AllowOverride none #allow from all Require all granted </Directory> <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> ErrorLog "/home/xxx/domain_name/error.log" CustomLog "/home/xxx/domain_name/access.log" common </VirtualHost>
這個是最后更改的文件,其中有一些是 cgi 和 php 相關的配置,現階段可以省略。
1.2.3 啟動服務器
../bin/httpd -k start
然后在瀏覽器地址欄里輸入 domain_name.com:2080 看到 It works 的字眼就表示已經成功了。
1.3 cgi 配置
1.3.1 cgi module 編譯安裝
使用 apache 自帶的 apxs 工具,可以在不重新編譯 apache 的前提下,給 apache 添加模塊。apache 運行 cgi 程序需要用到2個模塊:mod_cgi.so 與 mod_cgid.so,步驟如下:
cd
[httpd源碼路徑]/modules/generators
[httpd安裝路徑]/bin/apxs
-i -a -c mod_cgi.c
[httpd安裝路徑]/bin/apxs
-i -a -c mod_cgid.c
此時查看 [httpd安裝目錄]/conf/httpd.conf 文件,可以發現 LoadModule cgid_module modules/mod_cgid.so 這一行被取消了注釋,同時增加了 LoadModule cgi_module modules/mod_cgi.so 這一行。
1.3.2 虛擬主機配置文件更改
修改 extra/httpd-vhosts.conf 文件,在 <VirtualHost > 標簽下加入:
ScriptAlias /cgi_bin/ "/home/xxx/domain_name/cgi_bin/"
AddHandler cgi-script .cgi .sh .py
然后重啟 httpd 服務器:[httpd安裝路徑]/bin/httpd -k restart(或者先stop再start)
在瀏覽器地址欄里訪問對應的cgi程序:http://domain_name.com/cgi_bin/hello.cgi 即可看到輸出信息。
2. php7
官網下載地址:http://www.php.net/downloads.php
下載最新版本(我下載的是7.2.9)的源碼並解壓,然后准備安裝。
2.1 前置准備
php 的編譯安裝稍微復雜一點,因為依賴到的庫很多,首先需要安裝一些基礎的庫,這些庫有一部分我同樣是下載源碼編譯安裝,其它的因為不太常見,同時為了避免手動編譯安裝的繁瑣就直接使用 apt install 的方式:
sudo apt install zlib1g-dev libpng-dev libjpeg-dev libfreetype6-dev
curl libxml2 openssl 這幾個庫我使用源碼來編譯安裝(因為考慮到以后也會在開發中用到)
實際上依賴到的庫可能不只這幾個,需要看后面 ./configure 的配置參數以及系統是否自帶了對應的庫。
2.1 編譯安裝
cd [php源碼目錄]
./configure --prefix=/home/xxx/php/php-7.2.9/install --with-mcrypt --with-mhash --enable-mysqlnd --with-mysqli --with-pdo-mysql --enable-fpm --with-fpm-user=mywww --with-fpm-group=mywww --with-gd --with-iconv --with-zlib --enable-xml --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-ftp --enable-gd-native-ttf --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-jpeg-dir --with-freetype-dir --enable-opcache --with-libxml-dir=/home/xxx/libxml2/libxml2-2.9.8/install --with-openssl-dir=/home/xxx/openssl/1.1.0i/install --with-curl=/home/xxx/curl/7.61.1/install && make && make install
注意把命令里各個庫的路徑替換成實際的路徑。
2.2 fpm 配置啟動
cd [php源碼目錄]
cp php.ini-production [php安裝目錄]/etc/php.ini
cp sapi/fpm/init.d.php-fpm [php安裝目錄]/sbin/ && chmod u+x [php安裝目錄]/sbin/init.d.php-fpm
cd [php安裝目錄]/etc/
cp php-fpm.conf.default php-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/mywww.conf
把mywww.conf文件中第4行的[www]改為[mywww]
./init.d.php-fpm start
netstat -antp | grep php 即可看見 php-fpm 進程在運行(fpm進程默認使用 9000 端口):
2.3 apache 的 php 配置
好了,終於來到最后也是最重要的這一步了。也是更改這兩個配置文件:
2.3.1 httpd.conf
把 LoadModule proxy_module modules/mod_proxy.so
和 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
前面的注釋去掉,這兩個是 apache 使用 fpm 方式解釋 php 文件需要打開的模塊擴展。
2.3.2 extra/httpd-vhosts.conf
添加以下幾行:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
具體位置如 1.2.2 所示。
2.3.3 重啟 httpd 服務
重啟 httpd 服務,訪問網站根目錄下任何一個 php 文件可以看到對於的解釋輸出。