Web服务器管理与安全防护指南
1. 启用覆盖并执行URL重写
1.1 准备工作
此操作需要一个具备网络连接的CentOS系统,系统配置的IP地址为192.168.56.100,并按照之前的方法运行Apache。同时,需要具备管理员权限,可通过root账户登录或使用sudo命令。
1.2 操作步骤
-
用文本编辑器打开
/etc/httpd/conf/httpd.conf文件:
vi /etc/httpd/conf/httpd.conf
-
找到定义文档根目录各种选项的
<Directory>部分,将AllowOverrides的值从None更新为All:
<Directory "/var/www/html">
...
AllowOverrides All
...
</Directory>
- 保存更改并关闭文件。
- 重启Apache以使配置更新生效:
systemctl restart httpd
-
验证
mod_rewrite模块是否可用:
httpd -M | grep rewrite
-
在文档根目录下创建一个名为
.htaccess的文件:
vi /var/www/html/.htaccess
-
在
.htaccess文件中添加RewriteEngine on以开启URL重写引擎:
RewriteEngine on
-
添加描述所需重定向的
Rewrite规则。例如,以下规则将所有无文件扩展名的请求重定向到同名的PHP文件:
RewriteRule ^/?([A-Z]+)$ $1.php [NC,L]
- 保存并关闭文件。
1.3 工作原理
.htaccess
文件是位于网站目录结构中的补充配置文件。配置后,Apache在处理请求时会搜索
.htaccess
文件并应用其中的选项设置。虽然每次请求都搜索和加载配置值会对性能有轻微影响,但它增加了灵活性。例如,修改
.htaccess
文件的配置无需重启服务器即可生效。在共享托管环境中,精明的客户可以自行调整服务器行为,而无需询问服务器管理员或访问
/etc/httpd
中的主配置文件(可能包含敏感配置值)。甚至依赖特定服务器功能的Web应用程序也可能包含一个
.htaccess
文件,以便更轻松地部署。
Apache默认不允许使用
.htaccess
文件覆盖服务器配置。要启用此功能,需要在适当的上下文中更新
AllowOverrides
选项,然后重启服务器。
AllowOverrides
的值及其含义如下表所示:
| 值 | 含义 |
| — | — |
| None | 服务器忽略任何
.htaccess
文件 |
| AuthConfig | 允许覆盖授权选项(如
AuthUserFile
、
AuthDBMUserFile
等) |
| FileInfo | 允许覆盖与请求相关的选项(如
ErrorDocument
、
Redirect
、
RewriteRule
等) |
| Indexes | 允许覆盖与索引相关的选项(如
DirectoryIndex
、
IndexOptions
等) |
| Limit | 允许覆盖访问选项(如
Allow
、
Deny
和
Order
) |
| All | 允许覆盖所有选项组 |
由于
AllowOverrides
应用于目录级别,因此可以在不同目录中允许或拒绝不同的覆盖。例如,可以在整个站点禁用覆盖,但为
private
目录允许覆盖授权选项,以便指定特定的授权数据库:
<Directory "/var/www/html">
AllowOverrides None
</Directory>
<Directory "/var/www/html/priv">
AllowOverrides AuthConfig
</Directory>
mod_rewrite
模块会注入到服务器的请求处理流程中,并根据我们提供的规则集动态更改请求的URL。虽然该模块默认已安装,但仍需使用
RewriteEngine on
显式启用URL重写。此外,两个最重要的重写选项是
RewriteRule
和
RewriteCond
。
RewriteRule
选项指定一个正则表达式,用于与URL进行比较。如果匹配,则进行给定的替换。可以在替换中使用位置变量(如
$1
)来引用捕获的模式匹配。在我们的示例中,规则匹配路径(如
/about
或
/contactus
)并将其重写为指向同名的PHP脚本(
about.php
或
contact.php
),从而对用户隐藏我们使用PHP的事实:
RewriteRule ^/?([A-Z]+)$ $1.php [NC,L]
我们还可以提供影响请求返回方式的标志。例如,
NC
标志进行不区分大小写的模式匹配,
L
标志停止引擎并返回URL,不再进行进一步的规则处理。常见的标志还有
R
(强制重定向,通常会给出一个HTTP状态码,如
R=301
)和
QSA
(将原始URL的查询字符串附加到新URL)。
RewriteCond
选项给出一个条件,在评估
RewriteRule
之前必须满足该条件。该条件是正则表达式匹配、变量和测试运算符的组合。可以使用特殊变量来引用URL的各个部分,如主机名(
%{HTTP_HOST}
)、请求的文件(
%{REQUEST_FILENAME}
)和查询字符串(
%{QUERY_STRING}
),或环境/请求的详细信息,如cookie(
%{HTTP_COOKIE}
)和用户代理字符串(
%{HTTP_USER_AGENT}
)。
-d
运算符测试路径是否为目录,
-f
运算符测试路径是否为文件,
!
否定匹配。
RewriteCond
也可以接受一些标志,如
NC
标志进行不区分大小写的比较,
OR
标志将多个选项以或关系连接(多个选项默认以与关系处理)。
一个非常常见的同时使用
RewriteCond
和
RewriteRule
的重写规则是,当请求不匹配现有文件或目录时,将用户定向到主
index.php
文件。这在将所有请求路由到中央控制点的Web应用程序中经常使用:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php [L,QSA]
第一个
RewriteCond
选项检查请求是否针对现有文件,第二个检查是否针对现有目录。如果请求既不是针对文件也不是针对目录,则
RewriteRule
选项将请求映射到
index.php
。任何可能存在的查询字符串都会被包含在内,并标记为最后一个操作,因此不会再进行进一步的重写。
许多人开玩笑地将重写称为“黑魔法”。确实,
mod_rewrite
非常强大,能够改变请求,但当你无法确定如何编写规则以实现预期效果时,可能会感到沮丧。在这种情况下,你可以启用日志记录,以了解引擎如何处理请求。要启用日志记录,使用
RewriteLog
选项指定一个日志文件,使用
RewriteLogLevel
选项指定详细程度。通常,
RewriteLogLevel
的值为5就足够了。可以将它们添加到
.htaccess
文件中,确定规则正确后再删除:
RewriteLog /var/log/httpd/rewrite_log
RewriteLogLevel 5
2. 安装NGINX作为负载均衡器
2.1 准备工作
此操作需要一个具备网络连接的CentOS系统。假设你有其他配置了Apache的系统来提供网站服务,这些系统的IP地址为192.168.56.20和192.168.56.30。NGINX软件包由EPEL存储库托管;如果尚未注册该存储库,请参考相关方法进行注册。同时,需要具备管理员权限,可通过root账户登录或使用sudo命令。
2.2 操作步骤
-
从EPEL存储库安装
nginx软件包:
yum install nginx
- 用文本编辑器打开NGINX服务器的配置文件:
vi /etc/nginx/nginx.conf
-
在
http块中添加一个新的upstream块,以标识集群中的服务器:
upstream cluster {
server 192.168.56.20;
server 192.168.56.30;
}
-
找到
location块并添加一个proxy_pass选项,引用upstream块:
location / {
proxy_pass http://cluster;
}
- 保存配置更改并关闭文件。
- 启动服务器并设置系统重启时自动启动:
systemctl start nginx.service
systemctl enable nginx.service
- 打开系统防火墙的端口80,允许HTTP请求通过:
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload
2.3 工作原理
和往常一样,我们首先安装了
nginx
软件包,该软件包可在EPEL存储库中找到。安装完成后,我们更新了其配置,标识了集群中的服务器并代理请求。首先,我们添加了一个
upstream
块:
upstream cluster {
server 192.168.56.20;
server 192.168.56.30;
}
cluster
只是我们为这组服务器指定的名称,以便可以按名称引用该组。如果要平衡多个集群,可以有多个
upstream
块。其中的每个
server
条目给出运行站点的系统的IP地址或主机名。
接下来,我们找到主
location
块并添加了一个
proxy_pass
参数。
proxy_pass
会将传入的请求转发到集群组中的一个系统,并返回响应以满足请求:
location / {
proxy_pass http://cluster;
}
NGINX与托管Web服务器之间的通信通过HTTP进行,因为
proxy_pass
的值中指定了该协议。这是可行的,因为集群系统将在负载均衡器后面的受信任网络上运行。如果你的网站要通过HTTPS提供服务,则需要由NGINX处理TLS协商,因为它是客户端看到的公共服务器点;客户端不知道负载均衡器后面的任何内容。要配置NGINX处理HTTPS请求,在
server
块中更新
listen
选项以监听端口443,然后添加
ssl_certificate
和
ssl_certificate_key
选项的条目,分别标识证书和密钥:
server {
# listen 80 default_server;
# listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/pki/tls/certs/www.example.pem;
ssl_certificate_key /etc/pki/tls/private/www.example.key;
...
}
进行更改并保存配置文件后,打开防火墙的端口443并重启NGINX:
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload
systemctl restart nginx.service
轮询是负载均衡的默认方法。这意味着第一个请求会被代理到集群中的第一台服务器,下一个请求到第二台服务器,依此类推。当NGINX到达列表末尾时,会从列表顶部重新开始,将下一个请求代理到第一台服务器。我们还可以使用其他策略,例如加权平衡。要进行加权平衡,为任何服务器分配一个权重,它将在每次迭代中处理该数量的请求。例如,以下配置中第一台服务器将处理五个请求,然后NGINX才会将请求代理到第二台服务器:
upstream cluster {
server 192.168.56.20 weight=5;
server 192.168.56.30;
}
使用负载均衡时,请记住任何一台Web服务器都不能保证接收用户发送的下一个请求。如果你正在平衡对使用会话的Web应用程序的访问,这可能会有问题。你可能需要考虑将会话数据存储在每个Web服务器都可以访问的中央系统上,例如使用Redis或Memcache等数据库。建议避免使用任何依赖会话持久性的平衡策略。
2.4 安全防护相关
除了上述Web服务器管理内容,还涉及系统安全防护的多个方面,包括:
-
发送消息到Syslog
:可以设置一个中央日志服务器,记录系统的活动信息。
-
使用logrotate旋转日志文件
:确保日志文件不会无限增长,便于管理和维护。
-
使用Tripwire检测修改的文件
:通过检查重要系统文件是否被修改,检测系统入侵。
-
使用ClamAV对抗病毒
:保护系统免受病毒、特洛伊木马和其他恶意软件的侵害。
-
使用chkrootkit检查rootkit
:查找系统中可能存在的rootkit。
-
使用Bacula进行网络备份
:保护系统数据免受日常威胁,如意外删除和硬件故障。
以下是这些安全防护措施的简单操作流程:
1. 发送消息到Syslog:配置Syslog服务器,将系统消息发送到指定的日志文件或远程服务器。
2. 旋转日志文件:使用
logrotate
工具,根据预设的规则定期旋转日志文件。
3. 检测修改的文件:安装和配置
Tripwire
,定期检查系统文件的完整性。
4. 对抗病毒:安装和配置
ClamAV
,定期扫描系统以检测病毒。
5. 检查rootkit:使用
chkrootkit
工具,扫描系统以查找rootkit。
6. 网络备份:安装和配置
Bacula
,设置定期备份任务,将系统数据备份到远程服务器。
通过这些措施,可以全面保护系统和数据的安全,减少各种威胁带来的风险。
3. 各项安全防护措施详解
3.1 发送消息到Syslog
Syslog 是一种用于记录系统消息的标准协议,通过设置中央日志服务器,可以集中管理系统的活动信息。
操作步骤
-
配置本地 Syslog 客户端
:编辑
/etc/rsyslog.conf文件,添加或修改规则以指定消息的发送目标。例如,将所有消息发送到远程 Syslog 服务器:
*.* @remote_server_ip:514
- 重启 Syslog 服务 :使配置生效。
systemctl restart rsyslog
- 验证配置 :可以通过发送测试消息来验证配置是否成功。
logger "Test message for Syslog"
3.2 旋转日志文件
随着系统运行,日志文件会不断增大,使用
logrotate
工具可以定期旋转日志文件,避免文件过大。
操作步骤
-
编辑配置文件
:
logrotate的配置文件通常位于/etc/logrotate.conf,可以在其中添加自定义规则。例如,为/var/log/messages文件设置每天旋转一次:
/var/log/messages {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root root
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
-
手动测试
:可以使用
logrotate -f /etc/logrotate.conf命令手动触发旋转,检查配置是否正确。 -
自动执行
:
logrotate通常会被cron任务每天自动执行。
3.3 使用 Tripwire 检测修改的文件
Tripwire 是一个文件完整性检查工具,通过定期检查重要系统文件是否被修改,能够及时发现系统入侵。
操作步骤
- 安装 Tripwire :使用包管理器安装 Tripwire。
yum install tripwire
- 初始化数据库 :创建 Tripwire 的初始数据库。
tripwire --init
-
定期检查
:设置定期任务,使用
tripwire --check命令检查文件完整性。如果发现文件被修改,会生成报告。
3.4 使用 ClamAV 对抗病毒
ClamAV 是一个开源的防病毒引擎,可以保护系统免受病毒、特洛伊木马和其他恶意软件的侵害。
操作步骤
- 安装 ClamAV :使用包管理器安装 ClamAV。
yum install clamav
- 更新病毒库 :安装完成后,需要更新病毒库。
freshclam
-
扫描系统
:使用
clamscan命令扫描系统。例如,扫描/home目录:
clamscan -r /home
3.5 使用 chkrootkit 检查 rootkit
rootkit 是一种隐藏在系统中的恶意软件,使用
chkrootkit
工具可以查找系统中可能存在的 rootkit。
操作步骤
- 安装 chkrootkit :可以从官方网站下载并编译安装,或者使用包管理器安装。
yum install chkrootkit
-
扫描系统
:使用
chkrootkit命令扫描系统。
chkrootkit
3.6 使用 Bacula 进行网络备份
Bacula 是一个开源的网络备份解决方案,可以保护系统数据免受日常威胁,如意外删除和硬件故障。
操作步骤
- 安装 Bacula :使用包管理器安装 Bacula 的服务器和客户端组件。
yum install bacula-server bacula-client
-
配置 Bacula
:编辑
/etc/bacula目录下的配置文件,设置备份任务、存储设备和客户端等信息。 - 启动服务 :启动 Bacula 服务器和客户端服务。
systemctl start bacula-fd bacula-sd bacula-dir
- 创建备份任务 :在 Bacula 控制台中创建备份任务,并设置定期执行。
4. 总结与流程梳理
4.1 整体流程总结
整个 Web 服务器管理与安全防护工作包含多个方面,从 URL 重写、负载均衡到各项安全防护措施,每个环节都至关重要。以下是一个简单的 mermaid 流程图,展示了整体的操作流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B(URL重写):::process
B --> C(负载均衡):::process
C --> D(安全防护):::process
D --> E{选择防护措施}:::decision
E --> |Syslog| F(发送消息到Syslog):::process
E --> |logrotate| G(旋转日志文件):::process
E --> |Tripwire| H(检测修改的文件):::process
E --> |ClamAV| I(对抗病毒):::process
E --> |chkrootkit| J(检查rootkit):::process
E --> |Bacula| K(网络备份):::process
F --> L([结束]):::startend
G --> L
H --> L
I --> L
J --> L
K --> L
4.2 注意事项
- 在进行 URL 重写时,要谨慎编写规则,避免出现循环重定向或性能问题。
- 负载均衡时,要根据实际情况选择合适的策略,如加权平衡等。
- 安全防护措施要定期执行和更新,确保系统的安全性。
通过遵循上述步骤和注意事项,可以有效地管理 Web 服务器,同时保障系统和数据的安全,为网站的稳定运行提供坚实的基础。
超级会员免费看
7万+

被折叠的 条评论
为什么被折叠?



