Apache Http Server&Tomcat&Nginx对比
Apache
Web服务器,基于C语言开发,用于处理静态内容、动态内容(PHP等),静态内容适用场景为传统网站、CMS(如WordPress),动态内容支持PHP、Perl、Python(通过模块)技术,适用于WordPress、Drupal等,支持反向代理(mod_proxy),负载算法为轮询、权重、IP哈希,性能表现为高扩展性,模块化
Tomcat
Java应用服务器,基于java语言开发,主要用于处理Java Servlet/JSP (动态Web应用),如Spring Boot、Jakarta EE应用,反向代理需配合Nginx/Apache,主要用于集群的负载,性能更适合Java EE应用
Nginx
Web服务器/反向代理,基于C语言开发,高并发静态内容、负载均衡、反向代理,处理静态内容性能极高,处理动态内容需反向代理(如FastCGI),需要搭配PHP-FPM或uWSGI,原生支持反向代理,负载算法为轮询、最少连接、IP哈希、一致性哈希,性能表现为高性能,低内存占用
性能对比
并发连接数
apache中等,主要使用进程/线程模型
Tomcat低,基于线程阻塞
Nginx极高,基于事件驱动
内存占用
apache较高
tomcat高,主要是存在JVM开销
Nginx极低
静态文件速度
apache中等,tomcat慢,nginx极快
动态文件速度
apache快,支持php等
tomcat快,支持Java
nginx需要代理(如FastCGI)才能支持
典型架构方案
纯静态网站,推荐Nginx

Java Web应用,推荐tomcat+nginx

PHP动态网站,推荐Nginx/Apache + PHP-FPM

高并发API服务,推荐Nginx(反向代理) + 多Tomcat实例

安全性对比
apache因其模块化历史安全漏洞较多,默认建议手动关闭危险模块(如mod_autoindex),对于DDos攻击,依赖于模块(如mod_evasive)
tomcat因Java安全更新频繁历史安全漏洞中等,默认建议禁用示例应用(如/examples),对于DDos攻击防护能力有限
nginx因编写过程中代码精简历史安全漏洞较少,默认较安全,针对配置文件做限制即可,对于DDos攻击原生支持防护,配置限速即可(limit_req)
配置文件
apache:.htaccess、httpd.conf
tomcat:server.xml、web.xml
nginx:nginx.conf
apache http server
安装
yum install httpd -y
启动服务
service httpd start
查看服务状态
systemctl status httpd

成功启动且默认关闭,开机不自动启动
配置开机自启

防火墙放行
永久允许公共区域访问80端口
firewall-cmd --permanent --zone=public --add-port=80/tcp
重新加载配置
firewal-cmd --reload
安装完成

安全配置(修改httpd.conf文件)
禁止在没有index.html文件情况下,默认显示目录结构

配置低权限用户

配置目录权限限制,防止用户修改系统设置
AllowOverride None:阻止用户建立修改.htaccess文件,禁止当前目录及子目录使用.htaccess文件覆盖主配置
Options None:禁止所有目录选项
Require all granted:允许所有客户端访问该目录

隐藏apache版本信息
配置文件最后添加:
ServerTokens Prod
ServerSignature Off

重启服务

成功隐藏

自定义错误界面

路径相对于网站根目录/var/www/html/

删除默认文件
删除默认的HTML文件: # apache网页根目录htdocs下的html文件
删除默认文件,删除后放网站主页文件,删除前建议备份
对于大多数 Linux 发行版
sudo rm -rf /var/www/html/*
对于某些特殊安装路径
sudo rm -rf /usr/local/apache2/htdocs/*
删除默认的icons文件: # apache安装目录下的icons文件夹及里面的文件
防止攻击者通过图标识别服务器版本
常见路径
sudo rm -rf /usr/share/apache2/icons/
sudo rm -rf /var/www/icons/
删除默认的的CGI脚本: # apache安装目录下的cgi-bin文件夹及里面的文件
默认cgi脚本可能存在安全漏洞,如cgi功能不必要,可完全禁用
cgi脚本:允许调用外部程序生成动态网页
常见路径
sudo rm -rf /usr/lib/cgi-bin/
sudo rm -rf /var/www/cgi-bin/
删除Apache说明文件: # apache安装目录下的manual文件夹及里面的文件以及安装目录下的其他介绍性文件
常见路径
sudo rm -rf /usr/share/doc/apache2-doc/
sudo rm -rf /var/www/manual/
sudo rm -rf /usr/local/apache2/manual/
查找并删除其他说明文件
sudo find / -name "*apache*" -type d $ -name "manual" -o -name "docs" $ -exec rm -rf {} +
apache tomcat
安装jdk
安装tomcat
参考:https://blog.csdn.net/weixin_49001740/article/details/131928396
防火墙放行
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload
安装完成

安全配置
具体配置参考:https://www.cnblogs.com/brishenzhou/p/6141357.html
非root权限运行tomcat
使用jsvc启动后会生成两个进程
其中root用户启动进程为监控进程,tomcat用户启动进程为工作进程

通过jsvc启动方式来使用低权限用户运行tomcat与直接使用低权限用户启动start.sh区别为:
低权限用户只能监听1024之后的端口,若直接使用低权限用户,部分日志无法
其他配置
删除默认文档
删除/usr/local/tomcat/webapps下的所有目录
禁止目录遍历
开启日志记录
定制报错界面
在web.xml文件配置完成后,在/usr/local/tomcat/apache-tomcat-11.0.6/webapps/ROOT目录下设计报错页面
配置目录权限
Nginx
安装
参考:https://blog.csdn.net/weixin_50083085/article/details/135508762
解压缩完成后,执行如下命令,安装依赖
sudo yum install pcre-devel zlib-devel openssl-devel
若出现openssl未使用情况

执行如下命令openssl模块,若不挂载,无法使用https访问
./configure --with-http_ssl_module
安全配置
基础安全配置
隐藏版本信息
防止攻击者利用特定版本漏洞
http {
server_tokens off; # 隐藏Nginx版本
}
限制http请求方法
server {
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405; # 返回"Method Not Allowed"
}
}
禁用目录列表
server {
autoindex off; # 禁止自动索引目录
}
防止劫持
server {
add_header X-Frame-Options "SAMEORIGIN";
}
#只允许iframe加载相同域名的页面,禁止加载外部网站页面
SSL/TLS安全配置
强制使用https访问,将所有http请求永久重定向到https
注:前提为nginx已进行https配置
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # 301永久重定向
}
使用强加密套件
server {
listen 443 ssl;
ssl_protocols TLSv1.2 TLSv1.3; # 仅允许TLS 1.2和1.3
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers on;
}
启用HSTS(HTTP Strict Transport Security)
#强制始终使用https
server {
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
}
防止常见web攻击
配置CSP
只允许使用https访问同源或内联资源,其余均不允许
配置CSP(Content-Security-Policy),可参考:
server {
# 防止 MIME 类型嗅探
add_header X-Content-Type-Options "nosniff";
# 移除 X-XSS-Protection(依赖 CSP 防护)
# add_header X-XSS-Protection "1; mode=block"; # 已废弃
# 更严格的 CSP 策略
add_header Content-Security-Policy "
default-src 'self';
script-src 'self' https://cdn.trusted.com;
style-src 'self' 'unsafe-inline'; # 内联 CSS 较常见
img-src 'self' data: https:;
connect-src 'self' https://api.example.com;
frame-ancestors 'none'; # 禁止被嵌入 iframe
block-all-mixed-content; # 禁止混合内容(HTTP+HTTPS)
upgrade-insecure-requests; # 自动升级 HTTP 请求到 HTTPS
";
}
防止缓冲区溢出攻击
#限制请求头与缓冲区大小
http {
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
client_body_buffer_size 16k;
client_max_body_size 1M; # 限制上传文件大小
}
防止DDOS攻击
#限制连接速率
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
}
server {
limit_req zone=one burst=5;
limit_conn addr 10; # 每个IP最多10个连接
}
访问控制
限制IP访问
server {
location /admin {
allow 192.168.1.100; # 允许的IP
deny all; # 拒绝其他所有IP
}
}
禁止敏感文件访问
server {
location ~ /\.(git|env|htaccess) {
deny all;
}
}
防止暴力猜解
#限制对 /login的访问频率,瞬时只允许存在10+3个请求,其余阻断
location /login {
limit_req zone=one burst=3 nodelay;
}
日志监控
#记录访问
http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}

2480

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



