当前位置: 首页 > news >正文

linux网络服务+linux数据库4

1.lamp

1.1 介绍

LAMP 是怎么一起工作的?(完整流程)

举个 “用户访问博客并查看文章” 的例子,你就能看懂它们的配合:

  1. 用户发起请求:你在浏览器里输入博客网址(比如 http://www.myblog.com/article/1),点击回车;
  2. Apache 接收请求:服务器上的 Apache 服务监听到这个请求,发现需要 “动态内容”(文章是存在数据库里的,不是静态文件),就把请求交给 PHP 处理;
  3. PHP 处理逻辑:PHP 脚本接收到 “查看第 1 篇文章” 的需求,会写代码去 MySQL 数据库里查询 “id=1 的文章”;
  4. MySQL 提供数据:MySQL 接收到 PHP 的查询请求,从数据库表中找到第 1 篇文章的标题、内容、发布时间等数据,返回给 PHP;
  5. PHP 生成网页:PHP 把 MySQL 返回的数据,套进网页模板(比如加上博客的导航栏、样式),生成一个完整的 HTML 网页;
  6. Apache 返回内容:PHP 把生成的 HTML 交给 Apache,Apache 再把这个网页发送回用户的浏览器,最后你就能看到文章了。

LAMP 的优点:为什么大家都用它搭网站?

  1. 免费开源:四个组件全是免费的,不用花一分钱就能用,对个人开发者、小公司特别友好;
  2. 跨平台 + 兼容性强:Linux 支持各种服务器硬件,Apache 能跑在 Windows/Linux 上,PHP/MySQL 也能和其他工具搭配(比如把 Apache 换成 Nginx,就成了 LNMP);
  3. 容易上手 + 资料多:用了几十年,网上教程、问题解决方案特别多,哪怕是新手,跟着步骤也能搭起来;
  4. 稳定可靠:Linux 系统很少死机,Apache 能抗住大量用户同时访问,MySQL 存数据安全不易丢,适合长期运行的网站。

1.2 准备工作

1.3 源码软件安装

1.4 centos7环境搭建

......

2.apache 

2.1 讲在apache之前

2.2 概述&工作模式

2.3 配置文件详解

        apache配置文件严格区分大小写

2.4实验-- 目录别名

一、实验原理

        Apache 的目录别名(Alias)功能,是将URL 路径服务器本地真实目录做映射。比如,把 http://域名/icons/ 映射到服务器的 /usr/local/apache2/icons/ 目录,用户访问 icons/ 时,实际访问的是服务器上的这个真实目录,无需移动文件到网站根目录(DocumentRoot),实现 “URL 伪路径” 访问真实文件。

二、详细步骤及验证(以 Apache 2.4 为例,路径需根据实际安装调整)

步骤 1:编辑主配置文件,启用子配置
操作
  1. 打开 Apache 主配置文件 httpd.conf
    vim /usr/local/apache2/conf/httpd.conf
    
  2. 找到并取消注释(删除行首的 #)以下配置,启用子配置文件 httpd-autoindex.conf
    Include etc/extra/httpd-autoindex.conf
    
  3. 保存并退出(vim 中按 Esc,输入 :wq 回车)。
原理

        Apache 主配置文件通过 Include 指令加载子配置文件,httpd-autoindex.conf 用于配置目录列表、别名等功能,取消注释后才能让子配置生效。

验证

        执行 grep -v "^#" /usr/local/apache2/conf/httpd.conf | grep Include,若输出包含 Include etc/extra/httpd-autoindex.conf,说明启用成功。

步骤 2:编辑子配置文件,添加目录别名
操作
  1. 打开子配置文件 httpd-autoindex.conf
    vim /usr/local/apache2/conf/extra/httpd-autoindex.conf
    
  2. 在文件中添加自定义别名配置(以映射 URL 路径 /myfiles 到真实目录 /data/my_shared_files 为例):
    # 定义别名:访问 /myfiles 时,实际访问 /data/my_shared_files
    Alias /myfiles/ "/data/my_shared_files/"# 配置别名对应的目录权限
    <Directory "/data/my_shared_files">Options Indexes FollowSymLinks  # 允许目录列表、跟随符号链接AllowOverride None             # 不允许.htaccess覆盖配置Require all granted            # 允许所有用户访问
    </Directory>
    
  3. 保存并退出。
  4. 创建真实目录并添加测试文件
    mkdir -p /data/my_shared_files
    echo "Test file for Alias" > /data/my_shared_files/test.txt
    
原理
  • Alias /myfiles/ "/data/my_shared_files/":核心配置,将 URL 路径 /myfiles/ 映射到真实目录 /data/my_shared_files/注意:别名和真实目录末尾都要加 /,否则可能报错)。
  • <Directory> 块:配置真实目录的访问权限,Require all granted 确保所有用户都能访问。
验证
  • 执行 cat /usr/local/apache2/conf/extra/httpd-autoindex.conf,查看是否包含上述 Alias 和 <Directory> 配置;
  • 执行 ls /data/my_shared_files/,确认 test.txt 存在。
步骤 3:重启 Apache 服务,使配置生效
操作
# 检查配置语法(确保无错误)
/usr/local/apache2/bin/apachectl configtest# 重启 Apache
/usr/local/apache2/bin/apachectl restart
原理

        修改配置后,必须重启 Apache 才能加载新配置,configtest 用于提前检查配置文件语法,避免重启失败。

验证

        执行 ps -ef | grep httpd,若能看到 Apache 进程(如 root 启动的主进程和 nobody 启动的工作进程),说明重启成功;若 configtest 报错,根据提示修正配置后重新执行。

步骤 4:验证目录别名访问
操作

        在客户端浏览器中访问:http://Apache服务器IP/myfiles/

原理

        客户端通过浏览器发送 HTTP 请求,Apache 接收到 /myfiles/ 的请求后,根据 Alias 配置,转发到真实目录 /data/my_shared_files/,并返回该目录的文件列表或具体文件内容。

验证
  • 若能看到 test.txt 文件列表,且点击 test.txt 能打开并显示 Test file for Alias,说明别名配置生效;
  • 额外测试:在服务器的 /data/my_shared_files/ 中新增文件(如 touch new.txt),刷新浏览器,若能看到 new.txt,说明实时同步。

三、额外验证:命令行访问(非浏览器)

操作

        在客户端执行(替换 Apache服务器IP 为实际 IP):

curl http://Apache服务器IP/myfiles/test.txt
原理

  curl 是命令行 HTTP 工具,用于模拟浏览器请求,测试更高效。

验证

        若输出 Test file for Alias,说明通过命令行也能成功访问别名映射的文件。

        通过以上步骤,可完整验证 Apache 目录别名的配置与访问,实现 “URL 伪路径” 到真实目录的映射,无需移动文件即可对外共享。

2.5 目录登录保护

一、实验原理

        Apache 的基于文件的权限认证mod_auth_basic 模块),是通过在目录中放置 .htaccess 文件,要求用户输入 “用户名 + 密码” 才能访问该目录。核心流程:

  1. 配置 Apache 允许目录使用 .htaccess 覆盖权限;
  2. 编写 .htaccess 定义认证规则(如认证类型、密码文件路径);
  3. 用 htpasswd 生成密码文件,添加允许访问的用户;
  4. 重启 Apache 使配置生效,用户访问时需输入密码验证。

二、详细步骤及验证(以 Apache 2.4 为例,路径需根据实际安装调整)

步骤 1:编辑 Apache 主配置文件,允许 .htaccess 覆盖
操作
  1. 打开 Apache 主配置文件 httpd.conf
    vim /usr/local/apache2/etc/httpd.conf
    
  2. 找到目标目录的 <Directory> 配置块(如 /usr/local/apache2/htdocs/admin),修改为:
    <Directory "/usr/local/apache2/htdocs/admin">Options Indexes FollowSymLinksAllowOverride All  # 允许.htaccess覆盖配置Require all granted
    </Directory>
    
  3. 保存并退出(vim 中按 Esc,输入 :wq 回车)。
原理
  • AllowOverride All:允许该目录下的 .htaccess 文件覆盖 Apache 主配置中的权限规则;
  • Options Indexes FollowSymLinks:允许目录列表、跟随符号链接(可选,方便查看目录内容)。
验证

        执行 grep -A 3 "<Directory.*admin>" /usr/local/apache2/etc/httpd.conf,确认 AllowOverride All 已配置。

步骤 2:创建 .htaccess 权限认证文件
操作
  1. 进入目标目录:
    cd /usr/local/apache2/htdocs/admin
    
  2. 创建并编辑 .htaccess 文件:
    vim .htaccess
    
  3. 添加以下内容:
    AuthName "Welcome to admin area"  # 认证提示信息(弹窗显示)
    AuthType basic                   # 认证类型(basic 为基本认证)
    AuthUserFile /usr/local/apache2/htdocs/admin/apache.passwd  # 密码文件路径
    Require valid-user               # 允许密码文件中所有用户访问
    
  4. 保存并退出。
原理
  • AuthName:用户访问时,浏览器弹窗的提示文字;
  • AuthType basic:使用 HTTP 基本认证(明文传输密码,仅适合测试或内网环境);
  • AuthUserFile:指定存储用户名密码的文件路径;
  • Require valid-user:只要是密码文件中存在的用户,都允许访问该目录。
验证

        执行 cat /usr/local/apache2/htdocs/admin/.htaccess,确认内容与上述一致。

步骤 3:创建密码文件并添加用户
操作
  1. 添加第一个用户(如 test1):
    htpasswd -c /usr/local/apache2/htdocs/admin/apache.passwd test1
    
    执行后输入并确认密码(如 123456)。
  2. 添加第二个用户(如 test2,注意:添加多个用户时,去掉 -c 避免覆盖文件):
    htpasswd /usr/local/apache2/htdocs/admin/apache.passwd test2
    
    同样输入并确认密码(如 abc123)。
原理
  • htpasswd 是 Apache 自带的密码文件管理工具;
  • -c创建新的密码文件(仅第一次用,后续添加用户需去掉 -c,否则会覆盖已有用户);
  • 无 -c:向现有密码文件中追加用户
验证
  • 执行 cat /usr/local/apache2/htdocs/admin/apache.passwd,应看到 test1:$apr1$xxx... 和 test2:$apr1$yyy...(密码已被加密);
  • 执行 htpasswd -bv /usr/local/apache2/htdocs/admin/apache.passwd test3 123-bv 用于验证用户密码),若输出 Adding password for user test3,说明密码设置符合规则。
步骤 4:重启 Apache 服务,使配置生效
操作
  1. 检查配置语法(避免错误):
    /usr/local/apache2/bin/apachectl configtest
    
  2. 重启 Apache
    /usr/local/apache2/bin/apachectl restart
    
原理

        修改配置或密码文件后,必须重启 Apache 才能加载新的认证规则。configtest 用于提前检查配置文件语法,防止重启失败。

验证
  • 若 configtest 输出 Syntax OK,说明配置无语法错误;
  • 执行 ps -ef | grep httpd,若能看到 Apache 进程(如 root 启动的主进程和 nobody 启动的工作进程),说明重启成功。
步骤 5:验证密码认证(浏览器访问)
操作

        在客户端浏览器中访问:http://Apache服务器IP/htdocs/admin/

原理

        浏览器发送请求到 Apache 后,Apache 会检测到目标目录有 .htaccess 认证配置,弹出 “用户名 + 密码” 输入框,验证通过后才会返回目录内容。

验证
  • 输入 test1 和密码 123456,应能成功进入目录,看到目录下的文件(若目录为空,至少能看到 “目录列表”);
  • 输入错误密码(如 wrong),会提示 “认证失败”,无法访问;
  • 用 test2 和密码 abc123 登录,同样应能成功访问,验证多用户生效。

三、额外验证:命令行访问(非浏览器)

操作

在客户端执行(替换 Apache服务器IP 为实际 IP):

curl -u test1:123456 http://Apache服务器IP/htdocs/admin/
原理

   curl -u 用户名:密码 用于模拟浏览器的基本认证,测试更高效。

验证

        若输出包含目标目录的内容(如目录列表或文件内容),说明命令行认证也成功。

        通过以上步骤,可完整验证 Apache 基于 .htaccess 的目录权限认证,实现 “指定目录需密码才能访问” 的效果,适合测试内网环境的简单权限控制。

2.6 虚拟主机

2.6.1 区别

        用大白话来说,虚拟机是 “模拟一台完整电脑”,虚拟主机是 “在一台真实电脑里分割出的多个‘网站空间’”—— 两者的核心区别在于 “功能范围” 和 “使用场景”,一个能当完整电脑用,一个只能用来放网站。

核心定义:本质是啥?

先搞懂最基础的区别,用 “房子” 类比更直观:

类型核心定义类比场景
虚拟机(VM)通过软件(如 VMware、VirtualBox、KVM)在 “真实电脑” 上模拟出的 “完整独立电脑”你买了一套毛坯房,能自己装修、买家具,想当卧室、书房、健身房都可以
虚拟主机(VH)在 “真实服务器” 上通过软件(如 Apache、Nginx)分割出的 “独立网站存储空间”你租了公寓里的一个单间,只能用来住(放网站),不能改房子结构,也不能当健身房
核心区别:6 个维度对比

从 “功能、资源、独立性、使用场景” 等关键维度,把差异讲透:

对比维度虚拟机(VM)虚拟主机(VH)
1. 功能范围能做 “完整电脑” 的所有事:装操作系统(Windows/Linux)、装软件(浏览器、Office、数据库、服务器)、玩游戏、跑程序,甚至再装虚拟机只能做 “放网站” 的事:存储网站文件(HTML、PHP、图片)、对接数据库(MySQL),不能装操作系统,也不能跑非网站相关的软件(如 Office、游戏)
2. 资源占用资源 “独占且灵活”:你得给它分配固定的 CPU 核心、内存、硬盘(比如 2 核 4G 内存 50G 硬盘),这些资源只给这台虚拟机用,不够了可以手动加资源 “共享且有限”:所有虚拟主机共享真实服务器的 CPU、内存、硬盘(比如一台服务器有 16 核 32G 内存,分给 100 个虚拟主机用),每个虚拟主机的资源有上限(比如 1 核 1G 内存 5G 硬盘),不能随便加
3. 系统独立性完全独立的 “小电脑”:虚拟机里的操作系统崩溃、中毒,不会影响真实电脑;多个虚拟机之间也互不干扰(比如 A 虚拟机装 Linux,B 虚拟机装 Windows,各自独立)高度依赖 “母服务器”:所有虚拟主机共用母服务器的操作系统(比如 Linux),如果母服务器崩溃,所有虚拟主机都用不了;而且虚拟主机之间可能互相影响(比如 A 虚拟主机占用太多 CPU,B 虚拟主机的网站就会变卡)
4. 管理权限拥有 “root / 管理员权限”:你能像操作自己的真实电脑一样,修改虚拟机的系统设置、装驱动、管理所有文件,甚至格式化虚拟机的硬盘只有 “网站管理权限”:你只能管理自己虚拟主机里的网站文件(上传 / 删除网页)、数据库,不能修改母服务器的系统设置,也看不到其他虚拟主机的文件
5. 性能表现性能 “接近真实电脑”:只要给虚拟机分配足够的资源,跑程序、开服务的速度和真实电脑差不多(比如用虚拟机搭服务器,能扛中等并发)性能 “受限于共享资源”:如果同一服务器的其他虚拟主机访问量高,你的网站会变卡;而且虚拟主机通常不支持高并发(比如每秒几百人访问就可能崩)
6. 适用人群开发者、测试人员、需要独立环境的用户:比如程序员用虚拟机装 Linux 测程序,运维人员用虚拟机模拟多服务器环境,普通人用虚拟机装旧系统玩老游戏个人站长、小企业:比如你想搭个人博客、小公司官网,不想花太多钱,也不想管服务器维护,买个虚拟主机就能用
举例子:什么时候用虚拟机?什么时候用虚拟主机?

用实际场景帮你判断:

场景 1:你想搭一个个人博客

  • 虚拟主机:花几十块钱买个虚拟主机,把博客程序(如 WordPress)上传上去,不用管服务器配置,直接就能用,省心又便宜;
  • 不用虚拟机:如果用虚拟机,你得先装 Linux 系统,再搭 Apache/MySQL/PHP 环境,还要配置域名、端口,对新手来说太复杂,而且虚拟机得一直开着电脑才能访问,不方便。

场景 2:你是程序员,需要测 Linux 下的程序

  • 虚拟机:在 Windows 电脑上装个 VMware,再在虚拟机里装 Linux 系统,然后在 Linux 里跑程序,就算程序崩了,也不会影响 Windows 系统,测试完关掉虚拟机就行;
  • 不用虚拟主机:虚拟主机只能放网站,不能装 Linux 系统,也不能跑你的测试程序,完全用不了。

场景 3:你想搭一个能扛 100 人同时访问的小型企业官网

  • 虚拟主机:企业官网访问量不大,虚拟主机的资源足够用,而且服务商负责维护服务器,你只要更新官网内容就行;
  • 不用虚拟机:除非你有技术团队能自己维护虚拟机,否则虚拟机需要自己管安全、备份,反而麻烦。

场景 4:你想模拟 “多服务器集群” 测试

  • 虚拟机:在一台高性能电脑上开 3 个虚拟机,分别装 Linux 当 “Web 服务器”“数据库服务器”“缓存服务器”,模拟真实的集群环境,测试程序在多服务器下的运行情况;
  • 不用虚拟主机:虚拟主机连独立系统都没有,根本没法模拟多服务器集群。
容易混淆的点:虚拟主机 vs 云服务器(ECS)

很多人会把 “虚拟主机” 和 “云服务器” 搞混,其实云服务器本质是 “在云上的虚拟机”—— 比如阿里云 ECS、腾讯云 CVM,就是服务商在他们的物理服务器上开的虚拟机,你买了之后能像用自己的虚拟机一样,装系统、管权限,性能比虚拟主机强很多,但价格也更贵。

简单总结:

  • 虚拟主机:只能放网站,便宜、省心,适合新手;
  • 云服务器(虚拟机):能当完整电脑用,灵活、性能强,适合需要独立环境的开发者 / 企业;
  • 本地虚拟机:自己电脑上开的,适合测试、学习,不用花钱,但需要自己维护。

2.6.2 实验

步骤 1:实验准备(域名解析 + 网站目录)
1.1 域名解析(修改本地 hosts 文件模拟)
  • Windows 客户端:打开 C:\Windows\System32\drivers\etc\hosts,添加以下内容(将域名指向 Apache 服务器 IP,假设服务器 IP 为 192.168.10.80):

    plaintext

    192.168.10.80  www.sina.com
    192.168.10.80  www.sohu.com
    
  • Linux 客户端(可选):打开 /etc/hosts,添加同样内容。
1.2 网站目录与测试文件

在 Apache 服务器上执行:

# 创建新浪网站目录及测试文件
mkdir -p /usr/local/apache/htdocs/sina
echo "This is Sina Website" > /usr/local/apache/htdocs/sina/index.html# 创建搜狐网站目录及测试文件
mkdir -p /usr/local/apache/htdocs/sohu
echo "This is Sohu Website" > /usr/local/apache/htdocs/sohu/index.html
原理
  • hosts 文件是本地 “域名 -> IP” 的映射表,优先于 DNS 解析,用于实验环境快速模拟域名访问;
  • 每个网站需要独立的目录存放文件,index.html 是默认首页。
验证
  • 执行 cat /usr/local/apache/htdocs/sina/index.html,应输出 This is Sina Website
  • 执行 cat /usr/local/apache/htdocs/sohu/index.html,应输出 This is Sohu Website
步骤 2:修改 Apache 主配置,启用虚拟主机
操作
  1. 打开 Apache 主配置文件 httpd.conf
    vim /usr/local/apache/etc/httpd.conf
    
  2. 找到并取消注释(删除行首 #)以下配置,启用虚拟主机子配置:
    Include etc/extra/httpd-vhosts.conf
    
  3. 保存并退出(vim 中按 Esc,输入 :wq 回车)。
原理

Apache 主配置通过 Include 加载子配置文件 httpd-vhosts.conf,该文件专门用于配置虚拟主机。

验证

执行 grep -v "^#" /usr/local/apache/etc/httpd.conf | grep Include,应输出 Include etc/extra/httpd-vhosts.conf

步骤 3:配置虚拟主机子配置文件
操作
  1. 打开虚拟主机配置文件 httpd-vhosts.conf
    vim /usr/local/apache/etc/extra/httpd-vhosts.conf
    
  2. 添加以下内容(配置两个虚拟主机,分别对应 www.sina.com 和 www.sohu.com):
    # 配置新浪虚拟主机
    <VirtualHost *:80>ServerAdmin webmaster@sina.comDocumentRoot "/usr/local/apache/htdocs/sina"ServerName www.sina.comErrorLog "logs/sina_error_log"CustomLog "logs/sina_access_log" common
    </VirtualHost># 配置搜狐虚拟主机
    <VirtualHost *:80>ServerAdmin webmaster@sohu.comDocumentRoot "/usr/local/apache/htdocs/sohu"ServerName www.sohu.comErrorLog "logs/sohu_error_log"CustomLog "logs/sohu_access_log" common
    </VirtualHost>
    
  3. 保存并退出。
原理
  • <VirtualHost *:80>:监听所有 IP 的 80 端口(HTTP 默认端口);
  • DocumentRoot:指定该虚拟主机对应的网站根目录;
  • ServerName:指定该虚拟主机对应的域名;
  • ErrorLog/CustomLog:指定错误日志和访问日志的路径。
验证

执行 cat /usr/local/apache/etc/extra/httpd-vhosts.conf,确认配置与上述一致。

步骤 4:重启 Apache 服务,使配置生效
操作
  1. 检查配置语法(避免错误):
    /usr/local/apache/bin/apachectl configtest
    
  2. 重启 Apache
    /usr/local/apache/bin/apachectl restart
    
原理

修改配置后必须重启 Apache 才能加载新的虚拟主机配置,configtest 用于提前检查配置文件语法。

验证
  • 若 configtest 输出 Syntax OK,说明配置无语法错误;
  • 执行 ps -ef | grep httpd,若能看到 Apache 进程(如 root 启动的主进程和 nobody 启动的工作进程),说明重启成功。
步骤 5:验证虚拟主机访问(客户端测试)
操作

客户端浏览器中分别访问:

  • http://www.sina.com
  • http://www.sohu.com
原理

客户端通过 hosts 文件将域名解析到服务器 IP,服务器 Apache 根据 ServerName 匹配虚拟主机,返回对应目录的 index.html

验证
  • 访问 www.sina.com,应显示 This is Sina Website
  • 访问 www.sohu.com,应显示 This is Sohu Website
  • 额外验证:在服务器 sina 目录新增文件 test.txt,客户端访问 http://www.sina.com/test.txt 应能正常显示文件内容,说明目录映射正确。

2.6.3、额外验证:命令行访问(非浏览器)

操作

在客户端执行(替换 192.168.10.80 为服务器 IP):

# 访问新浪
curl -H "Host: www.sina.com" http://192.168.10.80# 访问搜狐
curl -H "Host: www.sohu.com" http://192.168.10.80
原理

curl -H "Host: 域名" 用于模拟浏览器的 Host 请求头,测试虚拟主机的域名匹配逻辑。

验证
  • 新浪请求应输出 This is Sina Website
  • 搜狐请求应输出 This is Sohu Website

2.7 域名跳转

        Apache 的 mod_rewrite 模块通过规则匹配重写引擎,实现 URL / 域名的 “重定向” 或 “重写”。本实验通过 .htaccess 文件配置规则,将对 www.sohu.com 的请求永久重定向到 www.sina.com,核心是利用 RewriteCond 匹配域名,RewriteRule 执行重定向。

步骤(以 Apache 2.4 为例,路径需根据实际安装调整):

步骤 1:实验条件准备
1.1 确保虚拟主机可正常访问
  • 参考之前 “虚拟主机配置” 步骤,确保 www.sina.com 和 www.sohu.com 能通过浏览器正常访问(显示各自的 index.html 内容)。
1.2 开启 mod_rewrite 模块
  • 打开 Apache 主配置文件 httpd.conf
    vim /usr/local/apache2/conf/httpd.conf
    
  • 找到并取消注释(删除行首 #)以下配置,启用 mod_rewrite
    LoadModule rewrite_module modules/mod_rewrite.so
    
  • 保存并退出,重启 Apache 使模块生效:
    /usr/local/apache2/bin/apachectl restart
    
原理

mod_rewrite 是 Apache 的 “重写模块”,默认可能被注释,需手动启用才能使用 URL 重写功能。

验证

执行 httpd -M | grep rewrite,若输出 rewrite_module (shared),说明模块已加载。

步骤 2:修改虚拟主机配置,允许 .htaccess 覆盖
操作
  1. 打开虚拟主机配置文件 httpd-vhosts.conf(路径如 /usr/local/apache2/conf/extra/httpd-vhosts.conf):
    vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
    
  2. 找到 www.sohu.com 对应的 <VirtualHost> 块,在其内部添加 <Directory> 配置:
    <VirtualHost *:80>ServerAdmin webmaster@sohu.comDocumentRoot "/usr/local/apache2/htdocs/sohu"ServerName www.sohu.comErrorLog "logs/sohu_error_log"CustomLog "logs/sohu_access_log" common# 新增:允许.htaccess覆盖权限<Directory "/usr/local/apache2/htdocs/sohu">Options Indexes FollowSymLinksAllowOverride All  # 允许.htaccess覆盖配置Require all granted</Directory>
    </VirtualHost>
    
  3. 保存并退出。
原理

AllowOverride All 允许 www.sohu.com 对应的网站目录(/usr/local/apache2/htdocs/sohu)使用 .htaccess 文件覆盖 Apache 主配置的权限规则,为 mod_rewrite 提供配置入口。

验证

执行 cat /usr/local/apache2/conf/extra/httpd-vhosts.conf,确认 <Directory> 块配置正确。

步骤 3:创建 .htaccess 规则匹配文件
操作
  1. 进入 www.sohu.com 对应的网站根目录:
    cd /usr/local/apache2/htdocs/sohu
    
  2. 创建并编辑 .htaccess 文件:
    vim .htaccess
    
  3. 添加以下内容
    RewriteEngine on  # 开启重写引擎
    # 条件:当请求的域名是 www.sohu.com 时
    RewriteCond %{HTTP_HOST} ^www\.sohu\.com$
    # 规则:将所有请求永久重定向到 www.sina.com,并保留原路径($1 表示原请求的路径)
    RewriteRule ^(.*)$ http://www.sina.com/$1 [R=permanent,L]
    
  4. 保存并退出。
原理
  • RewriteEngine on:启用当前目录的重写功能;
  • RewriteCond %{HTTP_HOST} ^www\.sohu\.com$:匹配请求头中的域名是否为 www.sohu.com(正则中 . 需转义为 \.);
  • RewriteRule ^(.*)$ http://www.sina.com/$1 [R=permanent,L]
    • ^(.*)$:匹配所有 URL 路径(* 表示任意字符,() 捕获路径到 $1);
    • http://www.sina.com/$1:重定向目标,$1 替换为捕获的原路径;
    • [R=permanent]:返回 301 永久重定向状态码;
    • [L]:表示此规则为最后一条,匹配后不再执行后续规则。
验证

执行 cat /usr/local/apache2/htdocs/sohu/.htaccess,确认内容与上述修正后一致。

步骤 4:检查配置并重启 Apache
操作
  1. 检查配置语法(避免错误):
    /usr/local/apache2/bin/apachectl configtest
    
  2. 重启 Apache
    /usr/local/apache2/bin/apachectl restart
    
原理

configtest 用于提前检查 Apache 配置(包括 .htaccess)的语法错误,重启服务使新的重写规则生效。

验证
  • 若 configtest 输出 Syntax OK,说明配置无语法错误;
  • 执行 ps -ef | grep httpd,确认 Apache 进程正常运行。
步骤 5:验证域名重定向(客户端测试)
操作

客户端浏览器中访问:http://www.sohu.com

原理

客户端请求 www.sohu.com 时,Apache 会先匹配到 www.sohu.com 的虚拟主机,然后根据 .htaccess 中的规则,将请求永久重定向到 www.sina.com

验证
  • 浏览器地址栏应自动跳转为 http://www.sina.com,且页面显示 www.sina.com 的内容(如之前配置的 This is Sina Website);
  • 查看浏览器 “网络请求”(按 F12 打开开发者工具,选 “Network”),请求 www.sohu.com 的响应状态码应为 301 Moved Permanently,且 “Location” 头为 http://www.sina.com/

额外验证:命令行访问(非浏览器)

操作

在客户端执行(替换 服务器IP 为实际 Apache 服务器 IP):

curl -I -H "Host: www.sohu.com" http://服务器IP
原理

curl -I 仅显示响应头,-H "Host: www.sohu.com" 模拟浏览器的 Host 请求头,测试重定向逻辑。

验证

输出应包含:

HTTP/1.1 301 Moved Permanently
Location: http://www.sina.com/

说明重定向成功。

2.8 https

        生存环境的证书需要到真实的专门网站购买,自己做实验自己创建即可

        

一、实验原理

  • SSL/TLS 与 HTTPS:SSL(Secure Sockets Layer)/TLS(Transport Layer Security)是加密协议,HTTPS 是 “HTTP + SSL/TLS”,用于在客户端和服务器间建立加密通信通道,防止数据被窃听或篡改。
  • 自签名证书:实验环境下,可通过 OpenSSL 生成 “自己签发给自己” 的证书(生产环境需从受信任的 CA 机构购买),用于模拟 HTTPS 通信。
  • mod_ssl 模块:Apache 依赖该模块支持 SSL/TLS 协议,需启用后才能配置 HTTPS。
  • URL 重写(mod_rewrite:通过规则将 HTTP 请求强制重定向到 HTTPS,确保所有通信加密。

二、步骤(以 Apache 2.4 为例,路径需根据实际安装调整)

步骤 1:生成自签名 SSL 证书(实验用)
操作
  1. 创建证书存储目录:
    mkdir -p /usr/local/apache2/conf/cert
    cd /usr/local/apache2/conf/cert
    
  2. 生成 RSA 私钥server.key
    openssl genrsa -out server.key 2048
    
  3. 生成 证书签名请求(CSR)server.csr):
    openssl req -new -key server.key -out server.csr
    
    执行后需填写信息(如国家、组织、域名等,Common Name 需填服务器域名或 IP,实验可填 localhost)。
  4. 生成 自签名证书server.crt):
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    
原理
  • genrsa:生成 RSA 算法的私钥,用于加密通信;
  • req -new:基于私钥生成 CSR(包含服务器身份信息);
  • x509 -req:用私钥给 CSR 签名,生成自签名证书(有效期 365 天)。
验证

执行 ls /usr/local/apache2/conf/cert,应看到 server.keyserver.csrserver.crt

步骤 2:启用 mod_ssl 模块
操作
  1. 打开 Apache 主配置文件 httpd.conf
    vim /usr/local/apache2/conf/httpd.conf
    
  2. 找到并取消注释(删除行首 #)以下配置,启用 mod_ssl
    LoadModule ssl_module modules/mod_ssl.so
    Include conf/extra/httpd-ssl.conf
    
  3. 保存并退出,重启 Apache
    /usr/local/apache2/bin/apachectl restart
    
原理

mod_ssl 是 Apache 处理 SSL/TLS 协议的核心模块,httpd-ssl.conf 是 SSL 相关的子配置文件。

验证

执行 httpd -M | grep ssl,若输出 ssl_module (shared),说明模块已加载。

步骤 3:配置 SSL 虚拟主机(修改 httpd-ssl.conf
操作
  1. 打开 SSL 配置文件 httpd-ssl.conf
    vim /usr/local/apache2/conf/extra/httpd-ssl.conf
    
  2. 找到 <VirtualHost _default_:443> 块,修改为(确保与证书路径一致):
    <VirtualHost _default_:443>DocumentRoot "/usr/local/apache2/htdocs"  # 网站根目录ServerName localhost:443                  # 服务器域名+端口SSLEngine on                              # 启用 SSL 引擎SSLCertificateFile "/usr/local/apache2/conf/cert/server.crt"  # 证书文件SSLCertificateKeyFile "/usr/local/apache2/conf/cert/server.key"  # 私钥文件SSLCertificateChainFile "/usr/local/apache2/conf/cert/server.crt"  # 证书链(自签名可与证书同文件)# 可选:配置加密套件、协议等,实验用默认即可
    </VirtualHost>
    
  3. 保存并退出,重启 Apache
    /usr/local/apache2/bin/apachectl restart
    
原理
  • SSLEngine on:开启当前虚拟主机的 SSL 功能;
  • SSLCertificateFile/KeyFile/ChainFile:指定证书、私钥、证书链的路径,Apache 用这些文件建立加密连接。
验证

执行 cat /usr/local/apache2/conf/extra/httpd-ssl.conf,确认配置与上述一致。

步骤 4:验证 HTTPS 访问
操作

客户端浏览器中访问:https://服务器IP(或 https://localhost,若本地测试)。

原理

浏览器与服务器通过 SSL/TLS 握手,验证证书(自签名会提示 “不安全”,实验环境忽略即可),建立加密通道后传输 HTTP 数据。

验证
  • 浏览器应能打开页面(显示 htdocs 下的 index.html 内容);
  • 地址栏显示 “小锁” 图标(或提示 “不安全”,但能正常访问);
  • 查看 “网络请求”(F12 开发者工具),协议应为 https,响应状态码为 200 OK
步骤 5:强制 HTTPS 访问(配置 URL 重写)
操作
  1. 确保 mod_rewrite 已启用(参考之前 “mod_rewrite 启用” 步骤)。
  2. 打开 Apache 主配置文件 httpd.conf,确保网站根目录的 <Directory> 块中 AllowOverride All(允许 .htaccess 覆盖):
    <Directory "/usr/local/apache2/htdocs">Options Indexes FollowSymLinksAllowOverride All  # 允许.htaccessRequire all granted
    </Directory>
    
  3. 进入网站根目录,创建 .htaccess 并编辑:
    cd /usr/local/apache2/htdocs
    vim .htaccess
    
    添加以下内容:
    RewriteEngine On
    # 条件:若请求端口不是 443(HTTPS 默认端口)
    RewriteCond %{SERVER_PORT} !^443$
    # 规则:将所有 HTTP 请求永久重定向到 HTTPS
    RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=permanent,L]
    
  4. 保存并退出,重启 Apache
    /usr/local/apache2/bin/apachectl restart
    
原理
  • RewriteCond %{SERVER_PORT} !^443$:匹配 “请求端口不是 443” 的 HTTP 请求;
  • RewriteRule:将这些请求 ** 永久重定向(301)** 到 HTTPS 协议,确保所有通信加密。
验证
  • 在浏览器访问 http://服务器IP,应自动跳转为 https://服务器IP
  • 查看 “网络请求”,HTTP 请求的响应状态码应为 301 Moved Permanently,且 “Location” 头为 HTTPS 地址。

2.9 日志切割&不记录指定类型文件

2.9.1 日志切割

步骤 1:设置日志路径与格式(基础配置)
操作
  1. 打开 Apache 主配置文件 httpd.conf
    vim /usr/local/apache2/etc/httpd.conf
    
  2. 添加 / 修改以下日志配置(确保 logs 目录存在,若不存在则创建:mkdir /usr/local/apache2/logs):
    # 错误日志路径:记录服务器错误
    ErrorLog "logs/error.log"# 访问日志路径与格式:combined 是预定义的详细格式(包含用户代理、referer 等)
    CustomLog "logs/access.log" combined# 定义 combined 格式(若配置文件中已有,可跳过)
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    
  3. 保存并退出(vim 中按 Esc,输入 :wq 回车)。
  4. 重启 Apache 使配置生效:
    /usr/local/apache2/bin/apachectl restart
    
原理
  • ErrorLog:指定错误日志的存储路径;
  • CustomLog:指定访问日志路径,并通过 combined 格式定义日志内容的详细程度;
  • LogFormat:定义日志格式的模板,combined 是 Apache 预定义的 “包含完整请求信息” 的格式。
验证
  • 执行 ls /usr/local/apache2/logs,应看到 error.log 和 access.log(若有访问,文件会生成);
  • 访问 Apache 服务器(如浏览器输入 http://服务器IP),然后执行 cat /usr/local/apache2/logs/access.log,应能看到包含访问 IP、时间、请求路径的日志记录。
步骤 2:配置日志自动分割(rotatelogs 工具)
操作
  1. 再次打开 httpd.conf
    vim /usr/local/apache2/etc/httpd.conf
    
  2. 修改日志配置为管道到 rotatelogs(实现按天分割,保留 1 天的旧日志,时间格式为 %Y%m%d,即年 - 月 - 日):
    # 错误日志:每 86400 秒(1 天)生成一个新文件,命名为 error_20241001.log
    ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d.log 86400"# 访问日志:同样按天分割,命名为 access_20241001.log
    CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined
    
  3. 保存并退出,重启 Apache
    /usr/local/apache2/bin/apachectl restart
    
原理
  • |(管道符):将日志输出 “交给”rotatelogs 工具处理;
  • rotatelogs -l-l 表示使用本地时间(否则默认 UTC 时间,会与北京时间差 8 小时);
  • /usr/local/apache2/logs/error_%Y%m%d.log:日志文件命名格式,%Y%m%d 会被替换为当前年月日;
  • 86400:日志分割的时间间隔(秒),86400 秒 = 1 天,即每天生成一个新日志。
验证
  • 执行 ls /usr/local/apache2/bin | grep rotatelogs,确认 rotatelogs 工具存在;
  • 访问 Apache 服务器后,执行 ls /usr/local/apache2/logs,应看到以当前日期命名的日志文件(如 error_20251005.logaccess_20251005.log)。
步骤 3:验证日志分割效果(时间模拟或等待)
操作(方法 1:时间模拟,适合快速验证)
  1. 修改 rotatelogs 的分割间隔为1 分钟(将 86400 改为 60):
    ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d_%H%M.log 60"
    CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d_%H%M.log 60" combined
    
  2. 重启 Apache:
    /usr/local/apache2/bin/apachectl restart
    
  3. 等待 1 分钟,然后多次访问 Apache 服务器。
操作(方法 2:等待 1 天,适合真实验证)
  • 保持步骤 2 的配置(间隔 86400 秒),第二天查看 logs 目录,会生成新日期的日志文件。
原理

        通过缩短分割间隔,可快速验证 rotatelogs 是否按预期生成新日志文件;真实环境则依赖自然时间流逝。

验证
  • 方法 1:logs 目录会生成多个以 “时分” 结尾的日志文件(如 error_20251005_1530.logerror_20251005_1531.log),且内容对应不同时间的访问;
  • 方法 2:第二天会生成 error_20251006.logaccess_20251006.log,与前一天的日志文件区分开。
步骤 4:HTTPS 环境下的日志配置(补充)

若 Apache 启用了 HTTPS(参考之前 SSL 配置步骤),需同时修改 httpd-ssl.conf 中的日志:

操作
  1. 打开 httpd-ssl.conf
    vim /usr/local/apache2/etc/extra/httpd-ssl.conf
    
  2. 修改 SSL 虚拟主机的日志配置为管道到 rotatelogs
    <VirtualHost _default_:443># ... 其他 SSL 配置 ...ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/ssl_error_%Y%m%d.log 86400"TransferLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/ssl_access_%Y%m%d.log 86400"
    </VirtualHost>
    
  3. 重启 Apache:

    /usr/local/apache2/bin/apachectl restart
    
原理

HTTPS 的请求会被 httpd-ssl.conf 中的虚拟主机处理,因此需单独配置其错误日志(ErrorLog)和传输日志(TransferLog,对应 HTTP 的 CustomLog)。

验证

访问 https://服务器IP 后,logs 目录会生成 ssl_error_日期.log 和 ssl_access_日期.log

2.9.2 不访问指定文件类型

2.10 静态缓存 

步骤 1:启用缓存模块
操作
  1. 打开 Apache 主配置文件 httpd.conf
    vim /usr/local/apache2/conf/httpd.conf
    
  2. 找到并取消注释(删除行首 #)以下模块(若未启用):
    • mod_expires
      LoadModule expires_module modules/mod_expires.so
      
    • mod_headers:(通常默认启用,若未启用则取消注释)
      LoadModule headers_module modules/mod_headers.so
      
  3. 保存并退出,重启 Apache 使模块生效:
    /usr/local/apache2/bin/apachectl restart
    
原理

mod_expires 和 mod_headers 是 Apache 的 “缓存控制模块”,需手动启用才能使用缓存配置指令。

验证

执行 httpd -M | grep -E "expires|headers",若输出 expires_module (shared) 和 headers_module (shared),说明模块已加载。

步骤 2:用 mod_expires 配置缓存(方法 1)
操作
  1. 继续编辑 httpd.conf,在 <IfModule mod_expires.c> 块中添加缓存规则:
    <IfModule mod_expires.c>ExpiresActive On  # 启用 expires 功能# 图片(jpg/gif/png)缓存 1 天ExpiresByType image/jpeg "access plus 1 days"ExpiresByType image/gif "access plus 1 days"ExpiresByType image/png "access plus 1 days"# CSS/JS 缓存 1 小时ExpiresByType text/css "access plus 1 hours"ExpiresByType application/javascript "access plus 1 hours"# HTML 不缓存(实时更新)ExpiresByType text/html "access plus 0 seconds"
    </IfModule>
    
  2. 保存并退出,重启 Apache
    /usr/local/apache2/bin/apachectl restart
    
原理
  • ExpiresActive On:开启 mod_expires 功能;
  • ExpiresByType MIME类型 "时间规则":对指定 MIME 类型的资源,设置 “相对于访问时间的缓存有效期”(如 access plus 1 days 表示 “访问后缓存 1 天”)。
验证
  • 在网站根目录(如 /usr/local/apache2/htdocs)放入测试图片 test.jpg
  • 用 curl 访问并查看响应头:
    curl -I http://服务器IP/test.jpg
    
  • 响应头应包含 Expires(如 Expires: Fri, 28 Oct 2025 08:00:00 GMT,表示缓存到指定时间)和 Cache-Control(如 max-age=86400,即 1 天的秒数)。
步骤 3:用 mod_headers 配置缓存(方法 2,更灵活)
操作
  1. 编辑 httpd.conf,添加 <FilesMatch> 或 <Directory> 块配置 Cache-Control
    # 对所有 .jpg/.png/.gif 图片,缓存 1 天(86400 秒)
    <FilesMatch "\.(jpg|png|gif)$">Header set Cache-Control "max-age=86400"
    </FilesMatch># 对所有 .css/.js 文件,缓存 1 小时(3600 秒)
    <FilesMatch "\.(css|js)$">Header set Cache-Control "max-age=3600"
    </FilesMatch># 对 HTML 文件,不缓存
    <FilesMatch "\.html$">Header set Cache-Control "no-cache, no-store, must-revalidate"
    </FilesMatch>
    
  2. 保存并退出,重启 Apache
    /usr/local/apache2/bin/apachectl restart
    
原理
  • FilesMatch 正则:匹配指定后缀的文件;
  • Header set Cache-Control "规则":直接设置 Cache-Control 响应头,max-age 指定缓存秒数,no-cache 表示不缓存。
验证
  • 访问测试图片 test.jpg,执行 curl -I http://服务器IP/test.jpg
  • 响应头应包含 Cache-Control: max-age=86400,无 Expires 头(因为 mod_headers 直接控制 Cache-Control,优先级更高)。
步骤 4:验证缓存效果(浏览器 + 命令行)
方法 1:浏览器开发者工具
  1. 打开浏览器(如 Chrome),访问 http://服务器IP/test.jpg
  2. 按 F12 打开 “开发者工具”,切换到 “Network” 标签;
  3. 刷新页面,查看 test.jpg 的请求:
    • 第一次请求:状态码 200 OK,大小为 “实际大小”;
    • 第二次请求:状态码 304 Not Modified(或 “来自缓存”),大小为 “from disk cache” 或 “from memory cache”,说明缓存生效。
方法 2:命令行 curl
  1. 第一次请求(获取资源,触发缓存):
    curl -I http://服务器IP/test.jpg
    
    记录 Cache-Control: max-age=86400(或 Expires 时间)。
  2. 等待几秒后,再次请求:
    curl -I -H "If-Modified-Since: 第一次请求的Last-Modified时间" http://服务器IP/test.jpg
    
    Last-Modified 可从第一次响应头中获取)
  3. 响应状态码应为 304 Not Modified,说明服务器告诉浏览器 “资源未变,用缓存”。

2.11  禁止解析php

需要打开主配置目录

http://www.dtcms.com/a/455440.html

相关文章:

  • 做网站的代码难吗wordpress弹窗视频播放插件
  • 网站网址更新了怎么查镇江网站制作服务
  • 智能硬件开发流程网站优化要怎么做
  • 谁做视频网站上海网站备案中心
  • 打工人日报#20251007
  • 如何做律所网站做义工旅行有哪些网站
  • 贵阳网站建设宏思锐达银川市住房和城乡建设局网站公告
  • 连云港市建设局网站安全员考试广州网站建设支付
  • 网站粘度计算公式微信小程序制作网站
  • 有哪些做短租的网站好龙岗区住房和建设局网站打不开
  • 宝塔面板建设网站安徽人
  • 宁波制作网站企业二级域名做外贸网站好吗
  • 外卖网站的建设与推广织梦和wordpress哪个seo好
  • 专业做足球体彩网站网站备案应该怎么做
  • 什么网站可以做时间加减微信 公众号导入wordpress
  • 内江做网站哪里便宜美容院顾客管理系统软件
  • 培训网站官网企业账号登录入口
  • jq效果较多的网站世界工厂网app
  • php 手机网站乐陵seo公司
  • 上海网站制作机构西安复工无需核酸检测
  • 单页淘宝客网站2014年行吗一二三四视频社区5在线高清
  • 网站主页的要素郑州专业公司网站制作公司
  • 网站开发的平台企业网页设计模板图片
  • 多个网站优化怎么做恩施网站建设公司
  • 分类信息网站织梦模板用windows搭建手机网站
  • 安徽网站建设推广个人能接广告联盟吗
  • 汽车最专业的网站建设哪有网站给光头强做面
  • 思明区建设局官网站百度网址大全网址导航
  • 制作logo的网站静态网页制作总结
  • 重庆网站建设外包哪家好电商法规定企业网站必须做3年