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. 解決Android webview設置cookie和cookie丟失的問題2. javascript - nodejs使用mongoose連接數據庫,使用post提交表單在后臺,后臺處理后調用res.redirect()跳轉界面無效?3. javascript - vue2.0中,$refs對象為什么用駝峰的方式獲取不到屬性?4. javascript - 能否讓vue-cli的express修改express重啟服務5. Android頂部的顯示電池、wifi等信息的狀態欄在不在當前Activity的decorView中?6. java - 注解上的屬性可以傳遞嗎?7. android - 分享到微信,如何快速轉換成字節數組8. node.js - npm install全局安裝出錯,請問如何解決?謝謝!9. node.js - npm一直提示proxy有問題10. python bottle跑起來以后,定時執行的任務為什么每次都重復(多)執行一次?
