Apache配置优化

1、取消目录浏览

默认配置下,如果目录默认首页不存在的话,apahce将会生成目录文件列表。但是这个是不安全的。

查找所有包含以下内容的配置块


将红色内容改成 –index,就是在前面加多一个负号

2、 日志切割,按日期生成日志文件

默认配置下,所有日志将存放于一个文件。一方面所有日志都在一个文件,不好分析管理,另一方面随着文件越来越大,也影响到apache性能。

错误日志:

#ErrorLog "logs/error.log"

ErrorLog "|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 86400"

访问日志:

#CustomLog "logs/access.log" common

CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400" common

另外修改日志记录级别:

LogLevel error

3、禁止向客户端发送服务器信息

默认配置下,apache会向客户端发生服务器信息,包含操作系统信息,apahce版本信息,apahce模块信息等等。这些信息都会影响到服务器安全。

ServerSignature Off

ServerTokens Prod

4、限制apache处理的http协议

通过以下配置,限制apache只处理Get和Post数据,有助于提高服务器的安全性

5、保持连接和响应超时

使用保持连接功能,使得apache可以在一个连接中处理客户端多个请求,可以提高服务器的性能。这个功能最好配合超时功能一起使用。但是,如果服务器繁忙,请求过多则应关闭这个功能。尽管KeepAlive方式能减少TCP连接数量和网络负载,但是KeepAlive需要和线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。

打开保持连接功能:

KeepAlive On

在使用保持连接功能时,客户一次请求连接能响应文件的最大上限:

MaxKeepAliveRequests 100

在使用保持连接功能时,两个相邻的连接的时间间隔超过3 秒,就切断连接

KeepAliveTimeout 3

若30 秒后没有收到或送出任何数据就切断该连接:

Timeout 30

6、使用Apache MPM(多路处理模块)

Apache MPM可以通过优化apache内部进程的调度来提高apache的处理能力。

取消以下配置的注释(去掉前面的#号)

Include conf/extra/httpd-mpm.conf

具体配置细节可以打开这个文件httpd-mpm.conf

通过“httpd -l”可以查看当前加载了具体哪个mpm模块,然后再针对这个模块做优化。

StartServers 指令设置了服务器启动时建立的子进程数量。因为Apache子进程数量取决于实际负载动态调整,所以调整这个参数意义不大。不同的MPM默认值也不一样。

StartThreads指令设置了服务器启动时建立的线程数量。因为Apache线程数量取决于实际负载动态调整,所以调整这个参数意义不大。

MaxClients 指令设置了允许同时伺服的最大接入请求数量。任何超过MaxClients限制的请求都将进入等候队列,直到达到ListenBacklog指令限制的最大值为止。一旦一个链接被释放,队列中的请求将得到服务。

MaxRequestsPerChild 指令设置了每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:1、可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。2、给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

ThreadsPerChild 指令设置了每个子进程建立的线程数。子进程在启动时建立这些线程后就不再建立新的线程了。如果使用一个类似于mpm_winnt只有一个子进程的MPM,这个数值要足够大,以便可以处理更多的请求。如果使用一个类似于worker有多个子进程的MPM,每个子进程所拥有的所有线程的总数要足够大,以便可以协同处理所有的请求。

更多可以查看apache关于mpm的文档:http://httpd.apache.org/docs/2.2/mod/mpm_common.html

<think>好的,用户想要了解关于Nginx和Apache配置优化以及常见的面试问题。首先,我需要明确用户的需求。他们可能正在准备面试,或者希望优化自己的服务器配置。需要分两部分来回答:配置优化和面试问题。 首先,配置优化方面,对于Nginx和Apache,我得回忆两者的主要优化点。Nginx通常以高性能著称,处理高并发能力强,而Apache在动态内容处理上更灵活。用户可能想知道如何调整参数来提升性能,比如工作进程、连接数、缓存设置等。 对于Nginx的优化,可能需要提到worker_processes和worker_connections的设置,使用epoll模型,开启gzip压缩,调整缓冲区大小,以及静态资源缓存。此外,负载均衡和反向代理的配置也是常见优化点。 Apache方面,MPM模块的选择很重要,prefork和worker的不同适用场景。调整MaxRequestWorkers,保持连接KeepAlive,启用压缩模块mod_deflate,同样需要设置缓存头。还有关闭不必要的模块来减少资源消耗。 常见配置误区方面,用户可能错误地设置并发数,或者同时使用两种服务器导致端口冲突。需要提醒他们避免这些错误。 面试问题部分,要区分Nginx和Apache的特性对比,比如事件驱动与进程/线程模型。常见问题包括反向代理配置、负载均衡算法、动静分离的实现,以及性能调优的参数。对于Apache,可能会问KeepAlive的优化,MPM模块的选择,如何限制请求大小等。 用户可能还希望知道如何在实际项目中应用这些优化,比如如何根据服务器硬件调整进程数,或者如何通过压测工具测试配置效果。需要确保回答覆盖理论和实践,帮助用户全面准备。 另外,要检查是否有遗漏的重要优化点,比如SSL配置优化、日志优化(比如关闭access_log或使用缓冲),以及安全相关的配置,比如防止DDoS攻击的限制连接数设置。 最后,组织信息时要结构清晰,分点列出,方便用户阅读和理解。确保使用正确的中文术语,避免翻译错误,比如“工作进程”对应worker processes,“连接数”对应worker connections等。同时,注意区分Nginx和Apache的不同配置方法,避免混淆。</think>以下为Nginx和Apache配置优化及常见面试问题总结,分三个部分呈现: --- ### 一、Nginx配置优化核心要点 1. **进程模型优化** ```nginx worker_processes auto; # 根据CPU核心数自动分配 worker_rlimit_nofile 65535; # 单个进程最大打开文件数 events { use epoll; # Linux系统高性能事件模型 worker_connections 4096; # 每个worker最大连接数 } ``` 2. **缓冲区优化** ```nginx client_body_buffer_size 16K; client_header_buffer_size 1k; client_max_body_size 10m; # 限制上传文件大小 ``` 3. **高效传输配置** ```nginx gzip on; # 开启压缩 gzip_min_length 1k; gzip_comp_level 3; keepalive_timeout 65; # 保持长连接 ``` 4. **静态资源缓存** ```nginx location ~* \.(jpg|css|js)$ { expires 30d; # 客户端缓存30天 add_header Cache-Control "public"; } ``` --- ### 二、Apache配置优化核心要点 1. **MPM模块选择** ```apache # prefork模式(PHP场景) <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 256 # 最大并发连接数 </IfModule> ``` 2. **连接保持优化** ```apache KeepAlive On KeepAliveTimeout 5 MaxKeepAliveRequests 100 ``` 3. **模块管理** ```apache LoadModule deflate_module modules/mod_deflate.so # 开启压缩 # 禁用无用模块:mod_negotiation, mod_status等 ``` --- ### 三、高频面试问题 #### Nginx相关问题 1. 解释Nginx如何处理10万并发连接? ✅ 答案:通过异步非阻塞事件驱动模型,少量worker进程复用连接 2. 如何实现Nginx动静分离? ✅ 示例配置: ```nginx location ~ \.php$ { proxy_pass http://backend; } location /static/ { root /data/www; } ``` #### Apache相关问题 1. prefork和worker模式区别? ✅ prefork:多进程+阻塞IO,稳定性高 ✅ worker:多进程+多线程,内存占用低 2. 如何优化Apache的KeepAlive参数? ✅ 公式参考: `KeepAliveTimeout = 平均请求处理时间 × 2` `MaxKeepAliveRequests = 总内存 / 单个进程内存消耗` --- #### 典型优化误区 - ❌ 盲目设置worker_processes为CPU核数(需考虑I/O密集型场景) - ❌ 同时启用Nginx和Apache的gzip压缩(会导致重复压缩) - ❌ 未设置client_max_body_size导致大文件上传失败 建议通过`ab`或`wrk`工具进行压测验证配置效果,关注Requests/sec和内存占用指标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值