Apache 部署配置

一、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\]](#[lc1]) Description=The Apache HTTP Server After=httpd.target \[Service\] [\[lc2\]](#[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\]](#[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 HOSTNA[ME=www.chengdu.c](http://www.chengdu.com/ "ME=www.chengdu.c")om //修改主机名,用于域名解析,可不更改在主配置文件中添加主机名: # vim /usr/local/httpd/conf/httpd.conf ServerName www.chengdu.com //添加此项检查配置文件是否正常: #**apachectl -t** **[\[lc4\]](#[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 \ 举例 1:表示只禁止 IP 1.1 访问服务 \ //使用"not"需要用到此标签,将该段加入到项目中 Require not ip 192.168.1.1 Require all granted \ 举例 2:表示只允许 IP 1.0 网段和 2.0 网段访问服务,不需要使用 \标签 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\]](#[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" 将具有对应的密码,以便进行身份验证。 1. 添加用户授权配置 # vim /usr/local/httpd/conf/httpd.conf \ //在此行下添加 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: 拒绝一个地址访问而允许其他人认证访问: ![](https://file.jishuzhan.net/article/1767002481075687425/8ce331b0bf0c820c7949f948b8c0da8b.webp) ### 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\]](#[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\]](#[lc7]) chengdu.com. admin.chengdu.com[\[lc8\]](#[lc8]) .( 20170405 1d //刷新时间 5d //重试时间 2D //过期时间 6h //最小TTL ) @ IN NS ns1.chengdu .com. ns1 IN A 192.168.1.10 [\[lc9\]](#[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 1. 以独立的形式创建虚拟主机配置文件 # mv /usr/local/httpd/conf/extra/httpd-vhosts.conf[\[lc10\]](#[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 \ DocumentRoot "/var/wwwchengdu" ServerName **www.chengdu.com** ErrorLog "logs/www.chengdu.com.error.log" CustomLog "logs/www.chengdu.com.custom.log" common[\[lc11\]](#[lc11]) \ \ DocumentRoot "/var/wwwshanghai" ServerName **www.shanghai.com** ErrorLog "logs/www.shanghai.com.error_log" CustomLog "logs/www.shanghai.com.access_log" common \ 注意:也可以将以上所有配置文件直接放在 httpd.conf 中设置虚拟主机时需要注意: 1. 修改主配置文件,确定主配置文件没有访问限制拒绝策略 2. 将 "/"区域设置为允许所有人访问: \ //此区域中将拒绝所有改为允许所有 AllowOverride none[\[lc12\]](#[lc12]) Require all granted //将拒绝改为允许 \ 1. 在主配置文件中加入引用虚拟主机配置文件项: # vim /usr/local/httpd/conf/httpd.conf Include conf/extra/httpd-vhosts.conf[\[lc13\]](#[lc13]) ![](https://file.jishuzhan.net/article/1767002481075687425/acb12b9b1b13c9fa0203ddf9f0eecd32.webp) # systemctl restart httpd 验证:访问 chengdu 域名能够看到 chengdu 内容 访问 shanghai 能够看到shanghai 内容 #### 2.基于端口的虚拟主机 访问 [www.chengdu.com](http://www.chengdu.com/ "www.chengdu.com ")得到的网页信息:[www.chengdu.com](http://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 配置区域 \ //修改为 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 \ //将 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 \ 开放 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\]](#[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\]](#[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\]](#[lc3])\[Install\] 部分定义了服务的安装参数: WantedBy=multi-user.target:指定了服务应该在 multi-user.target 启动时自动启用,这是通常用于多用户模式的目标。 [\[lc4\]](#[lc4]) [\[lc5\]](#[lc5]).前缀的是个隐藏文件ls -a查看 [\[lc6\]](#[lc6])· IN" 是区域的类别,表示这是一个Internet类别的区域。 · "type master;" 表示该域名区域是一个主区域,即该服务器是该域名区域的主服务器,负责管理该区域的资源记录。 · "file "chengdu.com.zone";" 指定了与该域名区域关联的数据文件。在这种情况下,数据文件名为 "chengdu.com.zone",其中包含了该域名区域的资源记录信息。 [\[lc7\]](#[lc7])Start of Authority(SOA)记录,用于标识特定域名区域的权威源 [\[lc8\]](#[lc8])admin.chengdu.com.:这是指定了这个域名区域的权威DNS服务器的域名。 20170405:这是序列号,表示了此区域文件的版本号。通常在每次更新区域文件时递增。 1d:这是刷新时间(Refresh),表示其他DNS服务器应该多久更新一次该区域的信息。 5d:这是重试时间(Retry),表示如果刷新失败,其他DNS服务器多久后应该重试。 2D:这是过期时间(Expire),表示其他DNS服务器在多久后应该停止使用此区域文件。 6h ):这是最小TTL(Time to Live),表示DNS记录在缓存中应该存储多久,这里是6小时。 [\[lc9\]](#[lc9])NS:表示这是一个Name Server记录。 ns1.chengdu.com.:是权威DNS服务器的域名,它负责管理这个域名区域的DNS解析。 ns1:是主机名。 A:表示这是一个IPv4地址记录。 [\[lc10\]](#[lc10])httpd.conf 是 Apache HTTP服务器的主要配置文件。 它包含了全局的服务器配置选项,如端口设置、主服务器的文档根目录、全局模块加载等。 httpd.conf 包含了所有虚拟主机(Virtual Host)配置的基本设置,这个文件对整个服务器的行为起着全局性的控制作用。 httpd-vhosts.conf 是一个可选的配置文件,用于定义虚拟主机的详细配置信息。 它通常包含了针对每个虚拟主机的配置,包括域名、文档根目录、日志文件等。 使用 httpd-vhosts.conf 可以轻松地设置多个虚拟主机,每个虚拟主机可以处理不同的域名或IP地址上的请求。 这个文件用于定义虚拟主机的特定行为和属性,以允许多个网站在同一台服务器上共存。 [\[lc11\]](#[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\]](#[lc12])AllowOverride none:这行配置表示禁用 .htaccess 文件中的任何覆盖规则。这通常是默认设置,确保不会使用任何在 .htaccess 文件中定义的自定义规则。 Require all granted:这行配置允许所有用户访问这个目录,将拒绝改为允许,从而允许任何用户访问 / 目录及其内容。 .htaccess 是一个特殊的配置文件,通常用于配置和控制 Apache HTTP 服务器在特定目录中的行为。 .htaccess 文件通常包含一系列的指令和规则,用于定义如何处理特定目录下的请求,包括重定向、身份验证、缓存控制、URL重写等。这使得网站管理员可以在不更改主服务器配置的情况下,针对特定目录或文件执行定制的操作。 [\[lc13\]](#[lc13])是用于在 Apache HTTP 服务器配置中包含另一个配置文件 httpd-vhosts.conf 的指令。 具体来说,这行指令告诉 Apache 服务器去加载 httpd-vhosts.conf 文件中的虚拟主机配置信息。

相关推荐
ps酷教程16 小时前
Apache httpclient & okhttp(2)
okhttp·apache
沙子可可21 小时前
Apache Camel指南-第四章:路由径构建之异常处理
apache·集成学习
程序猿熊跃晖21 小时前
Excel 数据导入与 SQL 生成:基于 Hutool 和 Apache POI 的优雅实践
sql·apache·excel
SeaTunnel3 天前
Apache SeaTunnel 2.3.10 正式发布 —— 全新功能与多项改进,助力数据集成再升级!
apache
路由侠内网穿透3 天前
本地部署开源流处理框架 Apache Flink 并实现外部访问
大数据·网络协议·tcp/ip·flink·服务发现·apache·consul
故事与他6454 天前
TBKDVR硬盘录像机device.rsp命令执行漏洞
服务器·网络·数据库·安全·网络安全·apache
DDDiccc6 天前
项目-苍穹外卖(十七) Apache POI+导出数据
apache
智慧源点6 天前
Apache Doris 高频问题排查指南:从报错到性能优化
apache
摇滚侠7 天前
org.apache.maven.surefire:surefire-junit-platform:jar:2.22.2 Maven打包失败
junit·maven·apache
爱穿衬衫的张某某7 天前
httpClient_apache过滤ssl证书校验
网络协议·apache·ssl