一、Apache 部署
1.1 安装 Apache
1.上传 httpd 源码包至服务器
2.确认 ht tpd 服务是否安装,并安装 2.4 版本所需依赖
rpm -qa httpd
若提示已安装则进行卸载,未安装则直接执行第 3 步:
# rpm -e httpd --nodeps
-e:这是 rpm 命令的选项,表示卸载或删除一个已安装的 RPM 包。
--nodeps:这是 rpm 命令的选项,它告诉系统忽略依赖关系检查。
yum install -y apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre gcc gcc-c++ make lrzsz
3.解压 并制 定解压目录
tar zxf httpd-2.4.25.tar.gz -C /usr/src/
进入解压目录
cd /usr/src/httpd-2.4.25/
4.执行配置:
# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
其中选项作用如下:
--prefix:指定将 httpd 服务程序安装到哪个目录,如/usr/local/httpd。若不指定安装目录,默认安装在/usr/local/apache2 目录下
--enable-so:启用动态加载模块支持,使 httpd 具备进一步扩展功能的能力。
--enable-rewrite:启用网页地址重写功能,用于网站优化及目录迁移维护。
--enable-charset-lite:启动字符集支持,以便支持使用各种字符集编码的网页。
--enable-cgi:启用 CGI 脚本程序支持,便于扩展网站的应用访问能力。
5.执行编译以及安装:
make && make install
6.确认安装成功,进入安装目录查看是否有文件存在# cd /usr/local/httpd/
7.优化 路径方便管理:
ln -s /usr/local/httpd/bin/* /usr/local/bin///文件链接
创建了一个符号链接(symbolic link)来将 /usr/local/httpd/bin/ 目录中的所有文件链接到 /usr/local/bin/ 目录下。
-s 选项表示创建符号链接(而不是硬链接,符号链接是一种指向目标文件或目录的引用)。
方便直接执行命令,不用跑到httpd目录下去执行了,不创建的话可能无法直接执行 httpd -v
httpd -v //查看当前 httpd 程序版本
8.设置为开机自启 :
centos 7.5:
创建 Apache 系统控制文件:
#vim /lib/systemd/system/httpd.service
[Unit][lc1]
Description=The Apache HTTP Server
After=httpd.target
[Service] [lc2]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid ExecStart=/usr/local/bin/apachectl $OPTIONS ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=1s
[Install][lc3]
WantedBy=multi-user.target //最小化安装或者桌面版/graohical.target
systemctl daemon-reload //重载 systemctl 系统
systemctl enable httpd.service //将 httpd 服务设置为开机自启
以下两种方法都可查询开机是否启动:
systemctl list-unit-files | grep httpd.service
systemctl is-enabled httpd
1.2主要文件及目录
程序安装目录:/usr/local/httpd/
主配置文件:/usr/local/httpd/conf/httpd.conf 网页目录:/usr/local/httpd/htdocs/
服务脚本:/usr/local/httpd/bin/apachectl 主程序:/usr/local/httpd/bin/httpd
访问日志: /usr/local/httpd/logs/access_log
错误日志: /usr/local/httpd/logs/error_log
1.3配置服务器
修改主机名
vim /etc/sysconfig/network
HOSTNAME=www.chengdu.com //修改主机名,用于域名解析,可不更改在主配置文件中添加主机名:
vim /usr/local/httpd/conf/httpd.conf
ServerName www.chengdu.com
//添加此项检查配置文件是否正常:
#apachectl -t [lc4] //提示 OK 则正常启动 HTTPD 服务:
apachectl -t 是 Apache HTTP Server 的命令 ,用于测试 Apache 配置文件的语法是否正确 ,以及是否存在潜在的配置问题
systemctl start httpd
查看运行的进程,有进程表示启动成功
ps aux | grep httpd
修改默认显示网页
vim /usr/local/httpd/htdocs/index.html
www.chengdu.com //加入此内容
客户机通过服务器 IP 地址进行访问: 服务器中查看客户机访问日志记录:
tail /usr/local/httpd/logs/access_log
1.4 httpd.conf常用的全局配置参数
ServerRoot:服务目录
ServerAdmin: 管 理 员 邮 箱
User:运行服务的用户身份
Group:运行服务的组身份
ServerName:网站服务器的域名
DocumentRoot:网页文档的根目录
Listen:监听的 IP 地址、端口号
PidFile:保存 httpd 进程 PID 号的文件
DirectoryIndex:默认的索引页文件
AddDefaultCharset UTF-8 设置字符集常用的全局配置参数(续) ErrorLog:错误日志文件的位置
CustomLog:访问日志文件的位置
LogLevel:记录日志的级别,默认为 warn
Timeout:网络连接超时,默认为 300 秒
KeepAlive:是否保持连接,可选 On 或 Off
MaxKeepAliveRequests:每次连接最多请求文件数
KeepAliveTimeout:保持连接状态时的超时时间
Include:需要包含进来的其他配置文件
二、Apache 应用
2.1客户机地址限制
Require all granted //允许访问策略
Require all denied //拒绝访问策略
Require local //只允许本地访问
Require [not] host <主机名或域名列表>
Require [not] ip <ip 地址或网段列表>
举例 1:表示只禁止 IP 1.1 访问服务
<RequireAll> //使用"not"需要用到此标签,将该段加入到项目中
Require not ip 192.168.1.1
Require all granted
</RequireAll>
举例 2:表示只允许 IP 1.0 网段和 2.0 网段访问服务,不需要使用 <RequireAll>标签
Require ip 192.168.1.0/24 192.168.2.0/24
被拒绝的主机连接服务器将会显示 403 错误
2.2 用户授权访问
认证就是客户端要给服务器出示一些自己的身份证明,来证明自己是谁!一旦服务器知道了客户端的身份,就可以判定客户端可以访问的事务和资源了。 在 HTTP 中,认证通常是通过提供用户名和密码来进行认证的。
http 服务支持两种认证方式:
摘要认证(需要模块功能支持,更加安全的方式传递验证信息)
基本认证:基于用户访问控制包括认证和授权,
创建用户认证数据文件
cd /usr/local/httpd
bin/htpasswd -c /usr/local/httpd/conf/.awspwd[lc5] webadmin
//创建授权访问的用户账户文件
bin/htpasswd /usr/local/httpd/conf/.awspwd webadmin1 //添加新用户时不需要-c 选项
bin/htpasswd:这是 htpasswd 命令的路径。htpasswd 是一个用于管理 Apache HTTP Server 的密码文件的命令。
-c:这是 htpasswd 命令的选项,用于创建新的密码文件。如果指定了 -c,则表示要创建一个新的密码文件。
/usr/local/httpd/conf/.awspwd:这是新创建的密码文件的路径。在这里,密码文件将存储在 /usr/local/httpd/conf/ 目录中,并命名为 .awspwd。
webadmin:这是要添加到密码文件的用户名。用户 "webadmin" 将具有对应的密码,以便进行身份验证。
- 添加用户授权配置
vim /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/httpd/htdocs"> //在此行下添加
Authname "AAA"
(AuthName "AAA":这个指令设置了身份验证领域的名称。在登录时,用户将看到一个提示,提示他们输入用户名和密码以访问资源。在这里,名称设置为 "AAA",您可以根据需要将其更改为适当的标识符。)
Authtype Basic
(AuthType Basic :这个指令定义了身份验证的类型 ,这里是基本身份验证 (Basic Authentication)。基本身份验证是一种基本的用户名和密码验证方法)
Authuserfile /usr/local/httpd/conf/.awspwd
require valid-user //valid-user:代表所有列表中的用户,若需要指定单个用户可修改为:require webadmin
注意:当设置了主机访问控制的同时配置了验证访问,主机访问控制生效。
Require all granted //配置了主机访问又配置了验证访问,因此需要关闭主机访问控制。
Authname "AAA" Authtype Basic
Authuserfile /usr/local/httpd/conf/.awspwd require valid-user
需求:
允许 192.168.1.254 直接访问,而其他人输入密码才能访问:
Require ip 192.168.1.253
Authname "AAA"
Authtype Basic
Authuserfile /usr/local/httpd/conf/.awspwd
require valid-user
需求 2:
拒绝一个地址访问而允许其他人认证访问:
2.3 构建虚拟 web 主机
能够让一台 web 服务器同时存在多个站点!
1.基于域名的虚拟主机 ****
通过两个域名访问到不同内容
1.安装配置 DNS 服务器用于域名解析
yum install -y bind*
mv /etc/named.conf /etc/named.conf.bak
vim /etc/named.conf
options {
directory "/var/named";
};
zone "chengdu.com" IN[lc6] {
type master;
file "chengdu.com.zone";
};
zone "shanghai.com" IN {
type master;
file "shanghai.com.zone";
};
vim /var/named/chengdu.com.zone
$TTL 600
@ IN SOA[lc7] chengdu.com. admin.chengdu.com[lc8] .(
20170405
1d //刷新时间
5d //重试时间
2D //过期时间
6h //最小TTL
)
@ IN NS ns1.chengdu .com.
ns1 IN A 192.168.1.10 [lc9]
www IN A 192.168.1.10
vim /var/named/shanghai.com.zone
$TTL 600
@ IN SOA shanghai.com. admin.shanghai.com.(
20170405
1H
5M
2D
6h
)
@ IN NS ns1.shanghai.com.
ns1 IN A 192.168.1.10
www IN A 192.168.1.10
systemctl restart named
2.准备虚拟主机网页文档
mkdir /var/wwwchengdu /var/wwwshanghai //创建两台虚拟主机网页根目录
echo "www.chengdu.com" > /var/wwwchengdu/index.html
//生成网页文件内容
echo "www.shanghai.com" > /var/wwwshanghai/index.html
- 以独立的形式创建虚拟主机配置文件
mv /usr/local/httpd/conf/extra/httpd-vhosts.conf[lc10]
/usr/local/httpd/conf/extra/httpd-vhosts.conf.bak
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
我的c7.2在/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
<VirtualHost 192.168.1.10:80>
DocumentRoot "/var/wwwchengdu"
ServerName www.chengdu.com
ErrorLog "logs/www.chengdu.com.error.log"
CustomLog "logs/www.chengdu.com.custom.log" common[lc11]
</VirtualHost>
<VirtualHost 192.168.1.10:80>
DocumentRoot "/var/wwwshanghai"
ServerName www.shanghai.com
ErrorLog "logs/www.shanghai.com.error_log"
CustomLog "logs/www.shanghai.com.access_log" common
</VirtualHost>
注意:也可以将以上所有配置文件直接放在 httpd.conf 中设置虚拟主机时需要注意:
- 修改主配置文件,确定主配置文件没有访问限制拒绝策略
- 将 "/"区域设置为允许所有人访问:
<Directory /> //此区域中将拒绝所有改为允许所有
AllowOverride none[lc12]
Require all granted //将拒绝改为允许
</Directory>
- 在主配置文件中加入引用虚拟主机配置文件项:
vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf[lc13]
systemctl restart httpd
验证:访问 chengdu 域名能够看到 chengdu 内容 访问 shanghai 能够看到shanghai 内容
2.基于端口的虚拟主机
访问 www.chengdu.com得到的网页信息:www.chengdu.com
访问 www.chengdu.com:8080得到的网页信息:www.shanghai.com
在原配置文件中将shanghai 的端口号改为 8080,在 httpd.conf 中添加监听端口 8080,重启访问服务即可
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
找到 shanghai 配置区域
<VirtualHost 192.168.1.10:8080> //修改为 8080
DocumentRoot "/var/wwwshanghai"
ServerName www.chengdu.com //域名改为 www.chengdu.com
ErrorLog "logs/www.shanghai.com.error_log"
CustomLog" logs/www.shanghai.com.access_log" common
vim /usr/local/httpd/conf/httpd.conf
Listen 8080 //添加监听端口
systemctl restart httpd //重启
服务验证:
www.chengdu.com //能够访问到 chengdu 页面
www.chengdu.com:8080 //能够访问到 shanghai 页面
3.基于 IP 的虚拟主机
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost 192.168.1.11:80> //将 shanghai.com 段修改 IP 为 11
DocumentRoot "/var/wwwshanghai"
ServerName www.shanghai.com
ErrorLog"logs/www.shanghai.com.error_log"
CustomLog"logs/www.chengdu.com.access_log" common
</VirtualHost>
开放 IP 加端口的监听
Listen 192.168.1.10:80
Listen 192.168.1.11:80
#Listen 192.168.1.10:8080 //禁用此项
修改 DNS 解析:
vim /var/named/shanghai.com.zone
|---|----|-----|---------------|----------------------|
| @ | IN | SOA | shanghai.com. | admin.shanghai.com.( |
| | | | 20170405 | |
| | | | 1H | |
| | | | 5M | |
| | | | 2D | |
| | | | 6h | |
| ) | | | | |
@ IN NS ns1.shanghai.com.
ns1 IN A 192.168.1.11 //修改为 11
www IN A 192.168.1.11 //修改为 11
ifconfig ens33 192.168.1.11/24
systemctl restart named
systemctl restart httpd
注意:需要将虚拟机两张网卡都设置为同一个 vmnet 网卡,便于客户端访问验证验证:
通过域名 shanghai 能够看到 shanghai 内容
通过域名 chengdu 能够看到 chengdu 内容
通过 nslookup 也能够解析到 shanghai 域名的 IP 为 11,chengdu 的 IP 为 10,
直接通过 IP 192.168.1.10 能够访问到 chengdu 页面
直接通过 IP 192.168.1.11 能够访问到 shanghai
[lc1][Unit] 部分定义了系统服务单元的描述和相关依赖关系:
Description=The Apache HTTP Server:描述了此服务的名称。
After=httpd.target:指定了此服务应该在 httpd.target 启动之后启动。
httpd.target 是 systemd 中用于表示 Apache HTTP Server 服务的一个目标单元(target unit)。在 systemd 中,目标单元是一种特殊的单元类型,它代表了一组相关的服务单元。httpd.target 用于管理与 Apache HTTP Server 相关的服务单元。
[lc2][Service] 部分定义了服务的运行参数和行为:
Type=forking:指定服务以 fork 模式运行,通常用于以后台方式运行的进程。
PIDFile=/usr/local/httpd/logs/httpd.pid:指定了 Apache HTTP Server 进程的 PID 文件的路径。
ExecStart=/usr/local/bin/apachectl OPTIONS:定义了启动服务时执行的命令。这里使用 apachectl 脚本来启动 Apache,OPTIONS 变量包含了一些启动选项。
ExecReload=/bin/kill -HUP $MAINPID:定义了重新加载服务时执行的命令,通常用于重新加载配置。
KillMode=process:指定在终止服务时以进程为单位终止。
Restart=on-failure:指定在服务故障时重启。
RestartSec=1s:定义了重启服务的等待时间。
[lc3][Install] 部分定义了服务的安装参数:
WantedBy=multi-user.target:指定了服务应该在 multi-user.target 启动时自动启用,这是通常用于多用户模式的目标。
[lc5].前缀的是个隐藏文件ls -a查看
[lc6]· IN" 是区域的类别,表示这是一个Internet类别的区域。
· "type master;" 表示该域名区域是一个主区域,即该服务器是该域名区域的主服务器,负责管理该区域的资源记录。
· "file "chengdu.com.zone";" 指定了与该域名区域关联的数据文件。在这种情况下,数据文件名为 "chengdu.com.zone",其中包含了该域名区域的资源记录信息。
[lc7]Start of Authority(SOA)记录,用于标识特定域名区域的权威源
[lc8]admin.chengdu.com.:这是指定了这个域名区域的权威DNS服务器的域名。
20170405:这是序列号,表示了此区域文件的版本号。通常在每次更新区域文件时递增。
1d:这是刷新时间(Refresh),表示其他DNS服务器应该多久更新一次该区域的信息。
5d:这是重试时间(Retry),表示如果刷新失败,其他DNS服务器多久后应该重试。
2D:这是过期时间(Expire),表示其他DNS服务器在多久后应该停止使用此区域文件。
6h ):这是最小TTL(Time to Live),表示DNS记录在缓存中应该存储多久,这里是6小时。
[lc9]NS:表示这是一个Name Server记录。
ns1.chengdu.com.:是权威DNS服务器的域名,它负责管理这个域名区域的DNS解析。
ns1:是主机名。
A:表示这是一个IPv4地址记录。
[lc10]httpd.conf 是 Apache HTTP服务器的主要配置文件。
它包含了全局的服务器配置选项,如端口设置、主服务器的文档根目录、全局模块加载等。
httpd.conf 包含了所有虚拟主机(Virtual Host)配置的基本设置,这个文件对整个服务器的行为起着全局性的控制作用。
httpd-vhosts.conf 是一个可选的配置文件,用于定义虚拟主机的详细配置信息。
它通常包含了针对每个虚拟主机的配置,包括域名、文档根目录、日志文件等。
使用 httpd-vhosts.conf 可以轻松地设置多个虚拟主机,每个虚拟主机可以处理不同的域名或IP地址上的请求。
这个文件用于定义虚拟主机的特定行为和属性,以允许多个网站在同一台服务器上共存。
[lc11]使用的是一个名为 "common" 的自定义日志格式。
"%h %l %u %t \"%r\" %>s %b"
每个符号的含义如下:
%h: 客户端的IP地址
%l: 客户端的标识符,通常是横杠 "-"
%u: 请求的用户标识符,通常也是横杠 "-"
%t: 请求的时间戳,通常在方括号内,例如 "[06/Sep/2023:12:34:56 +0000]"
\"%r\": 请求的第一行,包括HTTP方法、请求的页面路径和HTTP协议版本
%>s: 响应的HTTP状态码
%b: 响应的字节数(不包括HTTP标头)
[lc12]AllowOverride none:这行配置表示禁用 .htaccess 文件中的任何覆盖规则。这通常是默认设置,确保不会使用任何在 .htaccess 文件中定义的自定义规则。
Require all granted:这行配置允许所有用户访问这个目录,将拒绝改为允许,从而允许任何用户访问 / 目录及其内容。
.htaccess 是一个特殊的配置文件,通常用于配置和控制 Apache HTTP 服务器在特定目录中的行为。
.htaccess 文件通常包含一系列的指令和规则,用于定义如何处理特定目录下的请求,包括重定向、身份验证、缓存控制、URL重写等。这使得网站管理员可以在不更改主服务器配置的情况下,针对特定目录或文件执行定制的操作。
[lc13]是用于在 Apache HTTP 服务器配置中包含另一个配置文件 httpd-vhosts.conf 的指令。
具体来说,这行指令告诉 Apache 服务器去加载 httpd-vhosts.conf 文件中的虚拟主机配置信息。