下載Apache源代碼分發版、APT方式安裝編譯器及需求庫
curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.41.tar.gz
curl -O https://downloads.apache.org/httpd/httpd-2.4.41.tar.gz.sha256
curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.gz
curl -O https://downloads.apache.org/apr/apr-1.7.0.tar.gz.sha256
curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
curl -O https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz.sha256
curl -O https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
curl -O https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz.sig
curl -O https://ftp.pcre.org/pub/pcre/Public-Key
shasum -a 256 -c httpd-2.4.41.tar.gz.sha256
shasum -a 256 -c apr-1.7.0.tar.gz.sha256
shasum -a 256 -c apr-util-1.6.1.tar.gz.sha256
gpg --import Public-Key
gpg --verify pcre-8.44.tar.gz.sig pcre-8.44.tar.gz

apt-get install gcc-8 g++-8 make libexpat1-dev libssl-dev

下載完成後一定養成習慣驗證包完整性。

編譯安裝需求庫
tar zxvf apr-1.7.0.tar.gz
cd apr-1.7.0/
./configure
make -j 8 && make install
cd ..

tar zxvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1/
./configure --with-apr=/usr/local/apr
make -j 8 && make install
cd ..

tar zxvf pcre-8.44.tar.gz
cd pcre-8.44/
./configure --prefix=/usr/local/pcre
make -j 8 && make install
cd ..

當前Ubuntu倉庫裡,APR為1.6.3版、PCRE為8.39版。本著最新原則,選擇源碼編譯。

編譯安裝多綫程事務版Apache
tar zxvf httpd-2.4.41.tar.gz
cd httpd-2.4.41/
./configure --with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--with-pcre=/usr/local/pcre \
--with-mpm=event \
--enable-mpms-shared=all \
--enable-mods-shared=all \
--enable-so=static
make -j 8 && make install

編譯採用最新的事務模式,動態加載所有模塊,高伸縮性以及兼容性。當然一個小Blog是割雞用牛刀啦。

檢查Apache是否成功安裝
cd /usr/local/apache2
echo "ServerName localhost:80" >> conf/httpd.conf
echo "Include conf/extra/httpd-mpm.conf" >> conf/httpd.conf
bin/apachectl start
bin/httpd -V
bin/httpd -M
netstat -atn
bin/apachectl stop

本地測試記得更改伺服器名稱,避免提示錯誤;
通過查看變量信息、加載模塊來確認主程序正常與否;
記得再用瀏覽器訪問看,是否顯示It Works!

下載PHP源代碼分發版、安裝需求庫
cd
wget --content-disposition -4 https://www.php.net/distributions/php-7.4.3.tar.gz
shasum -a 256 php-7.4.3.tar.gz
apt-get install libxml2-dev libsystemd-dev

ipv6地址的PHP下載伺服器好似路由有問題,每秒僅僅個位數KB。

新建PHP-FPM進程執行用戶
useradd -r -g daemon -s /bin/false -M php-fpm

默認是nobody帳號,便於ps時直觀一點,新建一個。

編譯ZTS版PHP,并且安裝
tar zxvf php-7.4.3.tar.gz
cd php-7.4.3
./configure \
--without-sqlite3 \
--without-pdo-sqlite \
--enable-fpm \
--with-fpm-systemd \
--with-fpm-user=php-fpm \
--with-fpm-group=daemon \
--with-openssl \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--enable-maintainer-zts 
make -j 8 && make install

由於使用mysqlnd驅動連結mysql, 我們就取消掉sqlite的支持。再加入systemd編譯,生成直接可用的控制腳本。

配置PHP-FPM及Apache
cd
#---配置PHP---
cp php-7.4.3/php.ini-production /usr/local/lib/php.ini
#打開短標籤方便測試PHP輸出
sed -i 's/tag = Off/tag = On/' /usr/local/lib/php.ini 
cd /usr/local/etc
cp php-fpm.conf.default php-fpm.conf
#指定FPM使用的事務機制類型
echo "events.mechanism = epoll" >> php-fpm.conf
#修改配置文件包含路徑
sed -i '/^include=NONE/d' php-fpm.conf
echo "include=/usr/local/etc/php-fpm.d/www.conf.default" >> php-fpm.conf
#監聽Unix套接字,默認監聽TCP套接字
cd /usr/local/etc/php-fpm.d/
sed -i '/listen =/d' www.conf.default
echo "listen = /var/run/php-fpm.sock" >> www.conf.default
echo "listen.group = daemon" >> www.conf.default

#---配置Apache---
cd /usr/local/apache2/conf
echo "LoadModule proxy_module modules/mod_proxy.so" >> httpd.conf
echo "LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so" >> httpd.conf
sed -i 's/index.html/index.html index.php/' httpd.conf
#TCP套接字方式
sed -i '$a <FilesMatch \.php$>' httpd.conf
sed -i '$a \    SetHandler "proxy:fcgi://127.0.0.1:9000"' httpd.conf
sed -i '$a </FilesMatch>' httpd.conf
#Unix套接字方式
sed -i '$a <FilesMatch \.php$>' httpd.conf
sed -i '$a \    SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost"' httpd.conf
sed -i '$a </FilesMatch>' httpd.conf
啓動Apache、PHP-FPM,檢查其工作狀況
php-fpm -t
php-fpm -v
php-fpm
/usr/local/apache2/bin/apachectl start
echo "<? phpinfo(); ?>" >> /usr/local/apache2/htdocs/phpinfo.php

再一次打開瀏覽器訪問http://x.x.x.x/phpinfo.php確認服務程序運行是否正常。

通過三篇講解,我們就搭建好了一台網頁伺服器。
下一篇開始講解最流行的博客平台,WordPress。期間還會教大家如何單獨編譯PHP擴展。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

This site uses Akismet to reduce spam. Learn how your comment data is processed.