1. 程式人生 > >LAMP架構PHP模組支援與虛擬主機配置

LAMP架構PHP模組支援與虛擬主機配置

11月14日任務 11.14/11.15 Apache和PHP結合 11.16/11.17 Apache預設虛擬主機  

Apache和PHP結合

  1. 編輯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
  1. 驗證是否成功啟動
先啟動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