apache虛擬主機
問題描述
最近在研究虛擬主機,然后我配置了兩個虛擬主機,如下
其中一個的ServerName設置為127.0.0.1 。然后再C盤的hosts文件里面增加
那么問題來了。我在瀏覽器直接輸入www.abc.com時候會訪問到E:/wamp/crm這個項目,為什么呢?在hosts里面www.abc.com不是對應127.0.0.1嗎,不是應該訪問E:/wamp/wamp/www這個項目嗎?然后我在瀏覽器直接輸入127.0.0.1的時候訪問的是E:/wamp/wamp/www這個項目?就是這里搞不懂。。。。請大神搭救搭救。。。。。。
問題解答
回答1:官方文檔在此:An In-Depth Discussion of Virtual Host Matching
你這個屬于“Name-based vhost”,就看這一段好了:
If there are multiple VirtualHost directives listing the IP addressand port combination that was determined to be the best match, the'list' in the remaining steps refers to the list of vhosts thatmatched, in the order they were in the configuration file.
我來簡單翻譯,在vhost IP和端口吻合的情況下(就是你這里的*:80),apache會根據vhost配置文件中vhost的先后順序依次進行匹配.
If the connection is using SSL, the server supports Server NameIndication, and the SSL client handshake includes the TLS extensionwith the requested hostname, then that hostname is used below justlike the Host: header would be used on a non-SSL connection.Otherwise, the first name-based vhost whose address matched is usedfor SSL connections. This is significant because the vhost determineswhich certificate the server will use for the connection.
如果是SSL連接,會根據TLS握手信息里面的SNI尋找主機名。如果不支持SNI,就匹配給第一個IP和端口(這里指的還是 *:80)吻合的vhost.
If the request contains a Host: header field, the list is searched forthe first vhost with a matching ServerName or ServerAlias, and therequest is served from that vhost. A Host: header field can contain aport number, but Apache always ignores it and matches against the realport to which the client sent the request.
如果HTTP頭部有Host信息,則匹配給第一個和ServerName或者ServerAlias吻合的虛擬主機。有的時候Host會包含端口信息,Apache不會鳥這個端口。
The first vhost in the config file with the specified IP address has the highest priority and catches any request to an unknown server name, or a request without a Host: header field (such as a HTTP/1.0 request).
如果都沒匹配上,扔給第一個IP端口(指的還是你的那個*:80)吻合的vhost
你訪問的abc.com是第一個crm那個么?不是, 是127.0.0.1么(只有地址欄直接輸入127.0.0.1才算)? 不是,那就走默認的,也就是第一個crm的配置。
回答2:個人感覺serverName沒啥用,所以你這個按優先適配原則,按80端口就直接是第一條規則。你要真想掛倆站點,用端口號區分就好了~另外也可以看看文檔。中文文檔推薦譯者:金步國的。
回答3:域名是用來解析為IP的,所以兩個都是127.0.0.1而你的兩個端口同樣是80,只能訪問第一個了
你把下面的的改為8080,用8080端口訪問第二個
相關文章:
1. javascript - js 有什么優雅的辦法實現在同時打開的兩個標簽頁間相互通信?2. html5和Flash對抗是什么情況?3. javascript - 怎樣限制同一個瀏覽器不能登錄兩個賬號4. java - 新手做一個安卓視頻播放器,想實現一個進度條,按鈕那種在視頻下方懸浮的功能,不知道思路!5. css3 - Typecho 后臺部分表單按鈕在 Chrome 下出現靈異動畫問題,求解決6. javascript - angular和jquery都用到了$符號,一起用會不會沖突?7. java - android代碼重構:如何把app設置里的頭像UI做成通用的?8. 想找個php大神仿個網站。9. javascript - 一個抽獎的效果(如圖)?10. javascript - jquery怎么給select option一個點擊時觸發的事件,如圖 如果選擇自定義觸發一個時間?
