Web 服务(Apache/Nginx)
Web 服务器是托管网站和 Web 应用程序的关键组件。在 Rocky Linux 中,Apache HTTP Server 和 Nginx 是最常用的两种 Web 服务器。本教程将详细介绍如何在 Rocky Linux 系统上安装、配置和管理这两种流行的 Web 服务器。
Apache HTTP Server
Apache HTTP Server(简称 Apache)是世界上使用最广泛的 Web 服务器之一,以其稳定性、灵活性和丰富的功能集而著称。
安装 Apache
# 安装 Apache
sudo dnf install httpd -y
# 启动 Apache 服务
sudo systemctl start httpd
# 设置 Apache 开机自启
sudo systemctl enable httpd
# 检查 Apache 服务状态
sudo systemctl status httpd
配置防火墙
# 允许 HTTP 流量通过防火墙
sudo firewall-cmd --permanent --add-service=http
# 允许 HTTPS 流量通过防火墙
sudo firewall-cmd --permanent --add-service=https
# 重新加载防火墙规则
sudo firewall-cmd --reload
验证 Apache 安装
在浏览器中访问服务器的 IP 地址或域名,应该能看到 Apache 的默认欢迎页面:
http://your_server_ip
或者使用命令行验证:
curl http://localhost
Apache 配置文件结构
Apache 的主要配置文件位于 /etc/httpd/ 目录下:
/etc/httpd/conf/httpd.conf- 主配置文件/etc/httpd/conf.d/- 额外配置文件目录/etc/httpd/conf.modules.d/- 模块配置目录
基本配置修改
编辑主配置文件:
sudo vim /etc/httpd/conf/httpd.conf
常用配置项:
# 服务器根目录
ServerRoot "/etc/httpd"
# 监听端口
Listen 80
# 管理员邮箱
ServerAdmin root@localhost
# 默认网站根目录
DocumentRoot "/var/www/html"
# 目录访问控制
<Directory "/var/www/html">
AllowOverride None
Require all granted
</Directory>
虚拟主机配置
虚拟主机允许在单个服务器上托管多个网站。
# 创建虚拟主机配置文件
sudo vim /etc/httpd/conf.d/example.com.conf
基本虚拟主机配置:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/logs/error.log
CustomLog /var/www/example.com/logs/access.log combined
<Directory /var/www/example.com/public_html>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
创建必要的目录结构:
# 创建网站目录
sudo mkdir -p /var/www/example.com/public_html
# 创建日志目录
sudo mkdir -p /var/www/example.com/logs
# 设置目录权限
sudo chown -R apache:apache /var/www/example.com
# 创建测试页面
echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
重新加载 Apache 配置:
sudo systemctl reload httpd
Apache 模块管理
# 列出已启用的模块
sudo httpd -M
# 启用模块(编辑对应配置文件)
sudo vim /etc/httpd/conf.modules.d/00-base.conf
常用模块:
mod_rewrite- URL 重写mod_ssl- HTTPS 支持mod_deflate- 内容压缩mod_headers- HTTP 头管理mod_status- 服务器状态页面
Apache 日志文件
Apache 的日志文件位于 /var/log/httpd/ 目录下:
access.log- 访问日志error.log- 错误日志
查看日志:
# 查看错误日志
sudo tail -f /var/log/httpd/error.log
# 查看访问日志
sudo tail -f /var/log/httpd/access.log
配置 HTTPS
安装 SSL 证书(使用自签名证书作为示例):
# 安装 mod_ssl 模块
sudo dnf install mod_ssl -y
# 创建自签名证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/example.com.key -out /etc/pki/tls/certs/example.com.crt
配置 SSL 虚拟主机:
sudo vim /etc/httpd/conf.d/ssl.conf
或创建专用配置文件:
sudo vim /etc/httpd/conf.d/example.com-ssl.conf
SSL 虚拟主机配置:
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/example.com/public_html
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/example.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/example.com.key
ErrorLog /var/www/example.com/logs/ssl_error.log
CustomLog /var/www/example.com/logs/ssl_access.log combined
<Directory /var/www/example.com/public_html>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
重定向 HTTP 到 HTTPS:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
重启 Apache 服务:
sudo systemctl restart httpd
Nginx
Nginx(发音为 “engine x”)是一款高性能的 HTTP 和反向代理服务器,以其稳定性、丰富的功能集、低资源消耗和高并发处理能力而闻名。
安装 Nginx
# 安装 Nginx
sudo dnf install nginx -y
# 启动 Nginx 服务
sudo systemctl start nginx
# 设置 Nginx 开机自启
sudo systemctl enable nginx
# 检查 Nginx 服务状态
sudo systemctl status nginx
配置防火墙
# 允许 HTTP 流量通过防火墙
sudo firewall-cmd --permanent --add-service=http
# 允许 HTTPS 流量通过防火墙
sudo firewall-cmd --permanent --add-service=https
# 重新加载防火墙规则
sudo firewall-cmd --reload
验证 Nginx 安装
在浏览器中访问服务器的 IP 地址或域名,应该能看到 Nginx 的默认欢迎页面:
http://your_server_ip
或者使用命令行验证:
curl http://localhost
Nginx 配置文件结构
Nginx 的主要配置文件位于 /etc/nginx/ 目录下:
/etc/nginx/nginx.conf- 主配置文件/etc/nginx/conf.d/- 服务器块配置目录/etc/nginx/default.d/- 默认服务器配置目录
基本配置修改
编辑主配置文件:
sudo vim /etc/nginx/nginx.conf
常用配置项:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
include /etc/nginx/conf.d/*.conf;
}
服务器块配置
Nginx 使用服务器块(相当于 Apache 的虚拟主机)来托管多个网站。
# 创建服务器块配置文件
sudo vim /etc/nginx/conf.d/example.com.conf
基本服务器块配置:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
error_log /var/log/nginx/example.com_error.log;
access_log /var/log/nginx/example.com_access.log;
}
创建必要的目录结构:
# 创建网站目录
sudo mkdir -p /var/www/example.com/public_html
# 设置目录权限
sudo chown -R nginx:nginx /var/www/example.com
# 创建测试页面
echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
测试并重新加载 Nginx 配置:
# 测试配置语法
sudo nginx -t
# 重新加载配置
sudo systemctl reload nginx
Nginx 模块管理
Nginx 使用动态和静态模块,大多数常用模块已包含在默认安装中。
# 查看已编译的模块
sudo nginx -V
Nginx 日志文件
Nginx 的日志文件位于 /var/log/nginx/ 目录下:
access.log- 访问日志error.log- 错误日志
查看日志:
# 查看错误日志
sudo tail -f /var/log/nginx/error.log
# 查看访问日志
sudo tail -f /var/log/nginx/access.log
配置 HTTPS
安装 SSL 证书(使用自签名证书作为示例):
# 创建自签名证书
sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/example.com.key -out /etc/nginx/ssl/example.com.crt
配置 SSL 服务器块:
sudo vim /etc/nginx/conf.d/example.com.conf
SSL 服务器块配置:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
root /var/www/example.com/public_html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
error_log /var/log/nginx/example.com_ssl_error.log;
access_log /var/log/nginx/example.com_ssl_access.log;
}
测试并重新加载 Nginx 配置:
# 测试配置语法
sudo nginx -t
# 重新加载配置
sudo systemctl reload nginx
配置 PHP 支持
Apache 配置 PHP
安装 PHP 和相关模块:
# 安装 PHP 和常用模块
sudo dnf install php php-mysqlnd php-fpm php-gd php-mbstring php-xml php-json -y
# 安装 PHP-FPM(FastCGI Process Manager)
sudo dnf install php-fpm -y
# 启动 PHP-FPM 服务
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
配置 Apache 与 PHP-FPM 配合:
# 编辑 Apache 配置文件以使用 PHP-FPM
sudo vim /etc/httpd/conf.d/php-fpm.conf
添加以下内容:
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
配置 PHP-FPM:
sudo vim /etc/php-fpm.d/www.conf
确保以下设置正确:
user = apache
group = apache
listen = /run/php-fpm/www.sock
listen.owner = apache
listen.group = apache
重启服务:
sudo systemctl restart php-fpm
sudo systemctl restart httpd
Nginx 配置 PHP
安装 PHP 和相关模块:
# 安装 PHP 和常用模块
sudo dnf install php php-mysqlnd php-fpm php-gd php-mbstring php-xml php-json -y
配置 PHP-FPM:
sudo vim /etc/php-fpm.d/www.conf
修改用户和组为 nginx:
user = nginx
group = nginx
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
启动 PHP-FPM 服务:
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
配置 Nginx 处理 PHP 文件:
sudo vim /etc/nginx/conf.d/example.com.conf
更新服务器块配置:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_log /var/log/nginx/example.com_error.log;
access_log /var/log/nginx/example.com_access.log;
}
测试并重新加载 Nginx 配置:
# 测试配置语法
sudo nginx -t
# 重新加载配置
sudo systemctl reload nginx
性能优化
Apache 性能优化
编辑 Apache 配置文件:
sudo vim /etc/httpd/conf.modules.d/00-mpm.conf
调整 MPM(多处理模块)设置:
# 对于 prefork 模块(默认)
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
# 对于 event 模块(推荐用于高流量网站)
<IfModule mpm_event_module>
StartServers 2
ServerLimit 16
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
启用压缩:
sudo vim /etc/httpd/conf.d/compress.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
</IfModule>
Nginx 性能优化
编辑 Nginx 主配置文件:
sudo vim /etc/nginx/nginx.conf
调整工作进程和连接设置:
user nginx;
worker_processes auto; # 自动设置为 CPU 核心数
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 4096; # 每个工作进程的最大连接数
multi_accept on; # 尽可能多地接受新连接
use epoll; # 使用 epoll 事件驱动模型
}
http {
# 其他配置...
# 压缩设置
gzip on;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 缓存设置
open_file_cache max=100000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# 超时设置
keepalive_timeout 65;
send_timeout 10;
# 缓冲区设置
client_body_buffer_size 128k;
client_max_body_size 10m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
output_buffers 1 32k;
postpone_output 1460;
}
安全加固
Apache 安全加固
- 隐藏版本信息:
sudo vim /etc/httpd/conf/httpd.conf
添加以下内容:
ServerTokens Prod
ServerSignature Off
- 禁用不必要的模块:
# 查看已启用的模块
sudo httpd -M
# 编辑模块配置文件,注释掉不需要的模块
sudo vim /etc/httpd/conf.modules.d/00-base.conf
- 启用 mod_security:
# 安装 mod_security
sudo dnf install mod_security mod_security_crs -y
# 配置 mod_security
sudo cp /etc/httpd/conf.d/mod_security.conf.rpmnew /etc/httpd/conf.d/mod_security.conf
sudo systemctl restart httpd
Nginx 安全加固
- 隐藏版本信息:
sudo vim /etc/nginx/nginx.conf
在 http 块中添加:
server_tokens off;
- 限制请求大小:
在 http 块或 server 块中添加:
client_max_body_size 10m;
- 设置适当的内容安全策略:
在 server 块中添加:
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
- 禁用不必要的 HTTP 方法:
location / {
# 其他配置...
limit_except GET POST HEAD {
deny all;
}
}
监控和维护
Apache 监控
- 启用服务器状态页面:
sudo vim /etc/httpd/conf.d/status.conf
添加以下内容:
<Location /server-status>
SetHandler server-status
Require local
# 允许特定 IP 访问
# Require ip 192.168.1.0/24
</Location>
重启 Apache:
sudo systemctl restart httpd
访问状态页面:http://your_server_ip/server-status
- 日志分析工具:
# 安装 awstats
sudo dnf install awstats -y
# 配置 awstats
# 请参考 awstats 文档进行详细配置
Nginx 监控
- 启用 stub_status 模块:
sudo vim /etc/nginx/conf.d/status.conf
添加以下内容:
server {
listen 127.0.0.1:80;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
测试并重新加载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
检查状态:
curl http://localhost/nginx_status
- 日志分析:
# 安装 goaccess
sudo dnf install goaccess -y
# 分析访问日志
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
常见问题排查
Apache 常见问题
- 服务无法启动:
# 检查错误日志
sudo tail -f /var/log/httpd/error.log
# 检查配置语法
sudo httpd -t
- 403 Forbidden 错误:
- 检查文件和目录权限
- 确保 SELinux 上下文正确
- 检查 Apache 配置中的访问控制
# 检查 SELinux 上下文
sudo ls -Z /var/www/example.com/public_html/
# 修复 SELinux 上下文
sudo restorecon -Rv /var/www/
- PHP 文件下载而非执行:
- 确保 PHP 模块正确加载
- 检查文件处理器配置
Nginx 常见问题
- 服务无法启动:
# 检查错误日志
sudo tail -f /var/log/nginx/error.log
# 检查配置语法
sudo nginx -t
- 502 Bad Gateway 错误:
- 检查上游服务器是否运行
- 检查 PHP-FPM 是否启动
- 检查套接字权限
# 检查 PHP-FPM 状态
sudo systemctl status php-fpm
# 检查套接字权限
sudo ls -la /run/php-fpm/
- 403 Forbidden 错误:
- 检查文件和目录权限
- 确保 SELinux 上下文正确
- 检查 Nginx 配置中的访问控制
总结
本教程详细介绍了在 Rocky Linux 系统上安装、配置和管理 Apache HTTP Server 和 Nginx 的方法。两种服务器都提供了强大的 Web 托管功能,但各有特点:
- Apache:配置简单直观,模块丰富,适合各种网站类型,尤其是需要 .htaccess 文件的应用。
- Nginx:性能优异,资源消耗低,并发处理能力强,特别适合高流量网站和作为反向代理。
在实际应用中,可以根据具体需求选择合适的 Web 服务器。无论选择哪种服务器,都应关注性能优化和安全加固,定期备份配置和数据,并建立监控机制以便及时发现和解决问题。
相关内容
- 备份与恢复 本文介绍如何在 Rocky Linux 系统中执行数据与系统的备份与恢复,包括 rsync、tar、Timeshift、快照与自动化定时任务等多种方法。
- Rocky Linux 与 RHEL 的区别 详细分析 Rocky Linux 与 Red Hat Enterprise Linux (RHEL) 的区别,包括开发背景、兼容性、更新策略、社区支持和企业使用...
- 定时任务(cron) 本文详细介绍 Rocky Linux 中使用 cron 定时任务的配置方法,包括 crontab 基础语法、系统任务调度、日志管理与常见问题排查。
- 数据库服务(MySQL / PostgreSQL) 在 Rocky Linux 中安装和配置 MySQL 与 PostgreSQL 数据库服务,涵盖安装命令、防火墙配置、开机自启和基础安全设置。
- Python 与 Node.js 环境配置 在 Rocky Linux 中安装与管理 Python、pip、Node.js 与 npm 环境,涵盖多版本管理、全局模块安装、国内源配置等实用技巧。
- 磁盘与分区管理(lsblk、fdisk) 详细介绍 Rocky Linux 中使用 lsblk 和 fdisk 工具进行磁盘和分区管理的方法,包括查看磁盘信息、创建分区、删除分区等操作