三十二、【Linux网站服务器】搭建httpd服务器演示虚拟主机配置、网页重定向功能
httpd服务器功能演示
一、虚拟主机配置
虚拟主机技术全景
#mermaid-svg-tjBK2OulCmetSbeW {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tjBK2OulCmetSbeW .error-icon{fill:#552222;}#mermaid-svg-tjBK2OulCmetSbeW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tjBK2OulCmetSbeW .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-tjBK2OulCmetSbeW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tjBK2OulCmetSbeW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tjBK2OulCmetSbeW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tjBK2OulCmetSbeW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tjBK2OulCmetSbeW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tjBK2OulCmetSbeW .marker.cross{stroke:#333333;}#mermaid-svg-tjBK2OulCmetSbeW svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tjBK2OulCmetSbeW .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-tjBK2OulCmetSbeW .cluster-label text{fill:#333;}#mermaid-svg-tjBK2OulCmetSbeW .cluster-label span{color:#333;}#mermaid-svg-tjBK2OulCmetSbeW .label text,#mermaid-svg-tjBK2OulCmetSbeW span{fill:#333;color:#333;}#mermaid-svg-tjBK2OulCmetSbeW .node rect,#mermaid-svg-tjBK2OulCmetSbeW .node circle,#mermaid-svg-tjBK2OulCmetSbeW .node ellipse,#mermaid-svg-tjBK2OulCmetSbeW .node polygon,#mermaid-svg-tjBK2OulCmetSbeW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tjBK2OulCmetSbeW .node .label{text-align:center;}#mermaid-svg-tjBK2OulCmetSbeW .node.clickable{cursor:pointer;}#mermaid-svg-tjBK2OulCmetSbeW .arrowheadPath{fill:#333333;}#mermaid-svg-tjBK2OulCmetSbeW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tjBK2OulCmetSbeW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tjBK2OulCmetSbeW .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-tjBK2OulCmetSbeW .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-tjBK2OulCmetSbeW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tjBK2OulCmetSbeW .cluster text{fill:#333;}#mermaid-svg-tjBK2OulCmetSbeW .cluster span{color:#333;}#mermaid-svg-tjBK2OulCmetSbeW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tjBK2OulCmetSbeW :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 端口号 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 8080Listen 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
dev eth0
指定网卡vi /etc/httpd/conf.d/ip-vhost.conf
IP绑定echo \"127.0.0.1 site1.com\" >> /etc/hosts
/etc/hosts
域名映射vi /etc/httpd/conf.d/domain-vhost.conf
ServerName site1.com
域名标识vi /etc/httpd/conf.d/redirect.conf
RewriteRule (.*) https://... [R=301,L]
301重定向功能作用详解
1.虚拟主机类型对比
Listen 8080
+
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 OnRewriteCond %{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]