LAMP架構PHP模塊支持與虛擬主機配置

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

Apache和PHP結合

  1. 編輯apache的主配置文件
[root@localhost ~]# 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>

修改後須要執行php

1. 檢驗配置文件正確性
/usr/local/apache2.4/bin/apachectl -t

2. 並從新加載配置文件(文件錯誤將不會殺死進程)
/usr/local/apache2.4/bin/apachectl graceful
  1. 驗證是否成功啓動
先啓動httpd
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl start

臨時開放80端口
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

打開瀏覽器,輸入服務器ip,顯示「It works!」即成功;不然有問題!

在阿里雲虛擬主機內安裝lamp架構時,須要關閉防火牆(systemctl stop firewalld),不然瀏覽器沒法訪問!

網頁打不開的解決思路:服務器ip是否可通 -> 80端口是否通(服務器是否開放該端口iptables)html

驗證apache是否解析phpapache

1. 在/usr/local/apache2.4/htdocs/目錄下新建一個index.php
輸入下面的代碼
<?php
phpinfo();
?>

2. 在瀏覽器中輸入ip/index.php,看是否顯示php的說明界面

當php沒法解析,顯示的將是源代碼vim

沒法解析php時須要檢查的內容:瀏覽器

  • apache是否加載php模塊
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -M | grep php
 php5_module (shared)
  • 檢查modules目錄下是否存在php模塊文件(php是否編譯進apache)
[root@localhost ~]# ls /usr/local/apache2.4/modules/libphp5.so 
/usr/local/apache2.4/modules/libphp5.so
  • 檢查配置文件是否加載模塊 LoadModule
[root@localhost ~]# cat /usr/local/apache2.4/conf/httpd.conf | grep libphp
LoadModule php5_module        modules/libphp5.so
  • 檢查配置文件是否加解析php代碼,有沒有寫錯
[root@localhost ~]# cat /usr/local/apache2.4/conf/httpd.conf | grep x-httpd-php
    AddType application/x-httpd-php .php
  • 檢查配置文件是否加index.php代碼,在直接輸入ip後能夠顯示默認的index.php網頁信息
[root@localhost ~]# 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默認虛擬主機

一個服務器能夠運行多個網站,每一個網站都是一個虛擬主機app

任何一個域名解析到這臺機器,均可以訪問的虛擬主機就是默認虛擬主機curl

在dns還未生效時,經過修改hosts文件,設置ip與域名的映射解析,來配置域名。tcp

開啓虛擬主機服務

vim /usr/local/apache2.4/conf/httpd.conf 
搜索httpd-vhost
# Virtual hosts
# Include conf/extra/httpd-vhosts.conf
去掉該行開始的#,保存退出

虛擬主機配置文件,配置虛擬主機

一旦讓虛擬主機配置文件生效,以前配置的默認主機將失效,須要apache模塊支持:mod_log_config

[root@localhost ~]# 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>
...
  • 建立對應的目錄
[root@localhost ~]# mkdir /data/wwwroot/
[root@localhost ~]# mkdir /data/wwwroot/abc.com
[root@localhost ~]# mkdir /data/wwwroot/111.com
[root@localhost ~]# vim /data/wwwroot/abc.com/index.php
<?php
echo "abc.com"
?php>
[root@localhost ~]# vim /data/wwwroot/111.com/index.php
<?php
echo "111.com"
?php>
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

默認虛擬主機測試

訪問任意的域名都將訪問到默認主機所對應的內容。

# 訪問指定ip、端口、域名的內容,返回結果
# 下面代碼將獲取默認主機內容
[root@localhost ~]# curl -x 192.168.65.133:80 abc.com
abc.com

# 指定特定的域名,該域名匹配了上面的第二個虛擬主機,因此顯示內容爲第二個虛擬主機所配置的內容
# 經過ServerName訪問
[root@localhost ~]# curl -x 192.168.65.133:80 111.com
111.com
# 經過ServerAlias訪問
[root@localhost ~]# curl -x 192.168.65.133:80 www.example.com
111.com
相關文章
相關標籤/搜索