引言

Rocky Linux是一个社区支持的企业级操作系统,设计为CentOS的完全兼容替代品。它提供了稳定、安全的运行环境,非常适合用于部署Web服务器。Apache HTTP Server(简称Apache)是世界上使用最广泛的Web服务器软件之一,以其稳定性、灵活性和丰富的功能而闻名。

本教程将详细介绍如何在Rocky Linux系统上使用Yum包管理器安装和配置Apache Web服务器,从基础安装到高级设置,帮助您一步到位地搭建起功能完善的Web服务器环境。无论您是系统管理员还是Web开发人员,本教程都将为您提供实用的指导和解决方案。

准备工作

在开始安装Apache之前,我们需要确保系统满足基本要求并完成一些准备工作。

系统要求

  • Rocky Linux 8或更高版本(本教程以Rocky Linux 8为例)
  • 具有sudo权限的用户账户
  • 至少512MB RAM(推荐1GB以上)
  • 至少1GB的可用磁盘空间

更新系统

首先,让我们更新系统软件包到最新版本,以确保所有安全补丁和更新都已应用:

sudo yum update -y 

检查系统版本

确认您正在使用的Rocky Linux版本:

cat /etc/os-release 

您应该看到类似以下的输出:

NAME="Rocky Linux" VERSION="8.5 (Green Obsidian)" ID="rocky" ID_LIKE="rhel centos fedora" VERSION_ID="8.5" PLATFORM_ID="platform:el8" PRETTY_NAME="Rocky Linux 8.5 (Green Obsidian)" ANSI_COLOR="0;32" CPE_NAME="cpe:/o:rocky:rocky:8.5:GA" HOME_URL="https://rockylinux.org/" BUG_REPORT_URL="https://bugs.rockylinux.org/" ROCKY_SUPPORT_PRODUCT="Rocky Linux" ROCKY_SUPPORT_PRODUCT_VERSION="8.5" 

检查网络连接

确保您的系统可以访问互联网,因为我们需要从仓库下载Apache软件包:

ping -c 4 google.com 

如果ping命令成功,说明您的网络连接正常。

检查是否已安装Apache

在开始安装之前,检查系统中是否已经安装了Apache或httpd:

rpm -qa | grep httpd 

如果命令返回任何输出,表示系统中已经安装了Apache。您可以选择卸载现有版本或继续配置已安装的版本。

基础安装

现在,我们开始使用Yum包管理器安装Apache Web服务器。在Rocky Linux中,Apache软件包的名称是httpd。

安装Apache

使用以下命令安装Apache及其相关工具:

sudo yum install httpd -y 

此命令将安装Apache Web服务器及其所有依赖项。-y参数表示自动回答所有提示为”yes”,使安装过程无需手动确认。

验证安装

安装完成后,验证Apache是否已成功安装:

httpd -v 

您应该看到类似以下的输出,显示Apache的版本信息:

Server version: Apache/2.4.37 (rocky) Server built: Dec 15 2021 14:35:45 

查看安装的文件

要查看Apache安装的所有文件,可以使用以下命令:

rpm -ql httpd 

这将列出Apache软件包安装的所有文件和目录,包括配置文件、可执行文件、文档等。

基本配置

安装完成后,我们需要对Apache进行基本配置,以确保它能够正常运行并满足我们的需求。

Apache配置文件结构

Apache的主要配置文件位于/etc/httpd/目录下。以下是主要配置文件和目录的说明:

  • /etc/httpd/conf/httpd.conf - Apache的主配置文件
  • /etc/httpd/conf.d/ - 存放额外的配置文件
  • /etc/httpd/conf.modules.d/ - 存放模块加载配置文件
  • /var/www/html/ - 默认的网站根目录
  • /var/log/httpd/ - Apache日志文件目录
  • /etc/httpd/run/ - 运行时文件目录

备份原始配置文件

在修改配置之前,建议备份原始配置文件:

sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak 

编辑主配置文件

使用文本编辑器打开主配置文件:

sudo vi /etc/httpd/conf/httpd.conf 

或者,如果您更喜欢使用nano编辑器:

sudo nano /etc/httpd/conf/httpd.conf 

配置服务器名称

在配置文件中找到或添加以下行,设置服务器名称:

ServerName localhost:80 

这将设置服务器的主机名和端口。如果您有域名,可以将其替换为您的域名,例如:

ServerName www.example.com:80 

配置服务器管理员邮箱

找到或添加以下行,设置服务器管理员邮箱:

ServerAdmin admin@example.com 

admin@example.com替换为您的实际邮箱地址。当Apache遇到问题时,错误页面会显示此邮箱地址。

配置默认网站目录

默认情况下,Apache的网站根目录是/var/www/html/。如果您想更改此目录,可以找到以下行:

DocumentRoot "/var/www/html" 

并将其修改为您想要的目录,例如:

DocumentRoot "/home/user/mywebsite" 

同时,您还需要修改对应的目录权限设置:

<Directory "/home/user/mywebsite"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> 

配置目录索引

找到以下行:

DirectoryIndex index.html 

这指定了当访问目录时默认查找的文件。您可以添加更多文件类型,例如:

DirectoryIndex index.html index.htm index.php 

配置防火墙

Rocky Linux默认使用firewalld作为防火墙。我们需要配置防火墙以允许HTTP和HTTPS流量:

sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload 

这些命令将永久添加HTTP和HTTPS服务到防火墙规则中,并重新加载防火墙配置。

SELinux设置

Rocky Linux默认启用SELinux(Security-Enhanced Linux),它可能会影响Apache的正常运行。如果您的网站目录不是默认的/var/www/html/,您需要设置正确的SELinux上下文:

sudo semanage fcontext -a -t httpd_sys_content_t "/home/user/mywebsite(/.*)?" sudo restorecon -Rv /home/user/mywebsite 

如果semanage命令不可用,您可能需要安装policycoreutils-python-utils包:

sudo yum install policycoreutils-python-utils -y 

启动和管理Apache服务

配置完成后,我们可以启动Apache服务并设置开机自启。

启动Apache服务

sudo systemctl start httpd 

设置开机自启

sudo systemctl enable httpd 

检查服务状态

sudo systemctl status httpd 

如果服务正在运行,您应该看到类似以下的输出:

● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2023-05-15 10:30:45 CST; 1min 30s ago Docs: man:httpd.service(8) Main PID: 12345 (httpd) Status: "Running, listening on: port 80" Tasks: 213 (limit: 1137) Memory: 24.5M CGroup: /system.slice/httpd.service ├─12345 /usr/sbin/httpd -DFOREGROUND ├─12346 /usr/sbin/httpd -DFOREGROUND ├─12347 /usr/sbin/httpd -DFOREGROUND ├─12348 /usr/sbin/httpd -DFOREGROUND └─12349 /usr/sbin/httpd -DFOREGROUND 

停止和重启服务

如果需要停止Apache服务,可以使用以下命令:

sudo systemctl stop httpd 

如果需要重启Apache服务(例如,在修改配置文件后),可以使用以下命令:

sudo systemctl restart httpd 

如果您只是重新加载配置而不中断服务,可以使用以下命令:

sudo systemctl reload httpd 

测试Apache是否正常工作

在Web浏览器中访问服务器的IP地址或域名:

http://your_server_ip 

如果您看到Apache的默认测试页面,表示Apache已成功安装并运行。

查看Apache日志

Apache的访问日志和错误日志位于/var/log/httpd/目录下:

  • 访问日志:/var/log/httpd/access_log
  • 错误日志:/var/log/httpd/error_log

您可以使用以下命令查看最新的日志条目:

sudo tail -f /var/log/httpd/access_log sudo tail -f /var/log/httpd/error_log 

配置虚拟主机

虚拟主机允许您在一台服务器上托管多个网站。以下是配置基于名称的虚拟主机的步骤。

创建网站目录

为每个网站创建目录:

sudo mkdir -p /var/www/example.com/public_html sudo mkdir -p /var/www/test.com/public_html 

设置目录权限

设置正确的目录权限:

sudo chown -R apache:apache /var/www/example.com/public_html sudo chown -R apache:apache /var/www/test.com/public_html sudo chmod -R 755 /var/www 

创建测试页面

为每个网站创建一个简单的HTML页面:

echo "<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body> </html>" | sudo tee /var/www/example.com/public_html/index.html echo "<html> <head> <title>Welcome to Test.com!</title> </head> <body> <h1>Success! The test.com virtual host is working!</h1> </body> </html>" | sudo tee /var/www/test.com/public_html/index.html 

创建虚拟主机配置文件

为每个网站创建虚拟主机配置文件:

sudo vi /etc/httpd/conf.d/example.com.conf 

添加以下内容:

<VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example.com/public_html ErrorLog /var/www/example.com/error.log CustomLog /var/www/example.com/access.log combined </VirtualHost> 

同样,为第二个网站创建配置文件:

sudo vi /etc/httpd/conf.d/test.com.conf 

添加以下内容:

<VirtualHost *:80> ServerName www.test.com ServerAlias test.com DocumentRoot /var/www/test.com/public_html ErrorLog /var/www/test.com/error.log CustomLog /var/www/test.com/access.log combined </VirtualHost> 

测试配置文件

在重新加载Apache之前,检查配置文件是否有语法错误:

sudo apachectl configtest 

如果配置正确,您应该看到以下输出:

Syntax OK 

重新加载Apache

重新加载Apache以应用新的配置:

sudo systemctl reload httpd 

测试虚拟主机

在本地计算机上编辑hosts文件(以管理员身份),添加以下条目:

your_server_ip www.example.com your_server_ip www.test.com 

your_server_ip替换为您的服务器IP地址。

然后,在浏览器中访问http://www.example.comhttp://www.test.com,您应该看到相应的测试页面。

安全设置

为了确保Apache服务器的安全性,我们需要进行一些基本的安全配置。

隐藏Apache版本信息

默认情况下,Apache会在错误页面和HTTP响应头中显示版本信息,这可能会被攻击者利用。要隐藏这些信息,编辑主配置文件:

sudo vi /etc/httpd/conf/httpd.conf 

添加或修改以下行:

ServerTokens Prod ServerSignature Off 

ServerTokens Prod将使Apache只在HTTP响应头中返回”Apache”,而不显示版本信息。ServerSignature Off将禁用服务器签名,防止在错误页面中显示服务器信息。

禁用不必要的模块

Apache默认加载了许多模块,但您可能不需要所有模块。禁用不必要的模块可以减少攻击面并提高性能。

要查看已加载的模块,可以使用以下命令:

httpd -M 

要禁用模块,编辑相应的配置文件。例如,要禁用autoindex模块(它允许目录浏览),可以编辑/etc/httpd/conf.modules.d/00-base.conf文件,注释掉以下行:

#LoadModule autoindex_module modules/mod_autoindex.so 

配置目录权限

确保敏感目录不被公开访问。例如,防止访问.git目录:

<DirectoryMatch "/.git"> Require all denied </DirectoryMatch> 

或者,在.htaccess文件中添加:

RedirectMatch 404 /.git 

使用HTTPS

使用HTTPS可以加密客户端和服务器之间的通信,提高安全性。要配置HTTPS,您需要SSL证书。您可以使用Let’s Encrypt获取免费的SSL证书。

首先,安装Certbot:

sudo yum install certbot python3-certbot-apache -y 

然后,获取并安装证书:

sudo certbot --apache 

按照提示操作,Certbot将自动获取证书并配置Apache。

Certbot还会设置自动续期。您可以使用以下命令测试续期:

sudo certbot renew --dry-run 

配置安全headers

添加安全headers可以增强网站的安全性。创建一个新的配置文件:

sudo vi /etc/httpd/conf.d/security.conf 

添加以下内容:

<IfModule mod_headers.c> # Protect against XSS attacks Header set X-XSS-Protection "1; mode=block" # Prevent MIME-type sniffing Header set X-Content-Type-Options "nosniff" # Prevent clickjacking Header set X-Frame-Options "SAMEORIGIN" # HSTS Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" # Content Security Policy Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-src 'self'; object-src 'none';" </IfModule> 

限制HTTP方法

限制可用的HTTP方法可以减少攻击面。在虚拟主机配置中添加:

<Location /> <LimitExcept GET POST HEAD> Require all denied </LimitExcept> </Location> 

防止DDoS攻击

使用mod_evasive模块可以帮助防止DDoS攻击。首先,安装EPEL仓库:

sudo yum install epel-release -y 

然后,安装mod_evasive

sudo yum install mod_evasive -y 

创建配置文件:

sudo vi /etc/httpd/conf.d/mod_evasive.conf 

添加以下内容:

<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSLogDir "/var/log/httpd/" </IfModule> 

创建日志目录并设置权限:

sudo mkdir -p /var/log/httpd/ sudo chown -R apache:apache /var/log/httpd/ 

重新加载Apache:

sudo systemctl reload httpd 

性能优化

优化Apache的性能可以提高网站的响应速度和处理能力。

启用压缩

启用压缩可以减少传输的数据量,提高网站加载速度。编辑配置文件:

sudo vi /etc/httpd/conf.d/deflate.conf 

添加以下内容:

<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript DeflateCompressionLevel 9 BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary </IfModule> 

启用缓存

启用缓存可以减少服务器负载和提高响应速度。编辑配置文件:

sudo vi /etc/httpd/conf.d/cache.conf 

添加以下内容:

<IfModule mod_expires.c> ExpiresActive On ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" ExpiresByType font/woff "access plus 1 year" ExpiresByType font/woff2 "access plus 1 year" ExpiresByType application/font-woff "access plus 1 year" ExpiresByType application/font-woff2 "access plus 1 year" </IfModule> <IfModule mod_headers.c> <FilesMatch ".(css|js|jpg|jpeg|png|gif|svg|ico|woff|woff2)$"> Header set Cache-Control "max-age=31536000, public" </FilesMatch> </IfModule> 

配置MPM(多处理模块)

Apache提供了多种MPM,包括prefork、worker和event。选择合适的MPM对性能至关重要。

查看当前使用的MPM:

httpd -V | grep -i mpm 

在Rocky Linux 8上,默认使用的是event MPM,它通常能提供更好的性能。

要配置MPM,编辑相应的配置文件:

sudo vi /etc/httpd/conf.modules.d/00-mpm.conf 

确保以下行未被注释:

LoadModule mpm_event_module modules/mod_mpm_event.so 

然后,创建MPM配置文件:

sudo vi /etc/httpd/conf.d/mpm.conf 

添加以下内容(根据您的服务器资源调整数值):

<IfModule mpm_event_module> StartServers 4 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 10000 </IfModule> 

启用HTTP/2

HTTP/2可以显著提高网站加载速度。要启用HTTP/2,首先确保您已配置HTTPS,然后安装mod_http2

sudo yum install mod_http2 -y 

编辑SSL配置文件:

sudo vi /etc/httpd/conf.d/ssl.conf 

<VirtualHost _default_:443>部分添加以下行:

Protocols h2 http/1.1 

重新加载Apache:

sudo systemctl reload httpd 

禁用不必要的日志记录

过多的日志记录会影响性能。您可以根据需要调整日志级别。编辑虚拟主机配置:

LogLevel warn 

或者,对于静态文件,可以禁用访问日志:

<FilesMatch ".(css|js|jpg|jpeg|png|gif|svg|ico|woff|woff2)$"> SetEnvIf Request_URI ".(css|js|jpg|jpeg|png|gif|svg|ico|woff|woff2)$" dontlog CustomLog /var/www/example.com/access.log combined env=!dontlog </FilesMatch> 

常见问题及解决方案

在安装和配置Apache的过程中,您可能会遇到一些常见问题。本节将介绍这些问题及其解决方案。

问题1:Apache无法启动

症状:运行sudo systemctl start httpd后,服务无法启动。

解决方案

  1. 检查错误日志:
sudo tail -f /var/log/httpd/error_log 
  1. 检查配置文件语法:
sudo apachectl configtest 
  1. 检查端口占用情况:
sudo netstat -tlnp | grep :80 

如果端口80被其他程序占用,您可以停止该程序或更改Apache的监听端口。

  1. 检查SELinux状态:
sudo getenforce 

如果SELinux处于 enforcing 模式,可能需要调整策略或设置正确的上下文。

问题2:无法访问网站

症状:Apache已启动,但无法通过浏览器访问网站。

解决方案

  1. 检查防火墙设置:
sudo firewall-cmd --list-all 

确保HTTP和HTTPS服务已添加到防火墙规则中:

sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload 
  1. 检查Apache监听的地址和端口:
sudo netstat -tlnp | grep httpd 
  1. 检查虚拟主机配置:
sudo apachectl -S 
  1. 检查文件权限:
sudo ls -la /var/www/html/ 

确保网站目录和文件具有正确的权限。

问题3:权限被拒绝错误

症状:浏览器显示”403 Forbidden”错误。

解决方案

  1. 检查文件权限:
sudo ls -la /var/www/html/ 

确保网站目录和文件具有正确的权限:

sudo chown -R apache:apache /var/www/html/ sudo chmod -R 755 /var/www/html/ 
  1. 检查SELinux上下文:
sudo ls -laZ /var/www/html/ 

如果上下文不正确,可以使用以下命令修复:

sudo restorecon -Rv /var/www/html/ 
  1. 检查目录配置:

确保在Apache配置文件中正确设置了目录权限:

<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> 

问题4:PHP文件不被解析

症状:访问PHP文件时,浏览器显示文件内容而不是执行结果。

解决方案

  1. 安装PHP和PHP模块:
sudo yum install php php-mysqlnd php-fpm php-common -y 
  1. 配置Apache处理PHP文件:

创建PHP配置文件:

sudo vi /etc/httpd/conf.d/php.conf 

添加以下内容:

<FilesMatch .php$> SetHandler application/x-httpd-php </FilesMatch> AddType application/x-httpd-php .php php_value session.save_handler "files" php_value session.save_path "/var/lib/php/session" 
  1. 创建会话目录并设置权限:
sudo mkdir -p /var/lib/php/session sudo chown -R apache:apache /var/lib/php/session 
  1. 重新启动Apache:
sudo systemctl restart httpd 
  1. 测试PHP是否正常工作:

创建测试文件:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php 

在浏览器中访问http://your_server_ip/info.php,如果看到PHP信息页面,表示PHP已正确配置。

问题5:网站加载缓慢

症状:网站加载速度慢,响应时间长。

解决方案

  1. 检查服务器资源使用情况:
top free -m df -h 
  1. 优化Apache配置:

调整MPM设置,启用压缩和缓存,如前面”性能优化”部分所述。

  1. 检查数据库性能(如果使用数据库):
sudo systemctl status mariadb sudo mysql -e "SHOW PROCESSLIST;" 
  1. 检查网络连接:
ping your_server_ip traceroute your_server_ip 
  1. 使用CDN加速静态内容。

问题6:SSL证书问题

症状:HTTPS不工作或显示证书错误。

解决方案

  1. 检查证书文件是否存在:
sudo ls -la /etc/letsencrypt/live/your_domain/ 
  1. 检查SSL配置:
sudo vi /etc/httpd/conf.d/ssl.conf 

确保以下配置正确:

SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem 
  1. 检查证书有效期:
sudo openssl x509 -in /etc/letsencrypt/live/your_domain/cert.pem -text -noout | grep "Not After" 
  1. 重新获取证书(如果需要):
sudo certbot --apache -d your_domain -d www.your_domain 

问题7:虚拟主机不工作

症状:配置虚拟主机后,访问域名时显示默认网站或其他网站。

解决方案

  1. 检查虚拟主机配置:
sudo apachectl -S 
  1. 确保DNS记录正确指向服务器IP地址。

  2. 检查本地hosts文件(如果测试):

cat /etc/hosts 
  1. 检查虚拟主机配置文件语法:
sudo apachectl configtest 
  1. 确保每个虚拟主机都有唯一的ServerName。

问题8:Apache占用过多内存

症状:服务器内存使用率过高,Apache进程占用大量内存。

解决方案

  1. 检查Apache进程:
ps aux | grep httpd 
  1. 调整MPM设置:

编辑MPM配置文件:

sudo vi /etc/httpd/conf.d/mpm.conf 

减少MaxRequestWorkers和ThreadsPerChild的值:

<IfModule mpm_event_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestWorkers 150 MaxConnectionsPerChild 10000 </IfModule> 
  1. 限制每个请求的内存使用:

在PHP配置文件中设置内存限制:

sudo vi /etc/php.ini 

修改以下行:

memory_limit = 128M 
  1. 考虑使用缓存和CDN减轻服务器负载。

总结

本教程详细介绍了在Rocky Linux系统下使用Yum包管理器安装和配置Apache Web服务器的全过程,从基础安装到高级设置,以及常见问题的解决方案。

通过本教程,您已经学会了:

  1. 如何在Rocky Linux上安装Apache Web服务器
  2. 如何进行基本配置,包括服务器名称、管理员邮箱和网站根目录
  3. 如何启动和管理Apache服务
  4. 如何配置虚拟主机以托管多个网站
  5. 如何增强Apache服务器的安全性
  6. 如何优化Apache以提高性能
  7. 如何解决安装和配置过程中可能遇到的常见问题

Apache是一个功能强大且高度可定制的Web服务器,通过适当的配置和优化,它可以满足各种Web托管需求。希望本教程能帮助您成功搭建和管理您的Apache Web服务器。

如果您需要更深入的信息,可以参考Apache官方文档(https://httpd.apache.org/docs/)和Rocky Linux文档(https://docs.rockylinux.org/)。