首先,沒有辦法在apache中啓用兩個不同的mod_php,所以我描述了通過mod_fcgid和SUexec配置php-fastcgi的方法。另外我假設你從dotteb安裝php7.0。
首先,你需要需要安裝所需的軟件包:
# apt-get install libapache2-mod-fcgid php5-cgi php7.0-cgi apache2-suexec
然後我們需要使所需的Apache模塊和禁用不必要的:
# a2enmod suexec
# a2dismod php5
# a2dismod php7.0
之後,創建一個用戶和虛擬主機目錄:
# useradd site1 -s /sbin/nologin -d /var/www/html/site1 -m
# useradd site2 -s /sbin/nologin -d /var/www/html/site2 -m
將從這些用戶執行PHP腳本。因此,建議您使用此用戶和組擁有所有網站數據。
然後我們創建一個PHP亞軍 - 我們不能僅僅用/usr/bin/php5-cgi
,suEXEC的將它禁止由於安全方面的原因:腳本運動員應該所在的SuExec文檔根目錄裏面,它可以通過線AP_DOC_ROOT運行suexec -V
顯示
# /usr/lib/apache2/suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="www-data"
-D AP_LOG_EXEC="/var/log/apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=100
-D AP_USERDIR_SUFFIX="public_html"
此外的SuExec將檢查腳本運行的許可,所以我們把這個亞軍爲子目錄的cgi-bin(你可以將此名稱更改爲其他,它只是約定)網站的所有者主目錄:
# mkdir -p /var/www/html/site1/cgi-bin /var/www/html/site2/cgi-bin
,然後創建轉輪第一個站點(在PHP5):
# cat <<-EOF >/var/www/html/site1/cgi-bin/php
#!/bin/sh
exec /usr/lib/cgi-bin/php5
EOF
你也可以指定其他環境參數(通過導出環境變量,如PHP_FCGI_MAX_REQUESTS
)爲PHP或特定的PHP。INI
再來說第二個網站(含PHP7):
# cat <<-EOF >/var/www/html/site2/cgi-bin/php
#!/bin/sh
exec /usr/lib/cgi-bin/php7.0
EOF
集可執行旗腳本參賽者:
# chmod 755 /var/www/html/site2/cgi-bin/php /var/www/html/site1/cgi-bin/php
文檔根目錄和測試腳本:
# mkdir -p /var/www/html/site1/data /var/www/html/site2/data
# echo -e "<?php\nphpinfo();" > /var/www/html/site1/data/test.php
# echo -e "<?php\nphpinfo();" > /var/www/html/site2/data/test.php
套裝網站文件的所有權:
# chown -R site1:site1 /var/www/html/site1
# chown -R site2:site2 /var/www/html/site2
最後,我們創建虛擬主機爲這兩個網站,首先爲現場1:
# cat <<EOF > /etc/apache2/sites-available/site1.conf
<VirtualHost *:80>
ServerName site1.example.com
DocumentRoot "/var/www/html/site1.data"
<IfModule mod_fcgid.c>
SuexecUserGroup site1 site1
<Directory /var/www/html/site1/data>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/html/site1/cgi-bin/php .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
</VirtualHost>
EOF
,然後站點2
# cat <<EOF > /etc/apache2/sites-available/site2.conf
<VirtualHost *:80>
ServerName site2.example.com
DocumentRoot "/var/www/html/site2/data"
<IfModule mod_fcgid.c>
SuexecUserGroup site2 site2
<Directory /var/www/html/site2/data>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/html/site2/cgi-bin/php .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
</VirtualHost>
EOF
然後就能夠通過a2ensite site1
和a2ensite site2
點,最後重新啓動Apache: systemctl restart apache2
。如果一切正常 - 阿帕奇應成功啓動,您可以檢查這臺主機通過瀏覽器都有不同版本的PHP或者只是捲曲curl -s -H 'Host: site1.example.com' http://localhost/test.php
如果出亂子,你總是可以檢查systemctl status apache
(輸出的情況下,如果Apache不啓動)或/var/log/apache2/suexec.log
(如果您看到500內部服務器錯誤)或/var/log/apache2/error.log(如果出現通用錯誤)。
希望這將有助於
我懷疑這是可能的,你應該使用像碼頭工人的解決方案,看到這個鏈接,例如:http://stackoverflow.com/questions/32195108/docker-run-apache-on-主機和容器爲不同的網站 – AntoineB
謝謝,但我的意思是設置在虛擬主機和同步工作php5&php7。可能嗎? –
你想在一臺虛擬主機上切換php版本,或者有幾個不同的php版本的虛擬主機?你想用什麼PHP引擎 - mod_php,php-fpm或php-cgi/fastcgi? –