centos7上配置apache不一樣域名多版本php共存

說一下原由,有臺aliyun服務器,上一年剛用的時候使用lnmp一鍵安裝包,選擇安裝了apache(2.4)、mysql(5.6)、php(5.6)。php

最近想升級php版本,由於舊版php(5.6)我還要繼續用,直接升級的話確定有些代碼不兼容(例如composer下載來使用的類庫)想多版本Php能夠一塊兒使用,我裝的是lamp,問題來了,只有lnmp能夠多版本,因此發生下面的事情html

lnmp官網說明

因此目前狀況是我要在apache配置多版本。上網努力地搜了一下,基本都是在nginx或者iis上配置多版本php,不符合個人需求。其實也找到一些在apache上配置多版本php的文章,按個人理解和操做沒有一篇能完成的,多是我理解能力差或者技術菜吧。我是集合了多篇文章裏的要點和折磨了一天慢慢理解出來,最後才完成apache上配置多版本php。技術上只是一個小學生,若是有錯誤的地方麻煩指出來,感激涕零。mysql

一、下載php7.3
由於下載很慢,使用kxsw瞬間搞掂
我是直接在 php官網 下載而後扔到服務器上的。nginx

image

固然也可使用命令sql

cd /
wget https://www.php.net/distributions/php-7.3.20.tar.gz

二、解壓apache

tar -xzvf php-7.3.20.tar.gz

三、配置一些編譯前的參數segmentfault

cd php-7.3.20
  
./configure '--prefix=/usr/local/php7.3' '--with-config-file-path=/usr/local/php7.3/etc' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-gd' '--with-iconv' '--with-zlib' '--enable-xml' '--enable-bcmath' '--enable-shmop' '--enable-sysvsem' '--enable-inline-optimization' '--enable-mbregex' '--enable-fpm' '--enable-mbstring' '--enable-ftp' '--enable-gd-native-ttf' '--with-openssl' '--enable-pcntl' '--enable-sockets' '--with-xmlrpc' '--enable-zip' '--enable-soap' '--with-pear' '--with-gettext' '--enable-session' '--with-mcrypt' '--with-curl' '--with-libzip=/usr/local/libzip-1.3.2' '--disable-fileinfo'

**--prefix=/usr/local/php7.3,等號後面的是你接下來安裝的路徑,按需填寫。
--enable-fpm這個參數須要留意一下。是按照php-fpm方式安裝。
對應的參數是--with-apxs2=/usr/local/apache/bin/apxs,等號前是使用模塊的方式安裝,等號後面是填寫對應apache的路徑。--enable-fpm和--with-apxs2=PATH模式,二者只能取其一,參數填寫了--enable-fpm就不要--with-apxs2,後者直接安裝在了apache中,會隨着apache的啓動而啓動。**服務器

**提早說一下後面編譯裏出現了兩個問題:
3.一、提示libzip版本過低,若是有這種問題出現,具體能夠上網查。無非就是從新下載安裝。重點就是要在上面內容里加上對應的參數,例如個人是libzip版本低就加上 --with-libzip=/usr/local/libzip-1.3.2
3.二、提示內存不足。我機器是2G。因此提早加上 --disable-fileinfo**session


四、編譯和安裝php7

make && make install

通常等個10來20分鐘就完成了。視機器配置而定。

五、下載與編譯安裝mod_fcgid
安裝Apache的mod_fcgid模塊 mod_fcgid模塊能夠實現Apache下多版本php同時運行。能夠自行上網找
我是會用的是2.3.9版本 壓縮包格式是gz

cd /
tar -zxvf mod_fcgid-2.3.9.tar.gz
cd mod\_fcgid-2.3.9
APXS=/usr/local/apache/bin/apxs      ./configure.apxs
make
make install

安裝好以後找到apache裏的httpd.conf(lamp默認是/usr/local/apache/conf)文件
大概150行左右,就是LoadModule加載模塊最後一行,添加

LoadModule fcgid_module modules/mod_fcgid.so

其實上面編譯安裝後就會自動添加了,不用動手操做,在此記錄下來。

六、多域名多版本php配置(就是在這裏卡了一下)
網上不少資料和文章都是在apache的httpd.conf添加相似如下的代碼
,而後重啓apache。重啓後直接死掉,php沒法解析

#加載fcgid擴展模塊(額外說明,fcgid根據實際apache版本對應,apache2版本測試2.3.6正常) 
LoadModule fcgid\_module modules/mod\_fcgid.so 
#添加映射 
AddHandler fcgid-script .fcgi .php 
# 設置PHP\_FCGI\_MAX\_REQUESTS大於或等於FcgidMaxRequestsPerProcess,防止php-cgi進程在處理完全部請求前退出 
FcgidInitialEnv PHP\_FCGI\_MAX\_REQUESTS 1000 
#php-cgi每一個進程的最大請求數 
FcgidMaxRequestsPerProcess 1000 #php-cgi最大的進程數 
FcgidMaxProcesses 3 
#最大執行時間 
FcgidIOTimeout 120 
FcgidIdleTimeout 120 
#限制最大請求字節 (單位b) 
FcgidMaxRequestLen 2097152 
AddType application/x-httpd-php .php 
#------這裏是默認虛擬主機配置 
#php.ini的存放目錄 
FcgidInitialEnv PHPRC "D:/php5.4.4/" 
#php-cgi的路徑 
FcgidWrapper "D:/php5.4.4/php-cgi.exe" .php

後來想到這裏的配置是全部域名都調用的,換個法子。去到須要升級成7.3php版本的域名下(lamp默認是/usr/local/apache/conf/vhost)填寫紅框內的內容。
image

爲了方便複製

#映射fcgi執行腳本
AddHandler fcgid-script .fcgi .php
#設置PHP_FCGI_MAX_REQUESTS大於或等於FcgidMaxRequestsPerProcess,防止php-cgi進程 在處理完全部請求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#php-cgi每一個進程的最大請求數
FcgidMaxRequestsPerProcess 520
#最大執行時間
FcgidIOTimeout 300
#最大空閒時間
FcgidIdleTimeout 300
#限制最大請求字節
FcgidMaxRequestLen 2097152
#php程序最大文件上傳限制50MB,默認只有2MB
MaxRequestLen 52428800
#php安裝路徑
FcgidInitialEnv PHPRC "/usr/local/php7.3/"
#php-cgi腳本執行路徑
FcgidWrapper "/usr/local/php7.3/bin/php-cgi" .php


#這裏要注意是填寫在<Directory></Directory>裏
Options FollowSymlinks ExecCGI

最後Options裏的FollowSymlinks ExecCGI記得添加。不填寫ExecCGI,php運行不了。FollowSymlinks不填寫,一些項目裏的直接進不去,就是打開鏈接報錯,說目錄沒有權限訪問。
最後重啓apache就搞定了。能夠在腳本輸入phpinfo();打開鏈接訪問就好了。
image
能夠看到連接的.cn和.com是不一樣域名但訪問的是同一份文件。

有參考過的文章:
https://my.oschina.net/u/2366984/blog/809833
https://www.cnblogs.com/sky-view/p/5112888.html
https://my.oschina.net/u/2366984/blog/543148
https://blog.51cto.com/12529218/2313761
https://www.osyunwei.com/archives/10174.html

相關文章
相關標籤/搜索