Skip to content

Apache部署

Apache HTTP Server是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性。被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

源码编译安装

openEuler系统

系统版本

此案例基于openLuer-24.03 (LTS)版本

bash
cat /etc/os-release

获取源码

bash
wget https://archive.apache.org/dist/httpd/httpd-2.4.54.tar.gz
wget https://dlcdn.apache.org/apr/apr-1.7.5.tar.g
wget https://dlcdn.apache.org/apr/apr-util-1.6.3.tar.gz

安装支持程序

bash
dnf install -y gcc gcc-c++ make zlib-devel pcre-devel expat-devel libtool openssl-devel

解压安装包到指定路径

bash
tar xf httpd-2.4.54.tar.gz -C /usr/src/
tar xf apr-1.7.5.tar.gz -C /usr/src
tar xf apr-util-1.6.3.tar.gz -C  /usr/src

## 将apr和apr-util 移动到/httpd-2.4.54/srclib/下
mv /usr/src/apr-1.7.5/ /usr/src/httpd-2.4.54/srclib/apr
mv /usr/src/apr-util-1.6.3/ /usr/src/httpd-2.4.54/srclib/apr-util

进行预配置

bash
# 执行完预配置后,立刻执行echo $? 结果必须是0才表明上一步操作没有问题
./configure --prefix=/usr/local/apache

编译

bash
# 如果编译失败可使用make clean清除编译缓存
# 使用-j参数同时运行多个编译任务,$(nproc)可以识别计算机核心数如:make -j$(nproc)
make
# 检测是否编译成功
echo $?

安装

bash
make install
# 检测是否编译成功
echo $?

Centos系统

和openEuler系统一样

Ubuntu系统

系统版本

此案例为Ubuntu-20.04.2 LTS (Focal Fossa)版本

bash
cat /etc/os-release

获取源码

bash
wget https://archive.apache.org/dist/httpd/httpd-2.4.54.tar.gz
wget https://dlcdn.apache.org/apr/apr-1.7.5.tar.g
wget https://dlcdn.apache.org/apr/apr-util-1.6.3.tar.gz

安装支持程序

bash
apt update -y
apt install build-essential libpcre3 libpcre3-dev libssl-dev libexpat1-dev libapr1-dev libaprutil1-dev  -y

解压安装包到指定路径

bash
tar xf httpd-2.4.54.tar.gz -C /usr/src/
tar xf apr-1.7.5.tar.gz -C /usr/src
tar xf apr-util-1.6.3.tar.gz -C  /usr/src

## 将apr和apr-util 移动到/httpd-2.4.54/srclib/下
mv /usr/src/apr-1.7.5/ /usr/src/httpd-2.4.54/srclib/apr
mv /usr/src/apr-util-1.6.3/ /usr/src/httpd-2.4.54/srclib/apr-util

进行预配置

bash
# 执行完预配置后,立刻执行echo $? 结果必须是0才表明上一步操作没有问题
./configure --prefix=/usr/local/apache

编译

bash
# 如果编译失败可使用make clean清除编译缓存
# 使用-j参数同时运行多个编译任务,$(nproc)可以识别计算机核心数如:make -j$(nproc)
make
# 检测是否编译成功
echo $?

安装

bash
make install
# 检测是否编译成功
echo $?

配置

安装后的路径为/usr/local/apache,是由预配置时--prefix设定的

修改配置文件

备份配置文件

bash
cd /usr/loacl/apache/conf && mkdir bak
cp ./httpd.conf bak/httpd-$(date +%F).conf

# vim打开文件搜索ServerName将195的注释取消,
#ServerName www.example.com:80

httpd.conf详解

全局环境配置

全局环境配置部分主要设置一些全局性的参数,这些参数对整个 Apache 服务器实例起作用。

bash
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 60
  • ServerRoot: 指定 Apache 的根目录,通常包含配置文件、日志文件等。
  • PidFile: 指定存储 Apache 主进程 ID(PID)的文件位置。
  • Timeout: 设置服务器等待请求完成的时间,单位为秒。

核心服务器配置

这些指令控制服务器的一些基本特性,如模块加载、用户权限等。

bash
LoadModule authz_core_module modules/mod_authz_core.so
User apache
Group apache
  • LoadModule: 加载指定的模块,使其在服务器中可用。
  • User 和 Group: 指定运行 Apache 进程的用户和用户组。

日志配置

日志配置部分定义了错误日志和访问日志的记录方式和位置。

bash
ErrorLog "logs/error_log"
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "logs/access_log" common
  • ErrorLog: 指定错误日志文件的位置。
  • LogLevel: 设置日志记录的详细程度。
  • LogFormat: 定义日志格式。
  • CustomLog: 指定访问日志文件的位置及使用的日志格式。

主机配置

主机配置部分可以包含多个虚拟主机的配置,每个虚拟主机都是一个独立的网站。

bash
<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    DocumentRoot "/var/www/html/example"
    ServerName example.com
    ErrorLog "logs/example-error_log"
    CustomLog "logs/example-access_log" common
</VirtualHost>
  • : 定义一个虚拟主机。
  • ServerAdmin: 指定管理员的电子邮件地址。
  • DocumentRoot: 指定网站的根目录。
  • ServerName: 指定虚拟主机的域名。
  • ErrorLog 和 CustomLog: 定义虚拟主机的日志文件。

目录配置

目录配置部分定义了如何处理特定目录中的请求,可以设置访问权限、索引文件等。

bash
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
  • : 定义对特定目录的设置。

  • Options: 设置目录的选项,如是否允许目录浏览(Indexes),是否跟随符号链接(FollowSymLinks)等。

  • AllowOverride: 指定是否允许 .htaccess 文件覆盖配置。

  • Require: 设置访问权限。

模块配置

模块配置部分用于配置特定模块的行为,例如 SSL 模块、代理模块等。

bash
<IfModule ssl_module>
    Listen 443
    SSLCertificateFile "/etc/pki/tls/certs/localhost.crt"
    SSLCertificateKeyFile "/etc/pki/tls/private/localhost.key"
</IfModule>

<IfModule mod_proxy.c>
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /example http://backend_server:8080/example
    ProxyPassReverse /example http://backend_server:8080/example
</IfModule>
  • : 条件性地包含模块配置,当模块被加载时才应用这些配置。

  • SSLCertificateFile 和 SSLCertificateKeyFile: 定义 SSL 证书和密钥文件的位置。

  • ProxyRequests, ProxyPass, ProxyPassReverse: 配置代理服务器的相关设置。

文件包含

可以包含其他配置文件,以组织和管理配置。

bash
Include conf.modules.d/*.conf
IncludeOptional sites-enabled/*.conf
  • Include: 包含指定路径下的配置文件。
  • IncludeOptional: 可选地包含配置文件,如果文件不存在不会报错。

启动

bash
/usr/local/apache/bin/apachectl start

systemctl 命令启动

创建服务用户

bash
useradd -Ms /sbin/nologin www

修改服务目录为程序用户

bash
chown www:www -R /usr/local/apache

修改httpd.conf程序用户

bash
sed -i 's/User daemon/User www/;s/Group daemon/Group www/' /usr/local/apache/conf/httpd.conf

编辑.service

bash
cat > /usr/lib/systemd/system/httpd.service << EOF
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
EnvironmentFile=/usr/local/apache/conf/httpd.conf
ExecStart=/usr/local/apache/bin/apachectl
ExecReload=/usr/local/apache/bin/apachectl graceful
ExecStop=/usr/local/apache/bin/apachectl stop
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

重新加载unit文件

bash
systemctl daemon-reload

设置开机自动启动

bash
systemctl enable httpd

启动apache

bash
systemctl start httpd

停止apache

bash
systemctl stop httpd

服务检测

bash
# 查看进程
ps aux | grep "httpd"

关闭防火墙

bash
# 关闭防火墙
systemctl stop firewalld
# 永久关闭
systemctl disable firewalld