Apache 服務器基礎配置與虛擬主機部署
Apache 的核心定位與作用:
Apache 的核心功能是處理 HTTP 請求并提供 Web 資源,是客戶端(如瀏覽器)與 Web 服務器之間的 “中間人”:
接收客戶端通過 HTTP/HTTPS 協議發送的請求(如訪問網頁、提交表單)。
解析請求內容(如請求的文件路徑、方法類型 GET/POST)。
從服務器本地或后端服務(如 PHP、Python 應用)獲取資源。
將資源封裝為 HTTP 響應,返回給客戶端。
簡單來說,當用戶在瀏覽器輸入http://example.com時,Apache 負責將服務器上的index.html文件(或動態生成的內容)發送到用戶的瀏覽器中。
1. 安裝與啟動服務
(1)安裝 Apache
通過 YUM 源安裝 Apache(前提已配置好本地或網絡 YUM 源):
[root@zhangyiwei /]# yum -y install httpd
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
aa | 3.6 kB 00:00
(1/2): aa/group_gz | 166 kB 00:00
(2/2): aa/primary_db | 3.1 MB 00:00
正在解決依賴關系
--> 正在檢查事務
---> 軟件包 httpd.x86_64.0.2.4.6-88.el7.centos 將被 安裝
--> 正在處理依賴關系 httpd-tools = 2.4.6-88.el7.centos,它被軟件包 httpd-2.4.6-88.el7.centos.x86_64 需要
--> 正在處理依賴關系 /etc/mime.types,它被軟件包 httpd-2.4.6-88.el7.centos.x86_64 需要
--> 正在處理依賴關系 libaprutil-1.so.0()(64bit),它被軟件包 httpd-2.4.6-88.el7.centos.x86_64 需要
--> 正在處理依賴關系 libapr-1.so.0()(64bit),它被軟件包 httpd-2.4.6-88.el7.centos.x86_64 需要
--> 正在檢查事務
---> 軟件包 apr.x86_64.0.1.4.8-3.el7_4.1 將被 安裝
---> 軟件包 apr-util.x86_64.0.1.5.2-6.el7 將被 安裝
---> 軟件包 httpd-tools.x86_64.0.2.4.6-88.el7.centos 將被 安裝
---> 軟件包 mailcap.noarch.0.2.1.41-2.el7 將被 安裝
--> 解決依賴關系完成依賴關系解決================================================================================Package 架構 版本 源 大小
================================================================================
正在安裝:httpd x86_64 2.4.6-88.el7.centos aa 2.7 M
為依賴而安裝:apr x86_64 1.4.8-3.el7_4.1 aa 103 kapr-util x86_64 1.5.2-6.el7 aa 92 khttpd-tools x86_64 2.4.6-88.el7.centos aa 90 kmailcap noarch 2.1.41-2.el7 aa 31 k事務概要
================================================================================
安裝 1 軟件包 (+4 依賴軟件包)總下載量:3.0 M
安裝大小:10 M
Downloading packages:
--------------------------------------------------------------------------------
總計 110 MB/s | 3.0 MB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction正在安裝 : apr-1.4.8-3.el7_4.1.x86_64 1/5 正在安裝 : apr-util-1.5.2-6.el7.x86_64 2/5 正在安裝 : httpd-tools-2.4.6-88.el7.centos.x86_64 3/5 正在安裝 : mailcap-2.1.41-2.el7.noarch 4/5 正在安裝 : httpd-2.4.6-88.el7.centos.x86_64 5/5 驗證中 : httpd-tools-2.4.6-88.el7.centos.x86_64 1/5 驗證中 : apr-1.4.8-3.el7_4.1.x86_64 2/5 驗證中 : mailcap-2.1.41-2.el7.noarch 3/5 驗證中 : httpd-2.4.6-88.el7.centos.x86_64 4/5 驗證中 : apr-util-1.5.2-6.el7.x86_64 5/5 已安裝:httpd.x86_64 0:2.4.6-88.el7.centos 作為依賴被安裝:apr.x86_64 0:1.4.8-3.el7_4.1 apr-util.x86_64 0:1.5.2-6.el7 httpd-tools.x86_64 0:2.4.6-88.el7.centos mailcap.noarch 0:2.1.41-2.el7 完畢!
(2)啟動服務并設置自啟
[root@zhangyiwei /]# systemctl restart httpd
[root@zhangyiwei /]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
(3)關閉干擾項(測試環境)
為避免防火墻和 SELinux 攔截訪問,測試環境可臨時關閉:
[root@zhangyiwei /]# systemctl stop firewalld
[root@zhangyiwei /]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
(4)配置DNS服務器,將客戶端(192.168.100.20)的 DNS 服務器 IP指向它。
? #詳見DNS(域名系統)詳解與 BIND 服務搭建
2. 基礎站點配置
Apache 默認站點根目錄為/var/www/html/
,可直接在該目錄下創建網頁文件:
# 創建默認首頁
[root@zhangyiwei /]# echo "Hello,World" > /var/www/html/index.html
#重啟服務后
[root@zhangyiwei /]# systemctl restart httpd #重啟httpd服務
#在客戶端過服務器 IP(http://192.168.100.10
)訪問,即可看到頁面內容。
3. 自定義站點目錄(可選)
若需將站點目錄修改為自定義路徑(如/html/
),步驟如下:
-
創建目錄并添加頁面:
[root@zhangyiwei /]# mkdir /html [root@zhangyiwei /]# echo "Hello,World" >/var/www/html/index.html
-
修改Apache 服務主配置文件:
[root@zhangyiwei /]# vim /etc/httpd/conf/httpd.conf
#Apache 服務主配置文件核心部分
ServerRoot "/etc/httpd" # 定義Apache服務器的根目錄,存放配置文件和模塊
Listen 80 # 設置服務器監聽的端口,這里為HTTP默認端口80
Include conf.modules.d/*.conf # 包含指定目錄下所有.conf文件,用于加載功能模塊
User apache # 指定Apache進程運行的用戶,增強安全性
Group apache # 指定Apache進程所屬的用戶組
DocumentRoot "/var/www/html" # 設置網站文件的根目錄,網頁內容默認存放在此
<Directory "/var/www"> # 對/var/www目錄進行訪問控制配置AllowOverride None # 禁止使用.htaccess文件覆蓋當前目錄配置# Allow open access:Require all granted # 允許所有客戶端訪問該目錄下的資源Require all granted # 允許所有客戶端訪問該目錄下的資源
</Directory>
調整DocumentRoot
和目錄權限配置:
DocumentRoot "/html"
<Directory "/html">Require all granted # 允許所有訪問
</Directory>
- 重啟服務生效:
[root@zhangyiwei /]# systemctl restart httpd
驗證:訪問服務器 IP查看頁面內容
二、虛擬主機部署(多站點方案)
虛擬主機允許在同一服務器通過不同方式區分多個站點,常見的三種部署方式如下:
方式一:相同 IP、不同端口
(1)準備虛擬主機配置文件
Apache 提供虛擬主機模板,復制到配置目錄:
[root@zhangyiwei /]# cp /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/#可以用find -name "*vhosts*".conf命令查找虛擬主機模板
(2)創建多站點目錄及頁面
# 創建兩個站點目錄
[root@zhangyiwei /]# mkdir -p /var/www/zhangsan /var/www/lisi# 添加測試頁面
[root@zhangyiwei /]# echo "zhangsan" > /var/www/zhangsan/index.html
[root@zhangyiwei /]# echo "lisi" > /var/www/lisi/index.html
(3)配置虛擬主機(端口區分)
[root@zhangyiwei /]# vim /etc/httpd/conf.d/httpd-vhosts.conf
添加以下配置():
# 第一個站點:IP+80端口(zhangsan)
<VirtualHost 192.168.100.10:80>DocumentRoot "/var/www/baidu"
</VirtualHost># 第二個站點:IP+8080端口(lisi,需聲明監聽端口)
Listen 8080
<VirtualHost 192.168.100.10:8080>DocumentRoot "/var/www/taobao"
</VirtualHost>
虛擬主機配置模板
<VirtualHost *:@@Port@@> # 定義虛擬主機,監聽所有IP的@@Port@@端口(通常為80或443)ServerAdmin webmaster@dummy-host2.example.com # 網站管理員的郵箱地址,用于接收錯誤通知DocumentRoot "@@ServerRoot@@/docs/dummy-host2.example.com" # 該虛擬主機的網頁文件存放路徑ServerName dummy-host2.example.com # 綁定的域名,客戶端通過此域名訪問該虛擬主機ErrorLog "/var/log/httpd/dummy-host2.example.com-error_log" # 錯誤日志文件路徑CustomLog "/var/log/httpd/dummy-host2.example.com-access_log" common # 訪問日志文件路徑,使用common格式記錄
</VirtualHost>
(4)重啟服務并開放端口
[root@zhangyiwei /]# systemctl restart httpd
#開放80和8080端口(生產環境)
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
(5)訪問測試
-
通過
http://192.168.100.10
訪問 zhangsan 站點 -
-
通過
http://192.168.100.10:8080
訪問 lisi 站點
方式二:不同 IP、相同端口(80 端口)
(1)為服務器配置多 IP
在網卡配置文件中添加第二個 IP(以ens33
為例):
[root@zhangyiwei /]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 添加第二個IP,寫入這兩行
IPADDR1=192.168.100.200
PREFIX1=24
# 重啟網絡
[root@zhangyiwei /]# systemctl restart network
查看IP地址:
inet 192.168.100.10/24 brd 192.168.100.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.100.200/24 brd 192.168.100.255 scope global secondary noprefixroute ens33valid_lft forever preferred_lft forever
(2)配置虛擬主機(IP 區分)
vim /etc/httpd/conf.d/httpd-vhosts.conf
添加以下配置:
# 第一個站點:IP=192.168.100.10(baidu)
<VirtualHost 192.168.100.10:80>DocumentRoot "/var/www/baidu"
</VirtualHost># 第二個站點:IP=192.168.100.200(taobao)<VirtualHost 192.168.100.200:80>DocumentRoot "/var/www/lisi"
</VirtualHost>
(3)重啟服務
systemctl restart httpd
(4)訪問測試
-
通過
http://192.168.100.10
訪問 baidu 站點 -
-
通過
http://192.168.100.200
訪問 taobao 站點
方式三:相同 IP、相同端口、不同域名(FQDN)
(1)配置 DNS 解析(關鍵)
在 DNS 服務器中為兩個域名配置正向解析(指向同一 IP):
# 編輯DNS正向解析文件(本機為zhang3.com)
[root@zhangyiwei /]# vim /var/named/zhang3.com # 添加A記錄
webzhangsan IN A 192.168.100.10
weblisi IN A 192.168.100.10# 重啟DNS服務
systemctl restart named
(2)配置虛擬主機(域名區分)
[root@zhangyiwei /]# vim /etc/httpd/conf.d/httpd-vhosts.conf
添加以下配置(通過ServerName
綁定域名):
# 第一個站點:webzhangsan.example.com
<VirtualHost 192.168.100.10:80>DocumentRoot "/var/www/baidu"ServerName webzhangsan.example.com
</VirtualHost># 第二個站點:weblisi.example.com
<VirtualHost 192.168.100.10:80>DocumentRoot "/var/www/taobao"ServerName weblisi.example.com
</VirtualHost>
(3)重啟服務
[root@zhangyiwei /]# systemctl restart httpd
(4)訪問測試
- 客戶端需將 DNS 指向配置解析的服務器
- 通過
http://webzhangsan.example.com
和http://weblisi.example.com
分別訪問兩個站點
總結
Apache 虛擬主機通過端口、IP 或域名三種方式實現多站點部署,其中域名區分是最符合互聯網訪問習慣的方式(需配合 DNS 解析)。從基礎配置到虛擬主機搭建,核心步驟包括:安裝服務、配置站點目錄、定義虛擬主機規則、重啟服務并驗證訪問。實際應用中,需根據業務需求選擇合適的部署方式,并注意權限與安全配置(如防火墻、SELinux)。