LAMP架構PHP模組支援與虛擬主機配置
阿新 • • 發佈:2018-11-25
Apache和PHP結合
- 編輯apache的主配置檔案
[[email protected] ~]# vim /usr/local/apache2.4/conf/httpd.conf 編輯一下內容: 1. ServerName 預設被註釋掉了 # ServerName www.example.com:80 2. 有時會顯示403 forbidden <Directory /> AllowOverride none Require all denied </Directory> Require all denied 改為 Require all granted 3. php相關配置(解析PHP) AddType application/x-httpd-php .php <IfModule dir_module> DirectoryIndex index.html index.php </IfModule>
修改後需要執行
1. 檢驗配置檔案正確性
/usr/local/apache2.4/bin/apachectl -t
2. 並重新載入配置檔案(檔案錯誤將不會殺死程序)
/usr/local/apache2.4/bin/apachectl graceful
- 驗證是否成功啟動
先啟動httpd [[email protected] ~]# /usr/local/apache2.4/bin/apachectl start 臨時開放80埠 [[email protected] ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT 開啟瀏覽器,輸入伺服器ip,顯示“It works!”即成功;否則有問題! 在阿里雲虛擬主機內安裝lamp架構時,需要關閉防火牆(systemctl stop firewalld),否則瀏覽器無法訪問!
網頁打不開的解決思路:伺服器ip是否可通 -> 80埠是否通(伺服器是否開放該埠iptables)
驗證apache是否解析php
1. 在/usr/local/apache2.4/htdocs/目錄下新建一個index.php
輸入下面的程式碼
<?php
phpinfo();
?>
2. 在瀏覽器中輸入ip/index.php,看是否顯示php的說明介面
當php無法解析,顯示的將是原始碼
無法解析php時需要檢查的內容:
- apache是否載入php模組
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -M | grep php
php5_module (shared)
- 檢查modules目錄下是否存在php模組檔案(php是否編譯進apache)
[[email protected] ~]# ls /usr/local/apache2.4/modules/libphp5.so
/usr/local/apache2.4/modules/libphp5.so
- 檢查配置檔案是否載入模組 LoadModule
[[email protected] ~]# cat /usr/local/apache2.4/conf/httpd.conf | grep libphp
LoadModule php5_module modules/libphp5.so
- 檢查配置檔案是否加解析php程式碼,有沒有寫錯
[[email protected] ~]# cat /usr/local/apache2.4/conf/httpd.conf | grep x-httpd-php
AddType application/x-httpd-php .php
- 檢查配置檔案是否加index.php程式碼,在直接輸入ip後可以顯示預設的index.php網頁資訊
[[email protected] ~]# cat /usr/local/apache2.4/conf/httpd.conf | grep -C1 index.php
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
對配置檔案的操作後最好使用apachectl -t進行檢驗
apache啟動小問題
執行apachectl start啟動apache時出現下列錯誤的原因是安裝了2個版本的php,主配置檔案內模組都啟動了,需要註釋掉其中一個,這樣才能正常啟動!
/usr/local/apache/bin/apachectl: 行 79: 2391 段錯誤 $HTTPD -k $ARGV
apache預設虛擬主機
一個伺服器可以執行多個網站,每個網站都是一個虛擬主機
任何一個域名解析到這臺機器,都可以訪問的虛擬主機就是預設虛擬主機
在dns還未生效時,通過修改hosts檔案,設定ip與域名的對映解析,來配置域名。
開啟虛擬主機服務
vim /usr/local/apache2.4/conf/httpd.conf
搜尋httpd-vhost
# Virtual hosts
# Include conf/extra/httpd-vhosts.conf
去掉該行開始的#,儲存退出
虛擬主機配置檔案,配置虛擬主機
一旦讓虛擬主機配置檔案生效,之前配置的預設主機將失效,需要apache模組支援:mod_log_config
[[email protected] ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
...
<VirtualHost *:80>
# DocumentRoot定義網站的根目錄
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
# ServerAlias定義出ServerName之前其他的域名
ServerAlias www.abc.com www.123.com
ErrorLog "logs/abc.com-error_log"
CustomLog "logs/abc.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
...
- 建立對應的目錄
[[email protected] ~]# mkdir /data/wwwroot/
[[email protected] ~]# mkdir /data/wwwroot/abc.com
[[email protected] ~]# mkdir /data/wwwroot/111.com
[[email protected] ~]# vim /data/wwwroot/abc.com/index.php
<?php
echo "abc.com"
?php>
[[email protected] ~]# vim /data/wwwroot/111.com/index.php
<?php
echo "111.com"
?php>
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl graceful
預設虛擬主機測試
訪問任意的域名都將訪問到預設主機所對應的內容。
# 訪問指定ip、埠、域名的內容,返回結果
# 下面程式碼將獲取預設主機內容
[[email protected] ~]# curl -x 192.168.65.133:80 abc.com
abc.com
# 指定特定的域名,該域名匹配了上面的第二個虛擬主機,所以顯示內容為第二個虛擬主機所配置的內容
# 通過ServerName訪問
[[email protected] ~]# curl -x 192.168.65.133:80 111.com
111.com
# 通過ServerAlias訪問
[[email protected] ~]# curl -x 192.168.65.133:80 www.example.com
111.com