Apache和PHP結合 、Apache默認虛擬主機

Apache和PHP結合

  • 當使用/usr/local/apache/bin/apachectl restart 重啓Apache時 ,會出現
[root@localhost ~]# /usr/local/apache/bin/apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
httpd not running, trying to start

這樣的提示,這不是報錯,而是一個警告信息,提示沒有設置servernamephp

  • vim /usr/local/apache/conf/httpd.conf 文件,搜索ServerName ,將這行行首的「#」去掉。
ServerAdmin you@example.com

#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80            刪掉該行行首的「#」
  • 在修改了httpd.conf以後可使用 /usr/local/apache/bin/apachectl -t來檢測配置文件的語法是否有錯。
[root@localhost ~]# /usr/local/apache/bin/apachectl -t
Syntax OK
  • 從新加載一下Apache的配置文件/usr/local/apache/bin/apachectl graceful,再重啓Apache就不會顯示上面的警告了。
  • 在修改完配置文件,重啓Apache服務時,若是出現報錯,有多是由於咱們同時啓用了PHP5和PHP7,在配置文件中註釋掉一行就好了。
  • 在配置文件httpd.conf中,將Require all denied 改成Require all granted 不然在瀏覽器訪問時會提示403
  • 檢查80端口是否開啓,能夠在Windows運行telnet 192.168.254.131 80 發現端口沒開
  • iptables -I INPUT -p tcp --dport 80 -j ACCEPT 配置防火牆,將80端口打開,再使用瀏覽器訪問該ip,成功訪問。

讓Apache支持PHP解析

  • 在httpd.conf中搜索AddType,而後增長一行AddType application/x-httpd-php .php才能解析PHP
  • 增長索引頁,在httpd.conf中搜索Index ,在index.html後面加上index.php
  • 檢測語法是否有錯。 /usr/local/apache/bin/apachectl -t
  • 從新加載配置文件 /usr/local/apache/bin/apachectl graceful
  • 編輯一個頁面,網頁默認路徑爲/usr/local/apache/htdocs。 vim /usr/local/apache/htdocs/index.php
  • 使用瀏覽器訪問 192.168.254.131/index.php,成功訪問,該頁面表示Apache解析PHP成功。若是不能成功解析PHP的話,訪問該頁面只會顯示源代碼。

排錯思路 Apache不能解析PHP排錯思路

  • 檢查Apache配置文件httpd.conf ,有沒有加載PHP模塊 /usr/local/apache/bin/apachectl -M
  • 若未加載PHP模塊,則須要看看modules目錄下是否有PHP模塊文件 ls /usr/local/apache/modules/libphp
  • 如有模塊文件,再去httpd.conf中 檢查是否有LoadModule php5_module modules/libphp5.so這一行配置
  • 而後在查看是否在配置文件 中添加過 AddType application/x-httpd-php .php這行內容。

默認虛擬主機

Apache 默認存放網頁根目錄DocumentRoot "/usr/local/apache/htdocs",意思就是在默認狀況下一臺服務器只能跑一個網站,可是實際狀況是一臺服務器上面能夠跑多個站點,一個站點就是一個虛擬主機。html

如何讓一臺機器跑多個站點?

  • 修改httpd.conf 搜索extra,找到virtual hosts 將下面一行#Include conf/extra/httpd-vhosts.conf的#刪掉,保存退出。
  • vim /usr/local/apache/conf/extra/httpd-vhosts.conf 編輯虛擬主機配置文件
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/usr/local/apache/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error_log"
    CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/usr/local/apache/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error_log"
  • 兩段<VirtualHost *:80>開頭的代碼表明兩個主機
  • 編輯 ServerAdmin webmaster@dummy-host.example.com 這一行沒意義,能夠刪掉
  • DocumentRoot "/tmp/abc.com" 這一行指定網頁的根目錄
  • ServerName abc.com指定域名
  • ServerAlias www.abc.com www.2323.com 指定域名別名,能夠指定多個
  • ErrorLog "abc.com_log" 指定錯誤日誌名
  • CustomLog "abc.com" common 指定訪問日誌名
<VirtualHost *:80>
    DocumentRoot "/tmp/abc.com"
    ServerName abc.com
    ServerAlias www.abc.com www.2323.com
    ErrorLog "abc.com_log"
    CustomLog "abc.com_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/tmp/ccc.com"
    ServerName ccc.com
    ServerAlias www.ccc.com
    ErrorLog "ccc.com_log"
    CustomLog "ccc.com_log" common
</VirtualHost>
  • 要測試須要根據DocumentRoot "/tmp/abc.com"chuan建立相應的目錄,編輯相應的網頁
  • 改一下Windows的hosts文件,使用瀏覽器訪問

相關文章
相關標籤/搜索