三十二、【Linux网站服务器】搭建httpd服务器演示虚拟主机配置、网页重定向功能

发布于:2025-07-31 ⋅ 阅读:(21) ⋅ 点赞:(0)

一、虚拟主机配置

虚拟主机技术全景

端口号
IP地址
域名
客户端请求
识别方式
基于端口的虚拟主机
基于IP的虚拟主机
基于域名的虚拟主机
响应8080/8081端口请求
响应不同IP的请求
响应不同域名的请求
虚拟主机目录规范
/var/www/
├── site1.com
│   ├── public_html    # 网站根目录
│   ├── logs            # 专属日志
│   └── cgi-bin         # CGI脚本
└── site2.com
    ├── public_html
    ├── logs
    └── tmp             # 临时文件
1. 基于端口的虚拟主机(8080/8081)
# 创建网站目录
[root@localhost ~]# mkdir -p /var/www/{port8080,port8081}

# 写入测试页面
[root@localhost ~]# echo "Port 8080 Home" > /var/www/port8080/index.html
[root@localhost ~]# echo "Port 8081 Home" > /var/www/port8081/index.html

# 创建配置文件
[root@localhost ~]# vi /etc/httpd/conf.d/port-vhost.conf
# 添加以下内容👇
Listen 8080
Listen 8081

<VirtualHost *:8080>
    DocumentRoot "/var/www/port8080"
    ErrorLog "/var/log/httpd/port8080-error.log"
</VirtualHost>

<VirtualHost *:8081>
    DocumentRoot "/var/www/port8081"
    ErrorLog "/var/log/httpd/port8081-error.log"
</VirtualHost>

# 开放防火墙端口
[root@localhost ~]# firewall-cmd --permanent --add-port={8080,8081}/tcp
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# systemctl restart httpd
2. 基于IP的虚拟主机(192.168.1.100/192.168.1.101)
# 添加临时IP
[root@localhost ~]# ip addr add 192.168.1.101/24 dev eth0

# 创建网站目录
[root@localhost ~]# mkdir -p /var/www/{ip100,ip101}
[root@localhost ~]# echo "IP 192.168.1.100" > /var/www/ip100/index.html
[root@localhost ~]# echo "IP 192.168.1.101" > /var/www/ip101/index.html

# 创建配置文件
[root@localhost ~]# vi /etc/httpd/conf.d/ip-vhost.conf
# 添加以下内容👇
<VirtualHost 192.168.1.100:80>
    DocumentRoot "/var/www/ip100"
    ServerName 192.168.1.100
</VirtualHost>

<VirtualHost 192.168.1.101:80>
    DocumentRoot "/var/www/ip101"
    ServerName 192.168.1.101
</VirtualHost>

[root@localhost ~]# systemctl restart httpd
3. 基于域名的虚拟主机(site1.com/site2.com)
# 创建网站目录
[root@localhost ~]# mkdir -p /var/www/{site1,site2}
[root@localhost ~]# echo "Site1 Home" > /var/www/site1/index.html
[root@localhost ~]# echo "Site2 Home" > /var/www/site2/index.html

# 创建配置文件
[root@localhost ~]# vi /etc/httpd/conf.d/domain-vhost.conf
# 添加以下内容👇
<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot "/var/www/site1"
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.com
    DocumentRoot "/var/www/site2"
</VirtualHost>

# 配置本地DNS解析
[root@localhost ~]# echo "127.0.0.1 site1.com site2.com" >> /etc/hosts
[root@localhost ~]# systemctl restart httpd

二、网页重定向配置

HTTP 跳转至 HTTPS
# 启用重写模块
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
# 取消注释👇
LoadModule rewrite_module modules/mod_rewrite.so

# 配置重定向规则
[root@localhost ~]# vi /etc/httpd/conf.d/redirect.conf
# 添加以下内容👇
<VirtualHost *:80>
    ServerName site1.com
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

[root@localhost ~]# systemctl restart httpd

命令总结表格

演示命令 功能描述 关键参数/文件
mkdir -p /var/www/{port8080,port8081} 创建端口虚拟主机目录 -p 递归创建目录
vi /etc/httpd/conf.d/port-vhost.conf 配置端口虚拟主机 Listen 8080 定义监听端口
ip addr add 192.168.1.101/24 dev eth0 添加临时IP地址 dev eth0 指定网卡
vi /etc/httpd/conf.d/ip-vhost.conf 配置IP虚拟主机 <VirtualHost 192.168.1.100:80> IP绑定
echo "127.0.0.1 site1.com" >> /etc/hosts 本地DNS解析 /etc/hosts 域名映射
vi /etc/httpd/conf.d/domain-vhost.conf 配置域名虚拟主机 ServerName site1.com 域名标识
vi /etc/httpd/conf.d/redirect.conf 配置HTTP跳转HTTPS RewriteRule (.*) https://... [R=301,L] 301重定向

功能作用详解

1.虚拟主机类型对比

类型 标识方式 适用场景 配置核心指令
基于端口 不同端口(如 80/8080) 测试环境多应用隔离 Listen 8080 + <VirtualHost *:8080>
基于IP 不同IP地址 多IP服务器托管独立网站 <VirtualHost 192.168.1.100:80>
基于域名 不同域名(如 site1.com) 单IP多域名网站托管(生产常用) ServerName site1.com

2. 虚拟主机配置要点

# 端口虚拟主机示例
Listen 8080
<VirtualHost *:8080>
    DocumentRoot "/var/www/port8080"
    # 必须添加 Listen 指令[1,6](@ref)
</VirtualHost>

# 域名虚拟主机示例
<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot "/var/www/site1"
    # 需确保域名解析到服务器IP[8](@ref)
</VirtualHost>
  • 目录权限控制:
<Directory "/var/www/site1">
    Require all granted     # 允许所有访问
    Options -Indexes        # 禁止目录列表[7](@ref)
</Directory>

3. 重定向功能解析

  • 强制HTTPS跳转
RewriteEngine On
RewriteCond %{HTTPS} off          # 检测非HTTPS请求
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
  • 域名A跳转到域名B
RewriteCond %{HTTP_HOST} ^old.com$ [NC]
RewriteRule ^(.*)$ http://new.com/$1 [R=301,L]

网站公告

今日签到

点亮在社区的每一天
去签到