Define SRVROOT "E:/Apache24"
ServerAdmin admin@example.com
#custom settings 兼容2.2的配置的写法如果用到写到最上面
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule filter_module modules/mod_filter.so
LoadModule headers_module modules/mod_headers.so
LoadModule fcgid_module modules/mod_fcgid.so
LoadModule log_rotate_module modules/mod_log_rotate.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule expires_module modules/mod_expires.so
LoadModule version_module modules/mod_version.so
LoadModule speling_module modules/mod_speling.so
<IfModule log_rotate_module>
RotateLogs On
RotateLogsLocalTime On
</IfModule>
<IfModule mpm_winnt_module>
MaxConnectionsPerChild 100000
ThreadsPerChild 1024
</IfModule>
AddHandler fcgid-script .php
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
FcgidMaxRequestsPerProcess 1000
FcgidInitialEnv PHPRC "E:/phpstudy_pro/Extensions/php/php7.3.4nts"
FcgidWrapper "E:/phpstudy_pro/Extensions/php/php7.3.4nts/php-cgi.exe" .php
# FcgidMaxRequestLen 104857600
# Include conf/vhosts/*.conf
KeepAlive On
Timeout 60
MaxKeepAliveRequests 100
KeepAliveTimeout 5
#status监控模块
#ExtendedStatus on
# <Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all;
# Allow from all
# </Location>
ServerRoot apache的安装目录
ServerAdmin root@localhost 定义管理员的邮箱
启用压缩
LoadModule deflate_module modules/mod_deflate.so
启用重写
LoadModule rewrite_module modules/mod_rewrite.so
启用默认扩展,支持在这里进行修改httpd主要配置
Include conf/extra/httpd-default.conf
提供文件描述符缓存支持,从而提高Apache性能
LoadModule file_cache_module modules/mod_file_cache.so
启用基于URI键的内容动态缓冲(内存或磁盘)
LoadModule cache_module modules/mod_cache.so
启用基于磁盘的缓冲管理器
LoadModule cache_disk_module modules/mod_cache_disk.so
基于内存的缓冲管理器
LoadModule socache_memcache_module modules/mod_socache_memcache.so
减少10%左右的重复请求
LoadModule expires_module modules/mod_expires.so
url地址重写模块
LoadModule rewrite_module modules/mod_rewrite.so
过滤模块,使用缓存必须启用过滤模块
LoadModule filter_module modules/mod_filter.so
关闭服务器版本信息
LoadModule version_module modules/mod_version.so
自动修正用户输入的url错误
LoadModule speling_module modules/mod_speling.so
mod_fcgid是一个跟mod_fastcgi二进制兼容的Apache module,能减少mod_fastcgi创建的一些不必要的进程
LoadModule fcgid_module modules/mod_fcgid.so
用来处理cronolog作为apache log分隔处理时出现的bug
LoadModule file_cache_module modules/mod_file_cache.so
keepAlive启用场景
如果有较多的js,css,图片访问,则需要开启长链接
如果内存较少,大量的动态页面请求,文件访问,则关闭长链接,节省内存,提高apache访问的稳定性
如果内存充足,cpu较好,服务器性能优越,则是否开启长链接对访问性能都不会产生影响
keepAlive配置
1、Timeout 60 默认为60s修改为30s
2、KeepAlive on 设置为on状态
4、KeepAliveTimeout 默认为5s,如果值设置过高,由于每个进程都要保持一定时间对应该用户,而无法应付其他用户请求访问,从而导致服务器性能下降。
5、MaxKeepAliveRequests 100 如果设置为0表示无限制,建议最好设置一个值
把MaxKeepAliveRequests设置的尽量大,可以在一次连接中进行更多的HTTP请求。但在测试中发现,把MaxKeepAliveRequests设置成1000,则评测的客户端容易出现“Send requesttimed out”的错误,所以具体数值还要根据自己的情形来设置。
#配置mod_fcgid
AddHandler fcgid-script .php
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
FcgidMaxRequestsPerProcess 1000
# 全局默认使用的PHP版本配置
FcgidInitialEnv PHPRC "E:/phpstudy_pro/Extensions/php/php7.3.4nts"
FcgidWrapper "E:/phpstudy_pro/Extensions/php/php7.3.4nts/php-cgi.exe" .php
# 上传文件的最大尺寸 100MB,这里的 FcgidMaxRequestLen 很重要,当上传内容体积过大,即便修改了php.ini 中配置的上传参数也没有用的
# FcgidMaxRequestLen 104857600
MPM(Multi -Processing Modules, 多处理模块)调优
1、选择合适的MPM(Multi -Processing Modules, 多处理模块)
mpm默认配置在conf/extra/httpd-mpm.conf
查看当前服务器使用的是哪种MPM
# httpd -l
根据显示的带背景色内容可推断出来使用的prefork MPM
prefork
实现非线程、预派生的web服务器。每个服务器进程响应进入的请求,父进程处理服务器池大小。适合需要兼容非线程安全的类库的站点。因为使用的是进程,所以,如果某个请求出现故障,不会影响其它请求,用于隔离每个请求的最好的MPM。该MPM自我调节性强,极少需要调整其配置指令。最重要的是,MaxRequestWorkers要足够大,以处理尽可能多的请求,但同时也不能太大,确保有足够的物理内存来处理请求。
worker:
实现多进程,多线程混合服务器。相比基于进程的服务器,worker使用线程服务器请求,可处理大量请求,同时消耗更少的内存。同时,拥有多进程处理方式,让其仍拥有有基于进程服务器的稳定性。用于控制MPM最重要的指令为ThreadsPerChild和MaxRequestWorkers,其中,ThreadsPerChild控制每个子进程使用的线程数量,MaxRequestWorkers控制线程的最大总数
event:
基于worker,利用主线程来处理新请求,以便允许更多的并发请求。单个控制进程(父进程)负责启动子进程。每个子进程创建一个由ThreadsPerChild指定的固定数量的服务器线程和一个监听线程,监听连接,当请求到达时,传递给worker线程进行处理。可在编译脚本时,使用--with-mpm=event选项来使用event MPM:./configure --with-mpm=event,其它MPM以此类推,不再赘述。
winnt:
是专门针对Windows NT优化的MPM(多路处理模块,它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说 mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程,
参数:
Startserver 服务器启动时生成的子进程数
serverlimit 服务器最多可以生成的子进程数 最大只能设置为20000 物理内存-其他内存 * 0.8 / 每个进程所占的内存
MaxRequestWorkers 表示每个子进程最多可以同时处理的http请求数 当现在需要处理的请求数超过这个值时,那么http请求就会排队
ThreadsPerChild 表示每个子进程可以生成的线程数
ThreadLimit 表示线程限制
MaxConnectionsPerChild 表示每个线程最多可以处理的请求数
MinSpareThreads 表示最小的空闲线程数 (用来处理在apache线程爆满时的突发请求)
MaxSpareThreads 表示最大的空闲线程数 如果没有空间进程数,apache在线程爆满时,如果有突发请求需要处理,apache就会挂掉; 如果最大值小于最小,最大值默认为最小值+1
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
<IfModule mpm_worker_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
<IfModule mpm_winnt_module>
MaxConnectionsPerChild 100000
ThreadsPerChild 1024
</IfModule>
文章来源于:https://blog.csdn.net/weixin_42104231/article/details/86431022
https://www.cnblogs.com/shouke/p/10157728.html
https://blog.csdn.net/zhouzme/article/details/53995566