Apache HTTP服务器通过模块系统实现功能扩展,本指南将详细介绍如何安装和配置Apache模块以扩展服务器功能。
Apache模块分为两种类型: - 静态模块:编译时直接集成到Apache二进制文件中 - 动态模块(DSO):可单独加载的共享对象文件(.so)
# 查看所有已加载模块
apachectl -M
# 查看编译时包含的模块
apachectl -l
# 查看模块详细信息(包括配置文件位置)
apache2ctl -S
# Debian/Ubuntu
sudo apt install apache2-<module_name>
# RHEL/CentOS
sudo yum install mod_<module_name>
# 进入Apache源码目录
cd httpd-<version>/modules/<module_dir>
# 编译模块
sudo apxs -i -a -c mod_<name>.c
# 示例:编译安装mod_rewrite
sudo apxs -i -a -c mod_rewrite.c
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
</IfModule>
# 启用SSL模块
sudo a2enmod ssl
sudo systemctl restart apache2
配置示例:
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem
SSLCertificateChainFile /path/to/chain.pem
</VirtualHost>
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPass /app http://localhost:3000/
ProxyPassReverse /app http://localhost:3000/
</IfModule>
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
</IfModule>
# 启用模块
sudo a2enmod <module_name>
# 禁用模块
sudo a2dismod <module_name>
# 列出可用模块
sudo apache2ctl -M
# 查看可用模块
yum search mod_
# 安装模块
sudo yum install mod_<name>
# 配置文件通常位于
/etc/httpd/conf.modules.d/
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/javascript
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
</IfModule>
模块未加载:
tail -f /var/log/apache2/error.log
配置语法检查:
sudo apachectl configtest
模块冲突:
通过合理配置Apache模块,您可以显著增强服务器的功能、性能和安全性。