一、前言
系统: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.配置修改:
❶添加内容
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。
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;
❷修改内容
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,查询缓存给充足可能有更好的效果
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
4.配置文件处修改
增强一点opcache
[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.性能调整
3.配置修改
tcp-keepalive 600
tcp-keepalive定时检测对端是否断开
六、网站配置
1.前言
我也在摸索中,下面给出一些重要的部分参考,以echs.top网站的配置文件为例
2.配置文件
server
{
listen 80 default_server;
listen 443 ssl;
listen 443 quic reuseport;
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证书和tls版本设置可能大不相同,我也不是太清楚
# SSL-END
# HTTP3提示-START
ssl_early_data on;
add_header Alt-Svc 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"';
# 貌似是提醒浏览器网站已经开启了HTTP3
# HTTP3提示-END
# HSTS-START
add_header Strict-Transport-Security "max-age=63072000" always;
# 应该理解为提醒浏览器此网站请完全用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版本中如下
listen 80;
listen 443 ssl;
listen 443 quic;
listen [::]:443 ssl;
listen [::]:443 quic;
http2 on;
在不支持http3的nginx版本中如下(一般为nginx1.25以下)
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.更多内容
参考文章
秒懂!四步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