凌峰创科服务平台

linux apache 服务器

  1. Apache 简介:它是什么,为什么选择它?
  2. 核心概念:理解 Apache 的工作方式。
  3. 在 Linux 上的安装与配置:以 Ubuntu/Debian 和 CentOS/RHEL 为例。
  4. 常用配置示例:虚拟主机、重定向、SSL 等。
  5. 管理命令:启动、停止、重启、查看状态。
  6. 安全与性能优化:一些最佳实践。
  7. 日志管理:如何排查问题。
  8. 总结与进阶

Apache 简介

Apache HTTP Server(通常简称为 Apache)是世界上最流行的 Web 服务器软件之一,由 Apache 软件基金会维护,它是一个开源、跨平台、稳定可靠的软件。

linux apache 服务器-图1
(图片来源网络,侵删)

为什么选择 Apache?

  • 稳定性和可靠性:经过数十年发展,在各种流量和环境下都表现出色。
  • 高度模块化:核心功能非常简洁,通过加载不同的模块(如 mod_php, mod_ssl, mod_rewrite)来扩展功能,非常灵活。
  • 强大的兼容性:几乎可以运行在任何 Linux 发行版、Unix、Windows 系统上。
  • 丰富的文档和社区:遇到任何问题,都能找到大量的解决方案和社区支持。
  • 开源免费:无需任何费用。

核心概念

在配置 Apache 之前,理解这几个核心概念至关重要。

a. 配置文件位置

  • 主配置文件/etc/apache2/apache2.conf (Ubuntu/Debian) 或 /etc/httpd/conf/httpd.conf (CentOS/RHEL)。
  • 站点配置目录
    • Ubuntu/Debian: /etc/apache2/sites-available/ (存放可用站点配置) 和 /etc/apache2/sites-enabled/ (存放启用的站点配置,通常是 sites-available 中文件的软链接)。
    • CentOS/RHEL: /etc/httpd/conf.d/ (所有站点配置文件都直接放在这里,文件名以 .conf
  • 模块配置目录
    • Ubuntu/Debian: /etc/apache2/mods-available//etc/apache2/mods-enabled/
    • CentOS/RHEL: 模块通常直接在主配置文件 httpd.conf/etc/httpd/conf.d/ 中的 <IfModule> 块里配置。

b. 目录块 (<Directory>, <VirtualHost>, <Location>)

Apache 使用 XML 风格的标签(称为“容器”或“块”)来组织配置。

  • <Directory /path/to/dir>:用于指定对服务器上某个特定目录的访问控制、权限等设置。
  • *`<VirtualHost :80>**:**虚拟主机**的核心,一个物理服务器上可以通过这个标签托管多个独立的网站(例如example.comtest.com),每个` 块定义一个网站的配置。
  • <Location /url/path>:基于 URL 路径进行配置,常用于配置特定 URL 的访问权限或重写规则。

c. 权限控制

  • Require all granted:允许所有客户端访问,这是最宽松的设置。
  • Require all denied:拒绝所有客户端访问。
  • Require local:只允许本机(0.0.1)访问。
  • Require ip 192.168.1.0/24:只允许指定网段的 IP 访问。

在 Linux 上的安装与配置

a. 安装 (以 Ubuntu/Debian 为例)

# 更新软件包列表
sudo apt update
# 安装 apache2
sudo apt install apache2
# 检查服务状态
sudo systemctl status apache2

安装完成后,Apache 会自动启动,你可以通过浏览器访问服务器的 IP 地址,应该能看到 "Apache2 Ubuntu Default Page"。

linux apache 服务器-图2
(图片来源网络,侵删)

b. 安装 (以 CentOS/RHEL 为例)

# 更新软件包
sudo yum update
# 安装 httpd
sudo yum install httpd
# 启动并设置开机自启
sudo systemctl start httpd
sudo systemctl enable httpd
# 检查服务状态
sudo systemctl status httpd

同样,在浏览器中访问服务器 IP,会看到 "Apache Test Page"。

c. 基本配置流程 (以 Ubuntu/Debian 为例)

  1. 创建网站目录

    # 为网站 example.com 创建目录
    sudo mkdir -p /var/www/example.com/html
  2. 设置目录权限

    # 将目录所有者设置为当前用户,方便管理文件
    sudo chown -R $USER:$USER /var/www/example.com/html
    # 设置适当的权限
    sudo chmod -R 755 /var/www/example.com
  3. 创建一个测试页面

    # 创建一个简单的 index.html
    nano /var/www/example.com/html/index.html

    在文件中写入一些内容,

    <html>
    <head>
        <title>Welcome to example.com!</title>
    </head>
    <body>
        <h1>Success! Your server is working!</h1>
    </body>
    </html>
  4. 创建虚拟主机配置文件

    # 创建配置文件
    sudo nano /etc/apache2/sites-available/example.com.conf
    <VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/example.com/html
        <Directory /var/www/example.com/html>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    • ServerName:你的域名。
    • DocumentRoot:网站文件的根目录。
    • <Directory>:定义对网站根目录的访问权限,AllowOverride All 允许使用 .htaccess 文件。
  5. 启用站点和模块

    # 启用新站点 (会创建一个到 sites-enabled 的软链接)
    sudo a2ensite example.com.conf
    # 启用 rewrite 模块 (常用于 URL 重写)
    sudo a2enmod rewrite
    # 重新加载 Apache 配置,使更改生效
    sudo systemctl reload apache2
  6. 配置 DNS 和防火墙

    • DNS:确保你的域名 example.com 的 A 记录指向了服务器的公网 IP。

    • 防火墙

      # Ubuntu (ufw)
      sudo ufw allow 'Apache Full'
      # CentOS (firewalld)
      sudo firewall-cmd --permanent --add-service=http
      sudo firewall-cmd --permanent --add-service=https
      sudo firewall-cmd --reload

通过浏览器访问 http://example.com,你应该能看到你创建的测试页面了。


常用配置示例

a. 强制 HTTPS (HTTP 重定向到 HTTPS)

在虚拟主机配置中,可以这样写:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    # 将所有 HTTP 请求重定向到 HTTPS
    Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/html
    # SSL 配置 (需要先安装证书)
    SSLEngine on
    SSLCertificateFile /path/to/your/fullchain.pem
    SSLCertificateKeyFile /path/to/your/privkey.pem
    <Directory /var/www/example.com/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

b. 使用 .htaccess 文件 (URL 重写)

这是最常见的需求之一,用于实现伪静态。

  1. 确保在虚拟主机的 <Directory> 块中设置了 AllowOverride All
  2. 在网站根目录 (/var/www/example.com/html/) 下创建 .htaccess 文件。

示例:将 example.com/user.php?id=123 变成 example.com/user/123

.htaccess 文件中写入:

RewriteEngine On
# 如果请求的不是真实文件或目录,则进行重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 规则:将 /user/123 这样的请求,重写为 /user.php?id=123
RewriteRule ^user/([0-9]+)/?$ user.php?id=$1 [L,QSA]

管理命令

命令 (Ubuntu/Debian) 命令 (CentOS/RHEL) 描述
sudo systemctl start apache2 sudo systemctl start httpd 启动 Apache 服务
sudo systemctl stop apache2 sudo systemctl stop httpd 停止 Apache 服务
sudo systemctl restart apache2 sudo systemctl restart httpd 重启 Apache 服务 (应用配置更改)
sudo systemctl reload apache2 sudo systemctl reload httpd 优雅地重新加载配置 (不中断连接)
sudo systemctl status apache2 sudo systemctl status httpd 查看 Apache 服务状态
sudo systemctl enable apache2 sudo systemctl enable httpd 设置开机自启
sudo systemctl disable apache2 sudo systemctl disable httpd 取消开机自启

安全与性能优化

安全性

  • 保持更新:定期更新系统和 Apache 软件包。
  • 最小权限原则:运行 Apache 的用户(通常是 www-dataapache)只授予其必要的文件和目录权限。
  • 禁用不必要的模块:使用 a2dismod (Ubuntu) 或注释掉 LoadModule (CentOS) 来禁用你不需要的模块,减少攻击面。
  • 配置防火墙:只开放必要的端口(80, 443)。
  • 使用 SSL/TLS:为所有网站启用 HTTPS,加密数据传输,可以使用 Let's Encrypt 免费获取证书。

性能优化

  • 启用缓存模块:如 mod_expires (设置 HTTP 缓存头) 和 mod_headers
  • :启用 mod_deflate 来压缩文本文件(HTML, CSS, JS),减少传输大小。
  • 使用事件 MPM:现代 Linux 系统推荐使用 event 多路处理模型,它比传统的 prefork 更高效,能处理更多并发连接,在 Ubuntu 上通常是默认的。
  • 调整 KeepAliveKeepAlive On 可以复用 TCP 连接,减少握手开销,但也会占用服务器资源,需要根据实际情况调整 KeepAliveTimeout

日志管理

Apache 有两种主要的日志:

  • 访问日志 (access.log):记录了所有客户端的请求,包括 IP、访问时间、请求的资源、HTTP 状态码、用户代理等。
  • 错误日志 (error.log):记录了服务器运行中遇到的错误和警告,是排查问题的首选。

日志轮转:日志文件会越来越大,必须进行轮转管理。logrotate 是 Linux 下标准的日志轮转工具,通常已经集成在 Apache 的安装中,它会自动按天或按大小切割日志,并压缩旧的日志文件。


总结与进阶

Apache 是一个非常成熟和强大的工具,掌握了以上基础,你已经可以搭建和管理一个功能完善的 Web 服务器了。

进阶方向:

  • 负载均衡:使用 mod_proxy_balancer 将流量分发到多个后端服务器。
  • 反向代理:使用 mod_proxy 将 Apache 作为反向代理,将请求转发给应用服务器(如 Tomcat, Node.js, Gunicorn)。
  • 性能监控:集成 mod_status 来实时查看服务器的性能和连接状态。
  • 容器化:学习如何使用 Docker 来部署和管理 Apache,实现环境一致性和快速扩展。

希望这份详细的指南能帮助你更好地理解和使用 Linux 上的 Apache 服务器!

分享:
扫描分享到社交APP
上一篇
下一篇