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]

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" 将具有对应的密码,以便进行身份验证。

  1. 添加用户授权配置

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

  1. 以独立的形式创建虚拟主机配置文件

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 中设置虚拟主机时需要注意:

  1. 修改主配置文件,确定主配置文件没有访问限制拒绝策略
  2. 将 "/"区域设置为允许所有人访问:

<Directory /> //此区域中将拒绝所有改为允许所有

AllowOverride none[lc12]

Require all granted //将拒绝改为允许

</Directory>

  1. 在主配置文件中加入引用虚拟主机配置文件项:

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 启动时自动启用,这是通常用于多用户模式的目标。

[lc4]

[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 文件中的虚拟主机配置信息。

相关推荐
热爱编程的小曾33 分钟前
下载Stegsolve.jar后运行报错 ”Error: Unable to access jarfile stegslove. ”
apache
鸠摩智首席音效师7 小时前
如何解决 Apache 中 “CORS no allow credentials” 错误 ?
apache
~央千澈~13 小时前
如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈
前端·apache
鸠摩智首席音效师1 天前
如何在 Apache 中创建单个文件的别名 ?
apache
Hello.Reader2 天前
深入解析 Apache APISIX
java·apache
hwscom2 天前
如何永久解决Apache Struts文件上传漏洞
java·服务器·struts·web安全·apache
白开水2332 天前
Apache RocketMQ 5.1.3安装部署文档
apache·rocketmq
s甜甜的学习之旅3 天前
Apache POI练习代码
apache
是小崔啊3 天前
开源轮子 - Apache Common
java·开源·apache
程序猿阿伟4 天前
《探索 Apache Spark MLlib 与 Java 结合的卓越之道》
java·spark-ml·apache