輕鬆配置httpd的虛擬主機

来源:http://www.cnblogs.com/f-ck-need-u/archive/2017/10/06/7632878.html
-Advertisement-
Play Games

httpd使用VirtualHost指令進行虛擬主機的定義。支持三種虛擬主機:基於ip,基於埠和基於名稱。其中基於埠的虛擬主機在httpd的術語上(例如官方手冊)也屬於基於IP的。 當一個請求到達時,將首先匹配虛擬主機。匹配虛擬主機的規則為最佳匹配法。所謂最佳,是指通配的越少,匹配的優先順序越高。 ...


httpd使用VirtualHost指令進行虛擬主機的定義。支持三種虛擬主機:基於ip,基於埠和基於名稱。其中基於埠的虛擬主機在httpd的術語上(例如官方手冊)也屬於基於IP的。

當一個請求到達時,將首先匹配虛擬主機。匹配虛擬主機的規則為最佳匹配法。所謂最佳,是指通配的越少,匹配的優先順序越高。例如"192.168.100.14:80"的優先順序高於"*:80"。如果基於名稱的虛擬主機無法匹配上,則採用虛擬主機列表中的第一個虛擬主機作為響應主機。如果所有虛擬主機都無法匹配上,則採用從主配置段落中的主機,如果主配置段落中註釋了DocumentRoot,則返回對應的錯誤。

主配置段落的指令基本上都能使用在虛擬主機容器中。至於虛擬主機中必須配有什麼指令,這沒有規定,因為虛擬主機只是封裝一組指令而已,即使其中沒有任何指令,它也會從主配置段落中繼承。但是,既然要使用且已經使用了虛擬主機,按照常理來說,至少得提供不同的ServerName,DocumentRoot等指令以讓它們各自獨立。

最後需要說明的是,httpd的"-S"選項在調試虛擬主機配置選項時非常有用。

1 基於IP的虛擬主機

基於IP的虛擬主機是在不同的IP+PORT上提供不同的站點服務,最常見的是在不同埠上提供不同站點。

如果僅基於IP,即使用不同IP地址,那麼要求操作系統上有兩個或更多IP地址,可以提供多個網卡,或者通過網卡別名來實現。

如果基於埠,即使用不同埠,則使用相同IP或不同IP均可,但在httpd術語中,基於單個IP但不同埠的虛擬主機,也是基於IP的虛擬主機。

假設本機為192.168.100.14。

# 首先設置個虛擬網卡。
shell> ip a add 192.168.100.144 dev eth0 label eth0:0

# 添加基於IP地址的虛擬主機,DocumentRoot使用的相對路徑,基於ServerRoot
shell> vim /etc/apache/extra/vhosts.conf

<VirtualHost 192.168.100.14:80>
    ServerName www.a.com
    DocumentRoot htdocs/a.com
</VirtaulHost>

<VirtualHost 192.168.100.144:80>
    ServerName www.b.com
    DocumentRoot htdocs/b.com
</VirtaulHost>

在主配置文件中,將該虛擬主機配置文件vhosts.conf包含進去。

include /etc/apache/extra/vhosts.conf

再提供DocumentRoot和各自的index.html。

mkdir /usr/local/apache/htdocs/{a.com,b.com}
echo '<h1>a.com<h1>' >/usr/local/apache/htdocs/a.com/index.html
echo '<h1>b.com<h1>' >/usr/local/apache/htdocs/b.com/index.html

使用httpd -S查看配置文件載入過程。

[root@xuexi httpd-2.4.27]# httpd -S -f /etc/apache/httpd.conf 
VirtualHost configuration:
192.168.100.14:80      www.a.com (/etc/apache/extra/vhosts.conf:23)
192.168.100.144:80     www.b.com (/etc/apache/extra/vhosts.conf:28)
ServerRoot: "/usr/local/apache"
Main DocumentRoot: "/usr/local/apache/htdocs"
Main ErrorLog: "/usr/local/apache/logs/error_log"
Mutex proxy: using_defaults
Mutex default: dir="/usr/local/apache/logs/" mechanism=default 
PidFile: "/usr/local/apache/logs/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="daemon" id=2
Group: name="daemon" id=2

重啟httpd。

service httpd restart

測試。

2 基於埠的虛擬主機

基於埠的虛擬主機需要監聽兩個套接字。

首先在配置文件中使用Listen指令修改監聽套接字,這裡假設只基於埠,所以只需修改埠號即可。

listen 80
listen 8080

修改虛擬主機配置文件vhosts.conf文件如下:

shell> vim /etc/apache/extra/vhosts.conf

<VirtualHost 192.168.100.14:80>
    ServerName www.a.com
    DocumentRoot htdocs/a.com
</VirtaulHost>

<VirtualHost 192.168.100.14:8080>
    ServerName www.b.com
    DocumentRoot htdocs/b.com
</VirtaulHost>

重啟httpd。測試www.a.com和www.b.com能否顯示。

3 基於名稱的虛擬主機

請求報文中獲取資源時包含了兩部分資源定位的格式:TCP/IP協議和HTTP協議,雖然TCP/IP部分相同,但是HTTP協議的請求報文中指定了HOST,這就是基於功能變數名稱的虛擬主機能實現的原因。也因此,基於名稱的虛擬主機必須指定ServerName指令,否則它將會繼承操作系統的FQDN。

shell> vim /etc/apache/extra/vhosts.conf

<VirtualHost 192.168.100.14:80>
    ServerName www.a.com
    DocumentRoot htdocs/a.com
</VirtaulHost>

<VirtualHost 192.168.100.14:80>
    ServerName www.b.com
    DocumentRoot htdocs/b.com
</VirtaulHost>

註意,對於基於名稱的虛擬主機,當使用IP地址請求(例如瀏覽器中輸入的是IP地址),或者無法匹配到任何虛擬主機時,將採用第一個虛擬主機作為預設虛擬主機。

例如,當某個hosts文件中添加了"192.168.100.14 www.c.com"時,即使在配置文件中並沒有配置www.c.com的虛擬主機,但訪問時仍然會訪問虛擬主機列表的第一個。

回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html

回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html

轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7632878.html

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文示例可見一斑了,主要是通過Java對SQL語句進行操作,和普通的增刪改查的原理是一樣的: 註:參考鏈接:http://blog.csdn.net/sd4015700/article/details/39668583 ...
  • 這個問題是因為在資料庫伺服器中的mysql資料庫中的user的表中沒有許可權(也可以說沒有用戶),下麵將記錄我遇到問題的過程及解決的方法。 在搭建完LNMP環境後用Navicate連接出錯 遇到這個問題首先到mysql所在的伺服器上用連接進行處理 1、連接伺服器: mysql -u root -p 2 ...
  • 0.目錄 1. "前言" 2. "通過SSMS添加數據" 3. "通過SQL語句添加數據" 3.1 "添加單條數據" 3.2 "添加多條數據" 4. "通過其他表導入數據" 4.1 "通過資料庫中的其他表導入數據" 4.2 "通過excel表導入數據" 1.前言 增刪改查都是對數據的操作,其中“增” ...
  • 1. CUDA Toolkit的安裝 到https://developer.nvidia.com/cuda-gpus查詢GPU支持的CUDA版本: 到https://developer.nvidia.com/cuda-downloads,根據操作系統選擇下載相應的CUDA Toolkit版本,下載的 ...
  • 通過SSMS設置主鍵外鍵,使用SQL語句分別在建表中和建表後設置主鍵外鍵 ...
  • 0.目錄 1. "前言" 2. "建立資料庫" 2.1 "通過SSMS建立資料庫" 2.2 "通過SQL語句建立資料庫" 3. "建立表" 3.1 "通過SSMS建立表" 3.2 "通過SQL語句建立表" 1.前言 配置是win10+SQL Server 2012,使用的GUI管理工具是SQL Se ...
  • 說明 本文寫於2017 10 03,使用MySQL 5.7,操作系統為64位 Debian GNU/Linux 8.6 (jessie)。 安裝 因apt倉庫將mysql相關的包移除,需要自己去官網下載之,以及相關的依賴包。 在安裝mysql community server時,會提示輸入MySQL ...
  • 一、基本的sql語句 CRUD操作:create 創建(添加)read 讀取update 修改delete 刪除1、添加數據insert into Info values('p009','張三',1,'n001','2016-8-30 12:9:8') ; 給特定的列添加數據insert into ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...