1.为什么是nginx而不是apache?
2.nginx是如何做到高性能和高可扩展的?
--with-http_stub_status_modele 用于输出nginx基本状态信息模块
--with-openssl=/usr/local/openssl-1.0.2I 指定openssl
--with-gzip_static_module ngx_http_gzip_static_module 允许发送以“.gz”作为文件扩展名的预压缩文件,以替代发送普通文件
--with-http_realip_module 模块用于改变客户端地址和可选端口在发送的头字段里,获取真实IP等
--with-http_sub_module 是一个过滤器,它修改网站响应内容中的字符串
--with-http_ssl_module 用于支持HTTPS
命令:./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module
3.worker工作进程数调优 - worker_processes
查看worker工作进程数
IO密集型 - 一般配置为CUP个数的1.5或2倍;
CPU密集型(计算型) - 一般配置为跟CPU个数一样多;
查看CPU核数
命令:lscpu
也可以通过命令:/proc/cpuinfo 查看
4.Nginx运行CPU亲和力优化 - worker_cpu_affinity
默认情况下可能多个进程跑在一个CPU上或某一核上,导致Nginx进程使用硬件资源不均匀,此次优化是尽可能地分配不同的Nginx进程给不同的CPU处理
配置方法案例:
5.Nginx最大打开文件数优化
worker_connections 修改为1028还是报错,还需要增加一个参数
增加work_rlimit_nofile 1028;后依旧报错,这个时候nginx的最大并发数修改好了,但是服务器本身还是有最大打开文件数限制
注:* - 代表任何用户 soft - 代表软件 hard - 代表硬件
正常情况下,最大打开文件数优化为65535
6.Nginx事件处理模型
注:multi_accept on - 让一个worker工作进程持续的打开接收请求,Linux默认的事件处理模型就是epoll。
7.开启高效传输模式
sendfile默认开启,但是还有优化的空间
允许或禁止在FreeBSD平台上的tcp_nopush套接字选项或者linux平台上的tcp_cork套接字选项。这些选项只有在使用sendfile启用的情况下才能被允许。被允许后可以:
在一个数据包里发送请求头和文件的开始部分;
在一个完整的数据包里发送文件。
8.Nginx连接超时时间优化
注:在高并发的情况下,无论程序语言适合短连接或长连接,都要设置为短链接,以防止资源被耗尽。
9.nginx-fastcgi优化
10.nginx-gzip优化
注:现在生产一般压缩比设置为9,因为现在CPU处理性能都是很快的,不用考虑CPU性能问题。
注:图片资源本身会开启压缩,这里再用gzip压缩作用不大,大文件资源压缩会消耗大量CPU资源,所以这两种不建议进行gzip压缩。
11.Nginx-expires缓存优化&内核参数优化
缓存优化
内核参数优化
参数解析:
【DevOps】Linux 内核网络子系统全面指南与性能调优_linux tc-CSDN博客
/etc/sysctl.conf的参数_linux sysctl.conf-CSDN博客
Linux内核的参数优化(尽量详细的总结)_服务器_zsk_john-GitCode 开源社区
fs.file-max=999999 - 进程可以同时打开的最大句柄数
net.ipv4.tcp_max_tw_buckets - 系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数值,TIME_WAIT套接字将立刻被清除并打印警告信息。 默认为180000,对于Apache、Nginx等服务器来说可以将其调低一点,如改为5000~30000,不通业务的服务器也可以给大一点,比如LVS、Squid。 此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死;
net.ipv4.ip_local_port_range = 1024 65000 - 控制本地端口号的范围;
net.ipv4.tcp_tw_recycle = 1 - 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭,实际上,这个开关,需要net.ipv4.tcp_timestamps(默认开启的)这个开关开启才有效果,这个参数慎重使用,可能导致生产数据丢包;
net.ipv4.tcp_tw_reuse = 1 - 开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭,这个参数慎重使用;
https://blog.csdn.net/m0_62476532/article/details/135564469
网络优化之net.ipv4.tcp_tw_recycle参数-CSDN博客
net.ipv4.tcp_keepalive_time - 在TCP连接空闲多长时间后开始发送保活探测包(单位:秒)。默认值为7200秒(2小时),如果将其设置为60秒,则表示在TCP连接空闲60秒后开始发送保活探测包
net.ipv4.tcp_syncookies = 1 - 开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理,开启可能会带来性能问题;
net.core.netdev_max_backlog - 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.ipv4.tcp_max_syn_backlog - 处于SYN_RECV的TCP最大连接数,当处于SYN_RECV状态的TCP连接数超过tcp_max_syn_backlog后,会丢弃后续的SYN报文
这个参数标示TCP三次握手建立阶段接受SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请求。
12.nginx防盗链