• 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

    举例 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]  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:

    拒绝一个地址访问而允许其他人认证访问:

    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

    DocumentRoot "/var/wwwchengdu"

    ServerName www.chengdu.com

    ErrorLog "logs/www.chengdu.com.error.log"

    CustomLog "logs/www.chengdu.com.custom.log" common[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] 

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

    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 配置区域

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

  • 相关阅读:
    Linux·驱动中的并发
    darknet框架GPU编译安装
    npm run build 报错:error TS7026: JSX element implicitly has type
    容易理解的归并排序(C语言)
    java ssm勤工助学岗位管理系统
    2022 IDEA (学生邮箱认证)安装使用教程以及基础配置教程
    单例设计模式
    【JavaScript-动画原理】如何使用js进行动画效果的实现
    19Linux基本使用和web程序部署
    服务和协议的关系?
  • 原文地址:https://blog.csdn.net/qq_48257021/article/details/136599247