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

配置httpd支持php目錄概要

  • httpd主配置文件/usr/local/apache2/conf/httpd.conf
  • vim /usr/local/apache2/conf/httpd.conf //修改如下4個地方
    • ServerName
    • Require all denied
    • AddType application/x-httpd-php .php
    • DirectoryIndex index.html index.php
    • /usr/local/apache2/bin/apachectl -t //測試語法
    • /usr/local/apache2/bin/apachectl start //啓動服務
    • netstat -lntp curl localhost
    • vim /usr/local/apache2/htodcs/test.php //增長以下內容
    • <?php echo 123; ?>
  • curl localhost/test.php

編輯httpd的配置文件

  • 在安裝好Apache、mysql、httpd,可是還未結合在一塊兒,雖然apche調用了php做爲它的模塊,可是還不知道是否能解析php,因此如今仍是須要編輯Apache的配置文件
  • httpd主配置文件,在/usr/local/apache2/conf/httpd.conf下
  • 編輯四個地方
  • 定義ServerName,去除 # 號
    • 在/usr/local/apache2/bin/apachectl restart 乍一看是報錯信息,其實只是一個警告信息,並非錯誤,若想不看到這個提示,能夠在 /usr/local/apache2/conf/httpd.conf 取消掉
    • 方法:在/usr/local/apache2/conf/httpd.conf 中搜索 /ServerName ,而後將 # ServerName www.example.com:80 前的# 去除掉,保存退出便可
  • 把Require all denied 改爲
    • 如果不更改,那麼訪問會是 403

第一處:取消警告信息

  • 在運行/usr/local/apache2/bin/apachectl start 會跳出警告信息
[root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf        //ctrtl+z退出下

[1]+  已中止               vim /usr/local/apache2/conf/httpd.conf
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl restart        //會看到警告信息
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::c44:f02d:4192:8d42. Set the 'ServerName' directive globally to suppress this message
[root@yong0-02 ~]# fg        //回到剛暫停的任務中——>vim /usr/local/apache2/conf/httpd.conf      

在文件中搜索 /ServerName
而後將 # ServerName www.example.com:80 前的# 去除掉保存退出便可
  • 在去除# 號以後,運行apache,會提示79行錯誤
    • 緣由:是由於在最後調用了兩個PHP,加載了兩個PHP,致使衝突
    • 解決方法:只須要註釋掉一個PHP便可
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl restart
httpd not running, trying to start
/usr/local/apache2/bin/apachectl: 行 79:  1990 段錯誤               $HTTPD -k $ARGV
  • 在註釋掉一個PHP,就會發現不提示警告信息了

[root@yong-02 ~]# /usr/local/apache2/bin/apachectl start
  • 查看httpd進程
[root@yong-02 ~]# ps aux |grep httpd
root      1995  0.1  0.6 253536 12576 ?        Ss   21:02   0:00 /usr/local/apache2/bin/httpd -k restart
daemon    2086  0.0  0.5 540364  9452 ?        Sl   21:02   0:00 /usr/local/apache2/bin/httpd -k restart
daemon    2087  0.0  0.5 540364  9452 ?        Sl   21:02   0:00 /usr/local/apache2/bin/httpd -k restart
daemon    2088  0.0  0.5 540364  9452 ?        Sl   21:02   0:00 /usr/local/apache2/bin/httpd -k restart
root      2171  0.0  0.0 112676   984 pts/0    R+   21:02   0:00 grep --color=auto httpd
  • 由於在打開了ServerName,就不在提示警告信息了

第二處:更改Require all denied

  • 首先,咱們能夠用瀏覽器訪問本身虛擬機的IP,會發現沒法訪問,則會提示檢查代理服務器和防火牆
  • 在遇到這種問題,排查方法,先查看IP是不是通的,用物理機去ping 虛擬機的 IP

  • 若IP是通的,再去判斷80端口是不是通的——>用物理機去telnet 80端口

  • 若是windows 並無打開telnet 客戶端,按照下面方法安裝這個命令
  • 打開telnet客戶端——>注意:不要打開Telnet服務端,不然會監聽23端口,不安全
  • 打開物理機的控制面板
  • 而後選擇程序
  • 再選擇打開或關閉Windows功能
  • 選擇Telnet客戶端,並打開

輸入圖片說明 

如果能夠運行 telnet 命令,那出來的則是一個結果,顯示80並不通php

  • 由於在linux虛擬機上,並無打開80端口
  • 在虛擬機上,使用iptables -nvL 命令,會查看到80端口並無打開
[root@yong-02 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  347 32935 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
  266 26673 INPUT_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  266 26673 INPUT_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  266 26673 INPUT_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
  262 26469 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
等等,只截取了一部分,會發現80端口並無打開
  • 若想要windows機器去訪問它,還須要加上一個操做
  • 單獨一條命令,臨時加上80端口——> iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@yong-02 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
  • 這時再用物理機去訪問虛擬機IP,則會顯示 It works!

  • 以前不能正常訪問,就是因爲防火牆的規則,沒有加上80端口,不能正常訪問
  • 這時打開windows來查看80端口,這樣的界面表示80端口通了

  • 在物理機中按 ctrl+] 退出來,而後在按 quit 字符退出

  • 這時刪除以前加的那條規則,再來物理機查看虛擬機的80端口,會發現不通了
[root@yong-02 ~]# iptables -D INPUT -p tcp --dport 80 -j ACCEPT

  • 這時在把規則添加上,會發現又能夠正常訪問了
  • 有時瀏覽器去訪問虛擬機的IP,會顯示 403Forbidden 錯誤界面
  • 這是由於在/usr/local/apache2/conf/httpd.conf配置文件中,有一個Require all denied
  • 而後搜索 /denied ,把他改爲granted
  • 打開/usr/local/apache2/conf/httpd.conf配置文件
[root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf

而後搜索 /denied ,會看到
<Directory />
    AllowOverride none
    Require all denied
</Directory>
把 denied 改爲 granted
  • 以前能夠在瀏覽器正常訪問虛擬機ip,是由於
[root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf

是由於DocumentRoot指定了Directory,即以下:
DocumentRoot "/usr/local/apache2/htdocs"        
<Directory "/usr/local/apache2/htdocs">


還有後面的
Require all granted

如果將這裏的Require all granted改爲Require all denied ,那確定沒法瀏覽
  • 在更改完配置文件,須要從新加載配置
  • /usr/local/apache2/bin/apachectl -t //檢查你修改的配置文件是否存在錯誤
    • -t參數,會檢查你修改的配置文件是否存在語法錯誤
  • 若語法不對,則會報錯
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
  • 從新加載配置文件
    • graceful 只會從新加載配置文件,而不會重啓你的服務
  • 就是說即便你的配置文件有問題,它最多加載不成功,而不會把你的進程殺掉
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl graceful
  • 在配置文件中的,兩處位置都應該改爲granted,這是爲了防止你在打開虛擬主機配置文件的時候,顯示403Forbidden(403是它的狀態碼,正常狀況下,狀態碼都是200)

第三處:由於要支持php,因此要增長一行php相關的配置

  • 若是不增長這一行,那麼php就沒法解析
[root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf

搜索 /AddType,而後
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz 

在這兩行下面,增長php一行
    AddType application/x-httpd-php .php

第四部分,增長一個索引頁

  • 索引頁做用:在打開一個網站,爲何不輸入index.php就能夠直接訪問呢
[root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf

搜索 /Index ,找到
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

在index.html後加 index.php
顯示爲
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>
  • 而後檢查配置文件是否有錯誤
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
  • 而後從新加載配置文件
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl graceful

檢查Apache是否支持解析php5

  • 驗證,寫一個測試php腳本
  • 在訪問的時候,訪問的是htdocs下的文件
  • phpinfo,能夠把php的相關信息打印出來
[root@yong-02 ~]# vim /usr/local/apache2/htdocs/1.php

在文件中寫入

<?php
phpinfo();
?>

而後保存退出
  • 而後在瀏覽器訪問虛擬機ip地址並添加頁面地址(IP/index.php),而後會看到顯示出內容——>增長一個文件是不須要重啓php的
http://192.168.180.135/1.php

  • 當看到php正常顯示,如上圖,那說明php支持支持解析html

  • 若是php不支持解析(以上四步驟錯誤一處),那麼刷新頁面顯示出來的則是源代碼(就是 1.php 文件中的代碼)mysql

  • 若是遇到php沒法解析,則去檢查Apache的配置文件linux

    [root@yong-02 ~]# /usr/local/apache2/bin/apachectl -M
    Loaded Modules:
     core_module (static)
     so_module (static)
     http_module (static)
     mpm_event_module (static)
     authn_file_module (shared)
     authn_core_module (shared)
     authz_host_module (shared)
     authz_groupfile_module (shared)
     authz_user_module (shared)
     authz_core_module (shared)
     access_compat_module (shared)
     auth_basic_module (shared)
     reqtimeout_module (shared)
     filter_module (shared)
     mime_module (shared)
     log_config_module (shared)
     env_module (shared)
     headers_module (shared)
     setenvif_module (shared)
     version_module (shared)
     unixd_module (shared)
     status_module (shared)
     autoindex_module (shared)
     dir_module (shared)
     alias_module (shared)
     php5_module (shared)
    [root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf
    
    在文件中搜索/libphp5,看是否加載了這一行配置
    LoadModule php5_module        modules/libphp5.so
    [root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf
    
    在文件搜索/AddType中關於php這一行配置是否存在
    AddType application/x-httpd-php .php
    [root@yong-02 ~]# ls /usr/local/apache2/htdocs/
    1.php  index.html
    • 第一項,查看是否加載php5模塊,使用/usr/local/apache2/bin/apachectl -M命令
      • 若是沒有加載這個模塊,查看這個模塊是否存在。使用 ls /usr/local/apache2/modules/libphp5.so查看文件是否存在,如果文件都沒有,那麼確定不會加載這個模塊
    • 第二項,若是有文件,則沒有顯示php模塊,那麼就要去看apache的配置文件中有沒有加載 libphp5 這一行配置,在文件中搜索/libphp5 ,若是沒有這一行配置,那麼確定也是沒法解析的
    • 第三項,檢查配置文件中是否加載了 AddType application/x-httpd-php .php 這一行
      • 在 .php 前面有一行空格,須要注意下!不能遺忘!!!——>使用 /usr/local/apache2/bin/apachectl -t 能夠檢查出配置寫錯了
    • 第四項,檢查是否加了 index.php
      • 在訪問一個網站的時候,好比訪問www.baidu.com的時候,並不用是www.baidu.com/index.php訪問,會發現,兩個訪問出的頁面是相同的,就是由於這裏有索引頁(或者叫作index頁),它默認能跳轉到這個頁面下去,包括直接輸入虛擬機ip的時候,也會訪問到 It works!這是訪問到的是 index.html ,就是由於咱們定義了一個index

檢查Apache是否支持解析php7

  • 在配置文件中,註釋掉php5,打開php7
[root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf

在文件中搜索 /libphp7,而後註釋掉php5打開php7
# LoadModule php5_module        modules/libphp5.so
LoadModule php7_module        modules/libphp7.so
  • 快捷鍵 ctrl+r ,能夠快速執行命令歷史中所用過的一些命令
    • 在快捷鍵 ctrl+r 以後,而後輸入命令的一些字母,就會顯示出你使用過的命令
  • 而後檢查配置文件是否存在語法錯誤,並從新加載配置文件
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl graceful
  • 會看到更換了php7以後,用物理機訪問虛擬機的ip,也會正常顯示

  • 在瀏覽器打開看到的phpinfo,和/usr/local/php7/bin/php -i |less看到的結果基本是一致的,只不過一個是文本形式,一個是圖形化,圖形化看起來更加直觀,清晰明瞭
[root@yong-02 ~]# /usr/local/php7/bin/php -i |less
phpinfo()
PHP Version => 7.1.6

System => Linux yong-02 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
Build Date => May 26 2018 00:00:30
Configure Command =>  './configure'  '--prefix=/usr/local/php7' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-config-file-path=/usr/local/php7/etc' '--with-pdo-mysql=/usr/local/mysql' '--with-mysqli=/usr/local/mysql/bin/mysql_config' '--with-libxml-dir' '--with-gd' '--with-jpeg-dir' '--with-png-dir' '--with-freetype-dir' '--with-iconv-dir' '--with-zlib-dir' '--with-bz2' '--with-openssl' '--with-mcrypt' '--enable-soap' '--enable-gd-native-ttf' '--enable-mbstring' '--enable-sockets' '--enable-exif'
Server API => Command Line Interface
Virtual Directory Support => enabled
Configuration File (php.ini) Path => /usr/local/php7/etc
Loaded Configuration File => (none)
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)
PHP API => 20160303
PHP Extension => 20160303
Zend Extension => 320160303
Zend Extension Build => API320160303,TS


等等等,只截取了一部分

Apache配置文件

  • 爲何能夠在htdocs下面中能夠訪問到 index.html、1.php
  • 這是由於在/usr/local/apache2/conf/httpd.conf配置文件中的 DocumentRoot 參數,定義了網站的根目錄在哪裏,域名就是定義的ServerName
[root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf

在文件中搜索/htdocs,其中DocumentRoot 定義了文件根目錄在哪裏
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">

搜索/ServerName,域名就是定義的ServerName ,只不過這個ServerName,,可使用任何一個域名去訪問它,好比可使用IP能夠訪問,使用example.com能夠訪問,用www也能夠去訪問它
ServerName www.example.com:80

 

 

httpd的默認虛擬主機目錄概要

  • 一臺服務器能夠訪問多個網站,每一個網站都是一個虛擬主機
  • 概念:域名(主機名)、DNS、解析域名、hosts
  • 任何一個域名解析到這臺機器,均可以訪問的虛擬主機就是默認虛擬主機
  • vim /usr/local/apache2/conf/httpd.conf //搜索httpd-vhost,去掉#
  • vim /usr/local/apache2/conf/extra/httpd-vhosts.conf //改成以下

<VirtualHost *:80>web

    ServerAdmin admin@aminglinux.comsql

    DocumentRoot "/data/wwwroot/aming.com"apache

    ServerName aming.comvim

    ServerAlias www.aming.comwindows

    ErrorLog "logs/aming.com-error_log"瀏覽器

    CustomLog "logs/aming.com-access_log" common

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

</VirtualHost>

  •  /usr/local/apache2/bin/apachectl –t
  • /usr/local/apache2/bin/apachectl graceful

 

## 默認虛擬主機 - 默認虛擬主機,能夠理解成Apache(也就是httpd),一個服務下面跑多了多個網站,跑了多個域名 - 例子,假如在服務器上,它既能訪問百度,又能訪問谷歌,這是兩個不一樣的網站,但同時都在一臺服務器運行着,就用了一個httpd的服務,這個就是一個網站多個域名,每個域名對着一個虛擬主機 ## 更改hosts - 在windows下去寫hosts 1. hostsl路徑地址,這個和linux下的hosts相似

1. 打開物理機C盤

2. 而後選擇Windows

3. 再選擇System32

4. 選擇dirvers

5. 選擇etc

6.選擇hosts

  • 能夠在這個裏面定義一個IP,定義一個域名,而後讓這個域名指向到這個IP上去
  • 打開方式選擇 記事本
  • 打開文件,會看到windows下的hosts

輸入圖片說明

  • 而後在hosts文件中,任何一處位置加入一行,而後保存!
  • 格式:先IP,而後空格,加域名——>域名能夠寫多個,一行裏面能夠有多個域名
    • 這個IP地址爲虛擬機的IP
192.168.180.135 www.abc.com www.123.com
  • 而後物理機去ping 網址,能看到都能ping通

  • 正常狀況下,不寫hosts,去ping——>將hosts中添加的一行註釋掉
#192.168.180.135  www.abc.com	  www.123.com
  • 而後再去物理機去ping www.abc.com,會看到IP是公網IP

  • 這個就是hosts的做用,它的目的就是讓你臨時訪問到一個服務器上去
  • 好比用www.abc.com,用www.123.com把這個域名指向到這臺機器上去——>這是在DNS尚未生效的時候使用
  • 這時候在將hosts中加入的那一行# 去掉
192.168.180.135  www.abc.com www.123.com
  • 而後用物理機中的瀏覽器去訪問www.abc.com或www.123.com,會看到正常訪問

  • 瀏覽器去訪問www.123.com/1.php,會看到正常訪問

  • 或許會有一個疑問,123.com和abc.com,包括這個IP並無在httpd的配置文件中去定義它,在配置文件中僅僅定義了 www.example.com這個域名,這個叫作Apache的默認主機 ,也就是說,任何一個域名,指向到這個 IP ,它都會訪問到這個站點,這個站點就叫作默認虛擬主機——>注意:是虛擬主機
  • 若是沒有作任何操做,僅僅使用了httpd.conf,它實際上就是主配置文件定義的這個ServerName,以DocumentRoot ,但這樣不太好管理,畢竟一臺服務器上能夠跑多個域名,若不想域名都指向到這裏,因此須要打開一個虛擬主機配置文件
  • 打開虛擬主機,在/usr/local/apache2/conf/httpd.conf 配置文件中
[root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf

搜索/extra 關鍵詞,這一行就作虛擬主機
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

把#Include conf/extra/httpd-vhosts.conf前面的 #號 去掉 Include conf/extra/httpd-vhosts.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
  • 由於配置文件僅僅能定義一個ServerName,因此如今打開一個二級配置文件
  • 二級配置文件就是虛擬主機配置文件
    • 在這個配置文件裏,是能夠定義多個ServerName的
[root@yong-02 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf           //虛擬主機配置文件

在打開配置文件,會發現有兩個<VirtualHost *:80> ,每個<VirtualHost >都是一對出現的,每個<VirtualHost >都表明着一個主機,一個主機就是一個網站

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com    //定義管理員的郵箱——>可刪除
    DocumentRoot "/usr/local/apache2/docs/dummy-host.example.com"    //定義網站的根目錄在哪裏
    ServerName dummy-host.example.com    //服務器名字
    ServerAlias www.dummy-host.example.com    //定義別名,別名就是一個網站能夠有多個域名訪問,好比能夠是abc.com訪問,也能夠是www.abc.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/apache2/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error_log"
    CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>
  • 在打開虛擬主機配置文件後,作一個更改
  • 更改後
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"   
    ServerName abc.com
    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@yong-02 ~]# mkdir /data/wwwroot/
[root@yong-02 ~]# mkdir /data/wwwroot/abc.com
[root@yong-02 ~]# mkdir /data/wwwroot/111.com
  • 在對應的站點根目錄下建立,定義一個php
[root@yong-02 ~]# vim /data/wwwroot/abc.com/index.php

在文件中寫入
<?php
echo "abc.com";

並保存退出
  • 而後在/data/wwwroot/111.com/index.php中也定義一個php
[root@yong-02 ~]# vim /data/wwwroot/111.com/index.php


在文件中寫入
<?php
echo "111.com";

並保存退出
  • 在定義完以後,去檢查服務是否有錯誤
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
  • 而後從新加載配置文件
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl graceful
  • 定義一個網站最核心的參數就是網站的根目錄在哪裏,訪問的域名是什麼,ServerName只能寫一個,而ServerAlias能夠寫多個域名

虛擬主機常識

  • 一旦讓虛擬主機配置文件生效了,那麼以前定義的www.example.com就會失效了

測試虛擬主機

  • curl -x命令
  • 好比說,如今要訪問abc,com,若不去綁定hosts,那麼在虛擬機中ping www.abc.com會ping到外網上去,並無在這臺機器上。若想要訪問abc.com在在這臺機器上,能夠編輯/etc/hosts文件去指定下,或者使用curl -x選項
[root@yong-02 ~]# curl -x192.168.180.135:80 abc.com
abc.com[root@yong-02 ~]# curl -x192.168.180.135:80 abcd.com
abc.com[root@yong-02 ~]#
  • 在訪問abcd.com,會發現訪問的仍是abc.com,這個以前不管把任何域名指向到192.168.74.129這臺機器上,都會訪問到htdocs目錄下面去,但如今發生了轉變,不管什麼域名指向過來,它都會訪問到abc.com,abc.com是咱們虛擬主機配置文件裏邊的第一個虛擬主機,它就是默認虛擬主機。
    • 默認虛擬主機,就是不管訪問什麼域名,只要解析到192.168.74.129IP上,它都會訪問這個網站對應的虛擬主機配置(這個默認虛擬主機就是abc.com)
  • 這時再來訪問www.example.com
[root@yong-02 ~]# curl -x192.168.180.135:80 www.example.com
111.com[root@yong-02 ~]#
  • 在httpd主配置文件中有定義,在Virtual hosts虛擬主機中也有定義,結果訪問到了111.com

總結

  • 在主配置文件中,httpd.conf裏面,打開了虛擬主機配置文件,也就是刪除到 # 號,那虛擬主機配置就生效了,一旦虛擬主機配置文件生效,那主配置文件裏面所定義的DocumentRoot以及ServerName失效
  • 虛擬主機配置文件一旦打開,能夠定義不少個VirtualHost,每個VirtualHost都都有一個對應的 DocumentRoot 和 ServerName ,每個VirtualHost都表明着一個站點,都是一個虛擬主機。在虛擬主機裏面有一個特殊的默認虛擬主機,所謂默認虛擬主機就是不管任何域名解析到這個IP上,都會去訪問默認虛擬主機
相關文章
相關標籤/搜索