php學習 (第六天)

虛擬主機

一.什么是虛擬主機?

1.1 概念

  • 虛擬主機(Web Hosting)

  • 英文:Web Hosting / Shared Hosting

  • 核心概念: 一臺服務器被切分給多個用戶,每個人只使用服務器的一部分資源(CPU、內存、帶寬、存儲),用于部署網站。

  • 通俗的講 虛擬主機就是將計算機中不同文件夾進行不同命名,然后可以實現讓服務器(Apache)根據用戶的需求從不同文件夾(網站)中讀取不同內容

  • 個人理解 虛擬主機就是把一臺服務器“切開”給很多人用,就好像在一個大房子里隔出很多房間,每個人都有一個屬于自己的小空間,可以放網站文件、圖片、代碼等。服務器軟件(例如 Apache、Nginx)會根據訪問的 域名 或 端口,去不同的“房間”里找對應的內容返回給用戶。

1.2 特點:

  • 多個網站共享同一臺物理服務器的資源
  • 用戶權限受限制(通常不能隨意安裝系統或軟件)
  • 管理簡單,一般只需上傳網站文件即可
  • 成本低,適合小型網站或個人博客

例子:

  • 你買的便宜空間,在 cPanel 里上傳 HTML/PHP 文件,別人也在同一臺服務器上開空間

適合對象:

  • 個人網站、小型公司官網、電商初創網站

1.3 虛擬主機可以分成哪幾種類型?

在Apache中,可以將虛擬主機分成兩種

1. 基于 IP 的虛擬主機(IP-based Virtual Host)
  • 概念
    一臺服務器可以綁定多個 IP 地址,每個 IP 地址對應一個網站。用戶訪問某個 IP 時,Apache 會根據這個 IP 來確定應該返回哪個網站的內容。
  • 原理
    • 一般電腦默認只有一個網卡 → 一個 IP 地址。
    • 但服務器通常可以配置多個網卡,或者在同一個網卡上綁定多個 IP。
    • Apache 通過監聽不同的 IP 地址,將請求分發到對應的網站目錄。
  • 優點
    • 配置直觀、兼容性好。
    • 早期 SSL(HTTPS)環境下必須使用這種方式(因為當時還沒有 SNI 技術)。
  • 缺點
    • 每個網站需要單獨的 IP,資源浪費,成本高。
    • 在 IPv4 地址緊缺的情況下,幾乎不會大規模使用。
  • 示例配置

    <VirtualHost 192.168.1.10:80>ServerName site1.comDocumentRoot "/var/www/site1"
    </VirtualHost><VirtualHost 192.168.1.11:80>ServerName site2.comDocumentRoot "/var/www/site2"
    </VirtualHost>
    

補充:IP地址和IP

IP(internet Protocol) 協議 定義了地址的格式、長度、使用規則(比如 IPv4 是 32 位,IPv6 是 128 位),以及數據包如何在網絡中傳輸。

IP 地址 就是按照這個協議規范生成的一個唯一標識。

所以每個 IP 地址都遵循 IP 協議,才能在網絡上被正確識別和路由。

2. 基于域名的虛擬主機(Name-based Virtual Host)
  • 一臺電腦上一個IP,一個IP下可以制作多個網站,但需要給每個網站不同名字(虛擬主機名)
  • 多個網站共享同一個 IP,Apache 通過 域名(Host 頭部) 來區分訪問的是哪個網站。

  • 特點

    • 節省 IP 地址(一個 IP 可以跑很多網站)。
    • 現代網站普遍采用這種方式。
    • 對 HTTPS(SSL)曾有過限制,但隨著 SNI 技術,現在也能支持多域名 SSL。
  • 示例配置

    <VirtualHost *:80>ServerName site1.comDocumentRoot "/var/www/site1"
    </VirtualHost><VirtualHost *:80>ServerName site2.comDocumentRoot "/var/www/site2"
    </VirtualHost>
    

二.實操

2.1 Homebrew Apache 配置基于域名虛擬主機的完整示例

前提
  • 已經通過 Homebrew 安裝 Apache:
brew install httpd
  • Apache 配置文件路徑:
    • Intel 芯片:/usr/local/etc/httpd/httpd.conf
    • M1/M2 芯片:/opt/homebrew/etc/httpd/httpd.conf
  • 默認 Homebrew Apache 監聽 8080 端口(可以改成 80,但需要 sudo)。

1. 修改 hosts 文件(本機域名映射)
sudo nano /etc/hosts
  • sudo

    • 全稱 “superuser do”
    • 讓你以 管理員權限(root) 執行后面的命令
    • 因為 /etc/hosts 文件是系統文件,普通用戶沒有權限修改,所以必須加 sudo
  • nano

    • 一個終端下的 文本編輯器,簡單易用
    • 用它可以打開文件、編輯內容、保存退出
    • 還有其他編輯器可用,比如 vivim
  • /etc/hosts

    • 是系統的 本地域名映射文件

    • 作用:把域名(例如 site1.local)映射到 IP(例如 127.0.0.1

    • 當你訪問一個域名時,系統會先查這個文件,看是否有對應 IP,再去 DNS 查詢

添加:

127.0.0.1   site1.local
127.0.0.1   site2.local

請添加圖片描述

2. 創建網站目錄
mkdir -p ~/Sites/site1
mkdir -p ~/Sites/site2# 添加測試首頁
echo "<h1>Site 1</h1>" > ~/Sites/site1/index.html
echo "<h1>Site 2</h1>" > ~/Sites/site2/index.html

指令解釋:

  • mkdir

    • 全稱 “make directory”

    • 用來 創建一個新目錄(文件夾)

  • -p 參數

  • 全稱 “parents”

  • 作用:如果上級目錄不存在,會 自動創建上級目錄

3.啟用虛擬主機功能

編輯 Homebrew Apache 配置文件:

nano /usr/local/etc/httpd/httpd.conf   # Intel
# 或者
nano /opt/homebrew/etc/httpd/httpd.conf  # M1/M2
  1. 啟用虛擬主機配置
    找到:
#Include /usr/local/etc/httpd/extra/httpd-vhosts.conf

去掉 #

Include /usr/local/etc/httpd/extra/httpd-vhosts.conf
  1. 設置主機名解析
    確認 ServerName 已設置:
ServerName localhost:8080

請添加圖片描述

4. 配置虛擬主機文件

編輯 /usr/local/etc/httpd/extra/httpd-vhosts.conf(或對應路徑):

這里m2 是/opt/homebrew/etc/httpd/extra/httpd-vhosts.conf

默認配置:

請添加圖片描述

配置含義:
1.VirtualHost *:8080> ... </VirtualHost>
  • 作用:定義一個虛擬主機塊,Apache 監聽 *(所有 IP)和 8080 端口的請求。
  • 原理* 表示可以接收任意網卡的請求,端口必須匹配 Apache 當前監聽的端口。
2.ServerAdmin webmaster@site1.local
  • 作用:定義網站管理員郵箱。
  • 原理:當網站出錯(500/404 等)時,Apache 可以在錯誤頁顯示這個郵箱,方便用戶聯系管理員。
  • 原理點:這是 元信息,不會影響請求匹配,但便于運維。
3.DocumentRoot "/Users/你的用戶名/Sites/site1"
  • 作用:虛擬主機的網頁根目錄。
  • 原理:Apache 根據訪問的虛擬主機,把 HTTP 請求映射到這個目錄下的文件。
  • 本質:虛擬主機是目錄映射 + 域名匹配的組合。
4.ServerName site1.local
  • 作用:定義這個虛擬主機的主域名。
  • 原理:Apache 根據 HTTP 請求中的 Host 頭部匹配 ServerName,找到對應網站
5.ServerAlias www.site1.local
  • 作用:定義別名,可以匹配多個域名。
  • 原理:如果用戶訪問別名,也會指向同一個 DocumentRoot
6.<Directory "/Users/你的用戶名/Sites/site1"> ... </Directory>
  • 作用:設置目錄訪問權限和選項。
  • 各項原理
    • Options Indexes FollowSymLinks
      • Indexes:如果目錄沒有 index.html,允許顯示文件列表
      • FollowSymLinks:允許 Apache 跟隨符號鏈接訪問文件
    • AllowOverride All
      • 允許目錄下的 .htaccess 文件覆蓋配置
    • Require all granted
      • 允許所有用戶訪問此目錄(重要,否則會 403 禁止訪問)
7.ErrorLogCustomLog
  • ErrorLog:記錄錯誤日志(例如 404、500),便于排查問題
  • CustomLog:記錄訪問日志(誰訪問了哪個頁面),常用格式 common
  • 原理:日志是 Apache 內部模塊通過路徑寫入文件,便于運維和調試。
實操配置如下:

請添加圖片描述

5. 設置目錄權限
sudo chown -R $(whoami):_www ~/Sites
chmod -R 755 ~/Sites

Apache 并不強制網站目錄必須在 /var/www,它可以訪問任何你配置的 DocumentRoot 目錄,只要:

  1. Apache 進程有權限讀取目錄和文件
    • Homebrew Apache 在 macOS 上通常以 _www 用戶運行
    • _www 用戶必須有 讀權限(和目錄執行權限)才能訪問你的 HTML/PHP 文件
  2. 目錄權限和所有權設置正確
    • 如果你的網站目錄在桌面或 ~/Sites 下,默認權限可能是:
      • 所有者:你自己
      • 組:staff
      • 權限:700 或 755
    • Apache 可能沒有權限訪問,導致 403 Forbidden
拆解sudo chown -R $(whoami):_www ~/Sites:

1.sudo

以管理員權限執行命令,因為普通用戶可能沒有權限修改其他用戶或系統目錄的所有權。

2.chown

全稱 “change owner”

用于修改文件或目錄的 所有者(owner)和所屬組(group)

3.-R

Recursive(遞歸)

表示命令會作用于該目錄及其所有子目錄和文件

4.$(whoami)

代表當前登錄用戶

用命令替換,將當前用戶名填入,例如 user

5.:_www

冒號前是所有者(owner),冒號后是所屬組(group)

_www 是 macOS 系統默認的 Web 服務組,Apache 屬于這個組

6.~/Sites

指要修改的目錄路徑

~ 代表當前用戶主目錄

拆解chmod -R 755 ~/Sites:

1.chmod

全稱 “change mode”

用于修改文件或目錄的 權限

2.-R

遞歸修改該目錄及其所有子文件和子目錄

3.755

權限數字表示法:

  • 第一個數字 7 → 所有者權限:讀?+寫(w)+執行(x) = 7
  • 第二個數字 5 → 所屬組權限:讀?+執行(x) = 5
  • 第三個數字 5 → 其他用戶權限:讀?+執行(x) = 5

4.~/Sites

指要修改權限的目錄

6.重啟 Apache
brew services restart httpd

7. 測試
  • 瀏覽器訪問:
http://site1.local:8080  → 顯示 Site 1
http://site2.local:8080  → 顯示 Site 2
8.注意

如果想用 80 端口,需要修改 httpd.conf

Listen 80

并用 sudo brew services restart httpd 啟動。

  1. 如果 Homebrew Apache 和系統自帶 Apache 沖突,建議停止系統 Apache:
sudo apachectl stop
  1. 以后要添加新虛擬主機,只要在 httpd-vhosts.conf 增加一個 <VirtualHost> 塊即可,并更新 /etc/hosts

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/923636.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/923636.shtml
英文地址,請注明出處:http://en.pswp.cn/news/923636.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AcousticsML聲學機器學習翻譯教程二(特征提取Feature Etraction)

源自&#xff1a;https://github.com/RAMshades/AcousticsM 特征提取 特征是可測量的屬性&#xff0c;作為系統的輸入。這些輸入與特定數據樣本相關&#xff0c;機器學習模型可通過解讀這些特征來提供預測。特征通常具有獨立性&#xff0c;并能提供樣本的具體細節。音頻特征示例…

【論文閱讀】Beyond Text: Frozen Large Language Models in Visual Signal Comprehension

本論文研究了能否利用一個“凍結”的LLM&#xff0c;直接理解視覺信號&#xff08;即圖片&#xff09;&#xff0c;而不用在多模態數據集上進行微調。核心思想是把圖片看作一種“語言實體”&#xff0c;把圖片轉換成一組離散詞匯&#xff0c;這些詞匯來自LLM自己的詞表。為此&a…

The Oxford-IIIT寵物圖像識別數據集(753M)

0、引言博主研究生期間做的是人工智能領域相關的深度學習模型研究&#xff0c;早期還沒定題的時候調研了大量方向。眾所周知&#xff0c;模型性能的好壞很大程度上依賴于數據集&#xff0c;因此我當時也接觸了大量數據集&#xff0c;這陣子將這些數據集匯總整理了一下&#xff…

jdbc DAO封裝及BaseDAO工具類

DAO概念 DAO&#xff1a;Data Access Object&#xff0c;數據訪問對象。 Java是面向對象語言&#xff0c;數據在Java中通常以對象的形式存在。一張表對應一個實體類&#xff0c;一張表的操作對應一個DAO對象&#xff01; 在Java操作數據庫時&#xff0c;我們會將對同一張表的增…

大模型應用開發2-SpringAI實戰

SpringAI整合了大多數大模型&#xff0c;而且對于大模型開發的三種技術架構都有比較好的封裝和支持&#xff0c;開發起來非常方便。不同的模型能夠接收的輸入類型、輸出類型不一定相同。SpringAI根據模型的輸入和輸出類型不同對模型進行了分類&#xff1a; 大模型應用開發大多…

TDengine 時序函數 DIFF 用戶手冊

DIFF 函數用戶手冊 函數概述 DIFF 函數用于計算數據列中相鄰兩行數據的差值&#xff0c;通常用于分析數據的變化趨勢和增量。該函數特別適用于監控智能電表數據的變化模式。 語法 SELECT DIFF(column_name [, ignore_negative]) FROM table_name;參數說明 column_name: 數…

清除gradle緩存的某個依賴

要清除 Gradle 緩存中的某個特定依賴&#xff0c;可以按照以下步驟操作&#xff1a;找到依賴在緩存中的路徑 Gradle 緩存的默認位置&#xff1a; Windows: C:\Users\<用戶名>\.gradle\caches\modules-2\files-2.1 macOS/Linux: ~/.gradle/caches/modules-2/files-2.1 路徑…

機器人控制器開發(驅動層——伺服驅動canopen的sdo和pdo)

文章總覽 一、核心區別&#xff1a;一句話概括 ? ??SDO&#xff08;服務數據對象&#xff09;??&#xff1a;像 ??“問詢/設置”??。用于??點對點、非周期??的參數配置和讀取。例如&#xff0c;設置電機增益、讀取當前位置等。??速度慢&#xff0c;但確保數據準…

返利APP排行榜數據實時更新:基于 WebSocket 與 Redis 的高并發數據推送技術

返利APP排行榜數據實時更新&#xff1a;基于 WebSocket 與 Redis 的高并發數據推送技術 大家好&#xff0c;我是阿可&#xff0c;微賺淘客系統及省賺客APP創始人&#xff0c;是個冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在返利APP運營中&#xff0c;用戶對排…

[論文閱讀] 人工智能 + 軟件工程 | 告別冗余HTML與高算力消耗:EfficientUICoder如何破解UI2Code的token難題

告別冗余HTML與高算力消耗&#xff1a;EfficientUICoder如何破解UI2Code的token難題 論文信息信息類別具體內容論文原標題EfficientUICoder: A Dual-Modal Token Compression Framework for UI-to-Code Generation with Multimodal Large Language Models論文鏈接https://arxiv…

【STM32項目開源】STM32單片機智能語音風扇控制系統

目錄 一、設計背景和意義 1.1設計背景&#xff1a; 1.2設計意義&#xff1a; 二、實物展示 三、硬件功能介紹 2.1 硬件清單&#xff1a; 2.2 功能介紹&#xff1a; 四、軟件設計流程圖 五、硬件PCB展示 六、軟件主函序展示 七、單片機實物資料 資料獲取 查看主頁介…

git clone vllm

這個錯誤不是 vLLM 本身的問題&#xff0c;而是 pip 在 clone GitHub 倉庫時失敗了&#xff1a; error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush after ref listing根因通常是&#xff1a; 網絡問題&#xff08;訪問 GitHub 被中斷 / 代理…

光譜相機的新興領域應用

光譜相機在?新興領域?的應用正快速拓展&#xff0c;結合?AI、納米技術、量子傳感?等前沿科技&#xff0c;突破傳統檢測極限。以下是六大最具潛力的新興應用方向及技術突破點&#xff1a;?1. 元宇宙與數字孿生??應用場景?&#xff1a;?虛擬材質建模?&#xff1a;通過高…

深入理解數據結構之復雜度

文章目錄1.數據結構前言1.1 數據結構1.2 算法2.算法效率2.1 復雜度的概念2.2 復雜度的重要性3.1 大O的漸進表式法3.2 時間復雜度計算示例3.2.1 示例13.2.2 示例23.2.3 示例33.2.4 示例43.2.5 示例53.2.6 示例63.2.7 示例74.空間復雜度4.1 空間復雜度計算示例4.1.1 示例14.1.2 示…

【Vue3】10-編寫vue項目時,ref的應用(2)

合集篇&#xff1a; 1.【Vue3】創建并運行一個簡易的Vue3項目 2.【Vue3】編寫vue實現一個簡單效果&#xff0c;并使用setup糖簡化代碼 目錄refref 定義對象類型的響應式數據1. 概念理解a. 概念b. 分析2. 代碼實操代碼場景步驟一&#xff1a;導入ref步驟二&#xff1a;修改數據形…

clickhouse 中SUM(CASE WHEN ...) 返回什么類型?

文章目錄clickhouse 中SUM(CASE WHEN ...) 返回什么類型&#xff1f;CASE WHENSUM(CASE WHEN ...) 返回什么類型&#xff1f;clickhouse 中SUM(CASE WHEN …) 返回什么類型&#xff1f; CASE WHEN ClickHouse中的CASE WHEN用法與SQL標準中的用法基本相同&#xff0c;用于實現…

【算法】C語言多組輸入輸出模板

在 C語言 里&#xff0c;“多組輸入輸出”是很多在線評測系統&#xff08;OJ&#xff09;常見的模式&#xff0c;通常有兩種情況&#xff1a;1. 輸入到文件結束&#xff08;EOF&#xff09;比如題目沒有告訴有多少組數據&#xff0c;就需要一直讀直到輸入結束。#include <st…

【Ubuntu】sudo apt update出現E :倉庫***沒有Release文件

【Ubuntu】sudo apt update出現E &#xff1a;倉庫***沒有Release文件 1 問題描述 在執行sudo apt update更新一下軟件包時出現了如下報錯 E: 倉庫***沒有Release 文件。 N: 無法安全地用該源進行更新&#xff0c;所以默認禁用該源。 N:參見apt-secure&#xff08;8&#xf…

全球后量子遷移進展:區域特色與產業落地差異

一、量子威脅具象化&#xff1a;從技術風險到產業沖擊量子計算對傳統密碼體系的威脅已從理論走向現實&#xff0c;其破壞性不僅體現在算法破解效率的飛躍&#xff0c;更滲透到數據全生命周期的安全防護中。以金融領域為例&#xff0c;2024 年國際安全機構模擬實驗顯示&#xff…

貪心算法應用:決策樹(ID3/C4.5)詳解

Java中的貪心算法應用&#xff1a;決策樹&#xff08;ID3/C4.5&#xff09;詳解 決策樹是一種常用的機器學習算法&#xff0c;它通過遞歸地將數據集分割成更小的子集來構建樹形結構。ID3和C4.5是兩種經典的決策樹算法&#xff0c;它們都使用了貪心算法來選擇最優的特征進行分割…