2024.04.12作
配置更新尝试:2024.05.10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| ##openresty worker_processes 4 worker_connection 102400 keepalive_timeout 60 client_max_body_size 32M worker_cpu_affinity 1000 0100 0010 0001;
brotli on; brotli_comp_level 6; brotli_static always; brotli_min_length 1k; brotli_types application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;
##Mariadb query_cache_type = 1 query_cache_size = 0M key_buffer_size = 64M tmp_table_size = 512M innodb_buffer_pool_size = 512M innodb_log_buffer_size = 16M sort_buffer_size = 1024K read_buffer_size = 512K read_rnd_buffer_size = 768K join_buffer_size = 2048K thread_stack = 256K binlog_cache_size = 128K thread_cache_size = 128 table_open_cache = 384 max_connections = 200
##PHP max_execution_time 60 max_input_time 60 memory_limit 512M default_socket_timeout 60 #设置为50动态并发 opcache.memory_consumption=256 opcache.revalidate_freq=600
##Redis tcp-keepalive 600
##网站配置 listen 80; listen 443 ssl; listen [::]:80; listen [::]:443 ssl; http2 on;
#SSL-START ssl_certificate /www/server/web_conf/ssl/echs.top/fullchain.pem; ssl_certificate_key /www/server/web_conf/ssl/echs.top/privkey.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.3; ssl_prefer_server_ciphers off; ssl_early_data on; # HSTS add_header Strict-Transport-Security "max-age=63072000" always; # OCSP stapling ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /www/root.certificate.crt; resolver 8.8.8.8 8.8.4.4 233.5.5.5 valid=3600s; resolver_timeout 5s;
|
一、前言
系统:debian11 4H4G
linux面板:mdserver-web,宝塔理论类似也可参考
本文仅供参考。本人偏小白,文章可能对于服务器的普通用户优化性能有参考意义……大佬忽略即可
如果更好的方案和纠正,可评论告知,感谢大佬

二、OpenResty 1.25.3.1
1.前言
基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。性能更好
此版本,对应nginx1.25,支持http3(虽然我服务器封堵了udp用不了)网站配置与之前http2监听不同,详见网站配置部分
配置方案相对激进,仅供参考
2.外置模块:
Brotli是开源的一种新型压缩算法,Brotli压缩比Gzip压缩性能更好。开启Brotli压缩功能后,CDN节点会对资源进行智能压缩后返回,缩小传输文件大小,提升文件传输效率,减少带宽消耗。
3.性能调整

4.配置修改:
❶添加内容
1 2
| worker_processes 4; worker_cpu_affinity 1000 0100 0010 0001;
|
worker_processes表示worker线程的数量,推荐设置为CPU内核数;
worker_cpu_affinity表示绑定Nginx的worker进程到指定的CPU内核,使每一个worker进程都独享一个CPU,就在内核的调度策略上实现了完全的并发,一般2内核可设置为10 01,4内核可设置为1000 0100 0010 0001。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| brotli on; brotli_comp_level 6; brotli_static always; brotli_min_length 1k; brotli_types application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 8; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable "MSIE [1-6]\.";
|
注:此处添加了br压缩相关参数,如果没有启用br压缩,忽略这部分
brotli_comp_level,压缩级别,可选值范围为0~11,默认值为6;
brotli_min_length,响应数据的最小长度,低于该值将不使用brotli算法执行压缩操作;
brotli_static,是否允许查找预处理好的、以.br结尾的压缩文件;
brotli_types,动态压缩启用时,允许压缩的MIME types;
❷修改内容
1
| worker_rlimit_nofile 512000;
|
注:此项请设置为小于等于linux系统最大打开文件数
worker_rlimit_nofile表示Nginx worker进程可以打开的最大句柄描述符个数,更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。
三、Mariadb 10.11.6
1.前言
MariaDB是MySQL关系数据库管理系统的一个分支,由社区开发,有商业支持,旨在继续保持在GNU GPL下开源。MariaDB打算保持与MySQL的高度兼容性,与MySQL API和命令精确匹配。
两者在功能上的主要区别在于存储引擎,MySQL默认使用InnoDB存储引擎,而MariaDB默认使用XtraDB(Aria)存储引擎,这是基于InnoDB开发的,并进行了一些优化和改进,支持InnoDB数据全文搜索。
10.11版本大致对应mysql8.0,基本可视为mysql8.0的有限替代,mariadb与mysql的主要差距可能在查询性能更好一些( 不是 ,好像是这样),如果你网站不用redis缓存(会失去一定的动态性),那mariadb可能会好一些
配置视为不用MyISAM或很少、配置方案相对激进,仅供参考
2.性能优化

key_buffer_size只对MyISAM表起作用,如果不使用MyISAM表,可相对降低;
Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整;
tmp_table_size 控制内存临时表的最大值,超过限值后就往硬盘写,写的位置由变量 tmpdir 决定;
innodb_buffer_pool_size,innodb索引用,主要缓存innodb表的索引,数据,插入数据时的缓冲。为Innodb加速优化首要参数;
innodb_log_buffer_size,日志缓冲,表示InnoDB写入到磁盘上的日志文件时使用的缓冲区的字节数,默认值为16M。一个大的日志缓冲区允许大量的事务在提交之前不用写日志到磁盘,所以如果有更新,插入或删除许多行的事务,则使日志缓冲区更大一些可以节省磁盘IO;
read_buffer_size为需要全表扫描的MYISAM数据表线程指定缓存,理论只用于MYISAM,所以不用MYISAM可适当缩小;
read_rnd_buffer_size该变量可以被任何存储引擎使用,当从一个已经排序的键值表中读取行时,会先从该缓冲区中获取而不再从磁盘上获取;
Thread_stack:每个连接线程被创建时,MySQL给它分配的内存大小。当MySQL创建一个新的连接线程时,需要给它分配一定大小的内存堆栈空间,以便存放客户端的请求的Query及自身的各种状态和处理信息;
max_connections最大并发连接,每个连接的用户均算作一个连接,增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;
可根据当前状态给出的信息更详细的优化(我也不是太会)
3.配置文件修改项
我的网站图片及随机图api依赖panIndex缓存世纪互联直链,并且基本缓存更新时长>24h,查询缓存给充足可能有更好的效果
1 2
| query_cache_type = 1 query_cache_size = 128M
|
四、PHP 8.3.4
1.前言
我主要用到的吃内存的就PHP和mariadb,所以配置给的相当充足,并且系统的redis用在了这里
配置方案相对激进,仅供参考
2.额外添加扩展
在 安装扩展 处安装redis、opcache,卸载memcache、memcached(有用到memcache那就不卸,不过memcached和redis好像不能共用)
3.配置修改及性能调整
内存相对充足,又想性能高一些,那就适当增大脚本内存限制

内存充足,直接静态提性能,我设置为了60并发(虽然实际根本用不到这么高的并发,毕竟我博客交互基本都在artalk评论)
内存不充足的情况下应该克制一点,防止内存爆炸。并发量和日访问量是两个概念,所谓并发可以简单理解为同一秒访问网站的客户数量,假设并发设置为50(即每秒同时访问50次),那么1分钟就可以有 3000 的访问量。但也不是说并发设置的越大就越好,如果并发数设置过大,被 CC 攻击时服务器宕机挂掉的可能性也十分的高,建议并发数设置不要超过 300
一般4G内存的云服务器,设置30~80并发就可以。

4.配置文件处修改
增强一点opcache
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| [opcache] zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=256 # 给opcache分配的内存 opcache.interned_strings_buffer=16 # 分配的字符串驻留内存 opcache.max_accelerated_files=10000 # 允许缓存的文件数量以及大小 opcache.revalidate_freq=600 # 参数启用时,OPcache 会在每个请求中检查脚本文件的时间戳以确定是否重新缓存。 opcache.fast_shutdown=1 opcache.enable_cli=1 opcache.jit=1205 opcache.jit_buffer_size=64M opcache.save_comments=0 opcache.blacklist_filename=/www/server/php/opcache-blacklist.txt
|
opcache用于缓存PHP脚本的解释代码,从而提高PHP应用程序的性能。当PHP脚本首次被解释执行时,PHP 将脚本编译成一组中间代码,并在运行时执行这些opcode。OPcache的作用是缓存这些opcode,避免在每次请求时都重新解释和执行相同的脚本。
5.会话管理
会话管理设置为redis并连接,这个就不放图了,根据配置自己填就行了
php默认的会话是保存在硬盘里面的,如果你不是SSD硬盘,可以保存在redis或者Memcached里面,性能可能会有一定提升
五、Redis 7.2.2
1.前言
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。最大的优势在于不会丢失数据,进程的数据仍然在磁盘有存储
这里我主要用PHP的会话管理,配置方案相对激进,仅供参考
2.性能调整
只有php再用,就让连接尽量更稳定一些

3.配置修改
tcp-keepalive定时检测对端是否断开
六、网站配置
1.前言
我也在摸索中,下面给出一些重要的部分参考,以echs.top网站的配置文件为例
2.配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| server { listen 80 default_server; listen 443 ssl; listen 443 quic reuseport; listen [::]:80; listen [::]:443 ssl; listen [::]:443 quic reuseport; http2 on; # 此处只需一个站点有default_server、reuseport,并且在旧版1.2系的nginx此处配置略不同注意区分 server_name echs.top blog.echs.top; index index.php index.html; root /www/wwwroot/echs.top/;
# error_page 404/404.html; #HTTP_TO_HTTPS_START if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } # HTTP_TO_HTTPS_END # SSL-START ssl_certificate /www/server/web_conf/ssl/echs.top/fullchain.pem; ssl_certificate_key /www/server/web_conf/ssl/echs.top/privkey.pem; # 证书文件路径,如果你泛域名证书,完全可以所有网站相同路径,这样每次只用更新一个文件 ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets on; ssl_protocols TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_early_data on; # 不同的ssl证书和tls版本设置可能大不相同,我也不是太清楚 # SSL-END # HSTS-START add_header Strict-Transport-Security "max-age=63072000" always; add_header Alt-Svc 'h3=":443";ma=86400,h3-29=":443";ma=86400'; # 应该理解为提醒浏览器此网站请完全用HTTPS访问 # HSTS-END # OSPf-START ssl_stapling on; ssl_stapling_responder http://ocsp.globalsign.com/alphasslcasha256g4; ssl_stapling_verify on; ssl_trusted_certificate /www/server/web_conf/ssl/echs.top/fullchain.pem; resolver 8.8.8.8 8.8.4.4 valid=3600s ipv6=off; resolver_timeout 4s; # OCSP Stapling,优化ssl握手速度的配置,我是国外服务器,这里仅供参考 # OSPf-END error_page 497 https://$host$request_uri; #301-START include /www/server/web_conf/nginx/redirect/echs.top/*.conf; #301-END #PROXY-START include /www/server/web_conf/nginx/proxy/echs.top/*.conf; #PROXY-END #ERROR-PAGE-START #error_page 404 /404.html; #error_page 502 /502.html; #ERROR-PAGE-END #PHP-INFO-START include /www/server/web_conf/php/conf/enable-php-83.conf; #PHP-INFO-END #REWRITE-START include /www/server/web_conf/nginx/rewrite/echs.top.conf; #REWRITE-END #禁止访问的文件或目录 location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } #一键申请SSL证书验证目录相关设置 location ~ \.well-known{ allow all; } location ~ .*\\.(webp|gif|jpg|jpeg|png|bmp|swf|js|css)$ { expires 30d; error_log /dev/null; access_log /dev/null; } access_log /www/wwwlogs/echs.top.log main; error_log /www/wwwlogs/echs.top.error.log; }
|
注意在最新版本nginx/1.25中listen选项中的http2参数已经被删除了,要开启http2使用选项http2 on;代替,而在旧版nginx中http监听段配置与上方不同
在nginx1.25以上支持http3版本中如下
1 2 3 4 5 6
| listen 80; listen 443 ssl; listen 443 quic; listen [::]:443 ssl; listen [::]:443 quic; http2 on;
|
在不支持http3的nginx版本中如下(一般为nginx1.25以下)
1 2 3 4
| listen 80; listen 443 ssl http2; listen [::]:443 ssl http2; listen [::]:80;
|
ssl_protocols推荐配置TLSv1.2 TLSv1.3 去除TLSv1及1.1的支持, 现在基本已经很难见到只支持TLSv1和1.1协议的客户端设备了
ssl_session_timeout ssl会话超时时间可以设定为1d一天, 可极大的减少ssl握手所消耗的cpu算力
ssl_session_cache 会话缓存大小设置为多进程共享 shared:SSL:10m; 根据服务器内存大小可以适当再增大缓存
ssl_session_tickets 关闭无服务器端状态的传输层安全(TLS)会话恢复, 默认开启
ssl_prefer_server_ciphers 关闭要求服务器密码优先于客户端密码保证一定程度兼容性.(默认关闭)
ssl_ciphers推荐在下方SSL Config Generator生成
更多内容就不做详细解释了直接参考更多内容及上方标注配置即可
3.更多内容
参考文章
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 秒懂!四步16点高效搞定高性能web服务器nginx | https://cloud.tencent.com/developer/article/1360916 NGINX快速入门(06)Nginx性能参数调优 | https://zhuanlan.zhihu.com/p/505325658?utm_id=0 [技术教程]宝塔Nginx开启支持HTTP3/QUIC协议 - 简易教程 | https://www.toubiec.cn/1304.html php项目上线优化 | https://zlhdsg.com/archives/2097 php.ini配置文件优化总结 | https://www.jingxialai.com/3753.html 1 Core 1 GB Memory小服务器WordPress调优小记 | https://zhwebsite.com/2023/01/24/1-core-1gb-memory%E5%B0%8F%E6%9C%8D%E5%8A%A1%E5%99%A8wordpress%E8%B0%83%E4%BC%98%E5%B0%8F%E8%AE%B0/ mariadb 内存占用优化 | https://zhuanlan.zhihu.com/p/55528791?utm_id=0 Nginx HTTPS 配置解析 SSL安全 ssl_ciphers 解析 | https://www.nenufm.com/dorthl/76/ SSL/TLS 握手优化详解 | https://www.cnblogs.com/zhengchunyuan/p/8427607.html nginx集成brotli压缩算法 | https://www.cnblogs.com/jackieathome/p/17957264 大型网站高并发,php-fpm初始化管理配置 | https://zhuanlan.zhihu.com/p/681969278?utm_id=0 Linux宝塔面板高并发优化方案 | https://blog.csdn.net/qq15577969/article/details/125313549 Redis 配置文件说明 | https://www.cnblogs.com/zhoujinyi/p/5565647.html Nginx配置OCSP,增强服务器安全 | https://www.lelexuan.cn/article/32
|