1. 基础概念部分
1.1 Web 服务主流软件及开发语言
- Apache、Nginx、Tomcat 三大 Web 服务
- Apache:C/C++ 开发
- Nginx:C/C++ 开发
- Tomcat:Java 语言(主打 Java 项目)
1.2 源码编译安装三部曲
- ./configure 预编译检测系统开发环境、编译依赖、系统库、版本兼容;可指定安装路径、开启模块功能;最终生成 Makefile。
- make 编译编译器将源代码文本翻译成机器二进制码,转为 CPU 可识别 0/1 指令,耗时最长。
- make install 安装把编译好的二进制程序、配置、模块、帮助文件等,拷贝到--prefix指定安装目录及子目录。
1.3 Apache 源码安装位置判断
安装目录:/usr/local/httpd2467
目录结构:
- bin:启动程序
- conf:配置文件
- htdocs:默认网站根目录
- logs:日志目录
- modules:模块目录
- cgi-bin:脚本目录
- docs:虚拟主机网站站点目录
2. Apache 访问控制配置
2.1 配置文件标准操作流程
1.备份主配置文件
cp -av ../../conf/httpd.conf /opt/备份文件名2.精简配置(去掉空行、注释)
grep -Ev "^$|#" 配置文件 > 精简后文件3.覆盖回主配置
cat 精简文件 > 原httpd.conf4.手动加注释、保留核心配置(具体需要修改的配置信息如下)
[root@localhost conf]# vim httpd.conf <Directory "/usr/local/httpd2467/htdocs"> Options Indexes FollowSymLinks AllowOverride None # by gaoxf 20260518 14:21 v1.1.1 begin # Require all granted Require ip 12.13.14.4 # by gaoxf 20260518 14:22 v1.1.1 end </Directory>2.2 单一IP访问控制
配置位置:<Directory 网站目录>容器内
- 允许单个 IP:
Require ip 12.13.14.4- 禁止某个 IP:
Require not ip 12.13.14.52.3 访问规则逻辑
- 多个无not:或关系,满足任一即可访问
- 有not也有普通 Require:且关系,全部满足才可访问
2.4 配置检查与重启
- 语法检测:
/usr/local/httpd2467/bin/apachectl -t- 重启服务:
/usr/local/httpd2467/bin/apachectl -k restart2.5 403报错原因
- 目录权限 / 访问规则拒绝
- 网站目录无默认首页 index.html
3. Apache 基于域名虚拟主机配置(核心重点)
3.1 前期准备
1.服务器 IP:12.13.14.4/24
2.本地域名解析 /etc/hosts格式:IP 域名,可多个域名绑定同一 IP
# 例如 12.13.14.4 web1.gaoxf.com 12.13.14.4 web2.gaoxf.com3.Windows 端修改 hosts:路径:C:\Windows\System32\drivers\etc\hosts,写入相同解析
4.ping 测试:能解析到对应 IP、有 TTL 返回即为正常
3.2 虚拟主机配置文件
路径如下
/usr/local/httpd2467/conf/extra/httpd-vhosts.conf虚拟主机配置结构模板
<VirtualHost *:80> ServerAdmin 管理员邮箱 DocumentRoot 网站站点目录 ServerName 域名 ErrorLog 错误日志路径 CustomLog 访问日志路径 <Directory 站点目录> Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>具体修改配置信息如下
[root@localhost extra]# cat httpd-vhosts.conf <VirtualHost *:80> ServerAdmin webmaster@web1.gaoxf.com DocumentRoot "/usr/local/httpd2467/docs/web1.gaoxf.com" ServerName web1.gaoxf.com # ServerAlias www.web1.gaoxf.com ErrorLog "logs/web1.gaoxf.com-error_log" CustomLog "logs/web1.gaoxf.com-access_log" common <Directory "/usr/local/httpd2467/docs/web1.gaoxf.com"> Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@web2.gaoxf.com DocumentRoot "/usr/local/httpd2467/docs/web2.gaoxf.com" ServerName web2.gaoxf.com ErrorLog "logs/web2.gaoxf.com-error_log" CustomLog "logs/web2.gaoxf.com-access_log" common <Directory "/usr/local/httpd2467/docs/web2.gaoxf.com"> Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>3.3 建站目录与权限
1.批量创建站点目录
mkdir -pv /usr/local/httpd2467/docs/web{1..2}.gaoxf.com2.授权运行用户 daemon
chown -R daemon.daemon 站点目录3.编写各自默认首页 index.html
echo '<h1>web1.gaoxf.com</h1>' > /usr/local/httpd2467/docs/web1.gaoxf.com/index.html echo '<h1>web2.gaoxf.com</h1>' > /usr/local/httpd2467/docs/web2.gaoxf.com/index.html3.4 主配置引入虚拟主机
1.在httpd.conf主配置文件中加入:
include /usr/local/httpd2467/conf/extra/httpd-vhosts.conf2.并将之前修改的允许单个IP访问设置回允许所有IP访问
3.5 测试与日志
1.浏览器分别访问两个域名,展示各自首页
2.独立日志存放各自访问 / 错误日志
web1.gaoxf.com访问日志信息
tail -f /usr/local/httpd2467/logs/web1.gaoxf.com-access_logweb2.gaoxf.com访问日志信息
tail -f /usr/local/httpd2467/logs/web2.gaoxf.com-access_log3.可扩展配置:80 强制跳转 443 HTTPS、SSL 证书配置
4.如何判断Apache源码安装位置?
1.用which/whereis找启动命令路径
Apache的主程序叫httpd,直接找它的位置:
which httpd # 输出示例:/usr/local/httpd2467/bin/httpd whereis httpd # 输出示例:httpd: /usr/local/httpd2467/bin/httpd /usr/local/httpd2467/conf/httpd.confhttpd 所在的上级目录(bin 的父目录),就是 Apache 的安装根目录。
2.看进程启动参数
ps aux | grep httpd # 输出里会有类似 root 1234 0.0 0.1 23456 7890 ? Ss 10:00 0:00 /usr/local/httpd2467/bin/httpd -k start这里的 /usr/local/httpd2467/bin/httpd,也能直接看出安装根目录。
3.找主配置文件 httpd.conf
Apache 的核心配置文件 httpd.conf 里,能看到所有路径信息:
# 查找配置文件位置 find / -name httpd.conf 2>/dev/null# 常见路径 /usr/local/httpd2467/conf/httpd.conf /usr/local/apache2/conf/httpd.conf打开文件,里面的 ServerRoot 就是安装根目录:
cat /usr/local/httpd2467/conf/httpd.conf | grep ServerRoot ServerRoot "/usr/local/httpd2467"这是 Apache 最核心的路径配置
4.用 apachectl 工具查看(最稳妥)
# 找到apachectl的位置 which apachectl # 输出:/usr/local/httpd2467/bin/apachectl # 查看编译参数(包含prefix)/usr/local/httpd2467/bin/apachectl -V输出里的Server built with: ... --prefix=/usr/local/httpd2467会直接告诉你安装路径。
5.如何解决上处favicon.ico 404的问题
1. 制作 favicon.ico 图标
你可以用在线工具快速生成:
1.打开任意在线图标制作网站(比如:favicon.io或 比特虫图标制作工具)
在线制作ico图标 | 在线ico图标转换工具 方便制作favicon.ico - 比特虫 - Bitbug.net
2.上传你准备好的图片(推荐正方形,比如 256x256px)可在下面链接中找素材
iconfont-阿里巴巴矢量图标库
3.生成.ico格式文件,下载到本地,文件名保持为favicon.ico
2. 上传到服务器的网站目录
根据你的 Apache 虚拟主机配置,找到web1.gaoxf.com的网站根目录。
用 scp 或 xftp 把本地的 favicon.ico 上传到这个目录下。
示例命令(Linux 服务器,本地终端执行):
# 假设你的服务器 IP 是 12.13.14.4,网站根目录是 /usr/local/httpd2467/docs/web1.gaoxf.com/
scp /本地路径/favicon.icoroot@12.13.14.4:/usr/local/httpd2467/docs/web1.gaoxf.com/
3. 给文件设置权限(避免权限问题)
登录服务器,给文件设置 Apache 能读取的权限:
# 进入网站根目录
cd /usr/local/httpd2467/docs/web1.gaoxf.com/
# 设置权限
chmod 644 favicon.ico
chown apache:apache favicon.ico # 或你的 Apache 运行用户,比如 www-data
4. 验证是否生效
1.清空浏览器缓存(Ctrl+Shift+R 强制刷新页面)
2.再次查看访问日志:
tail -f /usr/local/httpd2467/logs/web1.gaoxf.com-access_log
3.正常情况下,请求会变成:
12.13.14.4- - [18/May/2026:xx:xx:xx +0800] "GET /favicon.ico HTTP/1.1" 200 xxx
状态码 200 表示请求成功,404 就消失了。