Linux 上安装和配置 Apache (httpd) 服务器
1. 简介
Apache HTTP Server(简称 Apache)是世界上最流行的 Web 服务器软件之一。它以其可靠性、灵活性和强大的功能而闻名。
选择 Apache 的理由:
- 开源和免费
- 强大的模块化架构
- 广泛的社区支持
- 高度可定制
- 跨平台兼容性
2. 准备工作
系统要求
- Linux(教程基于Red Hat Enterprise Linux (RHEL) 8.4)
- 最小 1GB RAM
- 至少 10GB 磁盘空间
- root 或 sudo 权限
确认使用环境为 Red Hat 8.4
cat /etc/redhat-release
确保系统更新
sudo dnf update -y
3. 安装 Apache
搜索可用的 Apache 包
sudo dnf search httpd
如果使用yum
sudo yum --showduplicates httpd-2.4.37
选择并安装特定版本
sudo dnf install httpd-2.4.37 -y
如果使用yum
sudo yum install httpd-2.4.37
验证安装
httpd -v
4. 自定义安装目录
这次顺便介绍一下如何自定义安装目录,不使用默认路径的方法,默认一般在/etc/httpd我们移动到/opt/httpd去。
停止 Apache 服务(如果已启动)
sudo systemctl stop httpd
移动 Apache 安装目录到 /opt/httpd
sudo cp -rp /etc/httpd /opt/httpd
#根据需要自行修改,可不修改↓
sudo cp -rp /var/www /opt/httpd/www
更新配置文件以反映新路径
编辑主配置文件:
sudo vi /opt/httpd/conf/httpd.conf
更新以下行:
ServerRoot "/opt/httpd"
#根据需要自行修改,可不修改↓
DocumentRoot "/opt/httpd/www/html"
更新系统服务文件
编辑系统服务文件:
sudo vi /usr/lib/systemd/system/httpd.service
添加以下行:
EnvironmentFile=/etc/sysconfig/httpd
修改 ExecStart 行以使用 OPTIONS 变量:
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
使用 -DFOREGROUND
参数会使 Apache 在前台运行,而不是作为守护进程。
修改 ExecReload 行:
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
整体来看就是下面这样:
[Service]
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
编辑 /etc/sysconfig/httpd
文件:
编辑 /etc/sysconfig/httpd
文件:
sudo vi /etc/sysconfig/httpd
在文件中添加或修改 OPTIONS 行:
#OPTIONS="-d /etc/httpd -f /etc/httpd/conf/httpd.conf -D HTTPD_ROOT=/etc/httpd -D DEFAULT_PIDLOG=logs/httpd.pid"
OPTIONS="-d /opt/httpd -f /opt/httpd/conf/httpd.conf -D HTTPD_ROOT=/opt/httpd -D DEFAULT_PIDLOG=logs/httpd.pid"
重新加载系统服务:
sudo systemctl daemon-reload
5. 配置 Apache
基本配置文件介绍
主配置文件位于 /opt/httpd/conf/httpd.conf
常见配置选项
-
更改监听端口:
Listen 80
-
设置服务器名称:
ServerName www.example.com:80
-
配置虚拟主机:
<VirtualHost *:80> ServerName www.example.com DocumentRoot "/opt/httpd/www/html" </VirtualHost>
6. 管理 Apache 服务
启动 Apache 服务
sudo systemctl start httpd
停止 Apache 服务
sudo systemctl stop httpd
重启 Apache 服务
sudo systemctl restart httpd
检查 Apache 状态
sudo systemctl status httpd
7.测试 Apache 安装
创建测试页面
echo "<html><body><h1>Hello, Apache!</h1></body></html>" | sudo tee /opt/httpd/www/html/index.html
通过浏览器访问
打开浏览器,访问 http://your_server_ip
确认安装版本
httpd -v
rpm -qa | grep '2.4.37'
使用curl确认
curl -s -v http://localhost
curl -s -v --tlsv1.2 https://localhost
curl -s -v -k --tlsv1.2 https://localhost
8. 常见问题解决
服务无法启动
检查错误日志
sudo tail -f /opt/httpd/logs/error_log
9. 优化和安全建议
性能优化技巧
-
启用压缩:
LoadModule deflate_module modules/mod_deflate.so AddOutputFilterByType DEFLATE text/html text/plain text/xml
-
配置缓存:
LoadModule expires_module modules/mod_expires.so ExpiresActive On ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType text/css "access plus 1 month" ExpiresByType application/pdf "access plus 1 month" ExpiresByType text/x-javascript "access plus 1 month" ExpiresByType application/x-shockwave-flash "access plus 1 month" ExpiresByType image/x-icon "access plus 1 year" ExpiresDefault "access plus 2 days"
基本安全设置
-
隐藏 Apache 版本信息:
ServerTokens Prod ServerSignature Off
-
禁用目录浏览:
Options -Indexes
扩展
启用 SSL 和创建自签名证书
1. 安装 mod_ssl 模块
首先,我们需要安装 mod_ssl 模块:
sudo dnf install mod_ssl -y
2. 创建自签名证书
我们将使用 OpenSSL 创建一个自签名证书:
# 创建存储证书的目录
sudo mkdir -p /opt/httpd/ssl
# 生成私钥和证书签名请求(CSR)
sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 \
-keyout /opt/httpd/ssl/server.key \
-out /opt/httpd/ssl/server.crt
在执行上述命令时,您需要提供一些信息,如国家、州/省、城市、组织名称等。最重要的是"Common Name",通常应该是您服务器的完全限定域名(FQDN)。
3. 配置 Apache 使用 SSL
编辑 SSL 配置文件:
sudo vi /opt/httpd/conf.d/ssl.conf
找到并修改以下行:
SSLCertificateFile /opt/httpd/ssl/server.crt
SSLCertificateKeyFile /opt/httpd/ssl/server.key
4. 配置虚拟主机以使用 SSL
在 /opt/httpd/conf/httpd.conf
文件中添加或修改 VirtualHost 配置:
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot "/opt/httpd/www/html"
SSLEngine on
SSLCertificateFile /opt/httpd/ssl/server.crt
SSLCertificateKeyFile /opt/httpd/ssl/server.key
</VirtualHost>
5. 开放 HTTPS 端口
配置防火墙以允许 HTTPS 流量:
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
6. 重启 Apache 服务
sudo systemctl restart httpd
7. 测试 HTTPS 连接
在浏览器中访问 https://your_server_ip
或 https://your_domain.com
注意:由于使用的是自签名证书,浏览器会显示安全警告。这是正常的,您可以添加例外以继续访问网站。
8. 强制 HTTPS
如果您希望所有流量都使用 HTTPS,可以添加以下重定向规则到 HTTP 虚拟主机配置中:
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
9. SSL/TLS 优化建议
为了增强安全性,您可以在 SSL 配置文件中添加以下设置:
# 使用现代 TLS 协议
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
# 使用强加密套件
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
# 启用 HSTS(HTTP严格传输安全)
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
10. 定期更新证书
自签名证书通常有效期为一年。记得在证书过期前更新,当然你也可以弄10年的:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /opt/httpd/ssl/server.key \
-out /opt/httpd/ssl/server.crt
执行此命令后,重启 Apache 服务以应用新证书。
使用自签名证书和 SSL/TLS 可以为您的网站提供基本的加密保护。然而,对于生产环境,建议使用由受信任的证书颁发机构(如 Let’s Encrypt)签发的证书,以避免浏览器警告并提供更好的安全保证。
自签名证书适用于测试和开发环境,但不建议在生产环境中使用。
11. 结论
本教程详细介绍了在 Red Hat 8.4 上安装、配置和优化 Apache HTTP 服务器的过程。通过这些步骤,应该能够成功地设置一个基本的 Web 服务器,并了解如何进行进一步的定制和优化。