当前位置: 首页> 财经> 访谈 > Nginx优化与防盗链

Nginx优化与防盗链

时间:2025/7/9 16:16:26来源:https://blog.csdn.net/weixin_62922268/article/details/139352453 浏览次数:0次

目录

一、Nginx性能优化

1、开启网页压缩

2、页面缓存

3、连接保持超时

4、设置工作进程数

5、设置工作进程连接数 

6、工作进程静态绑核

7、开启高效文件传输模式

8、IO多路复用

9、连接优化

二、Nginx安全优化

1、配置Nginx隐藏版本号

2、防盗链

3、访问控制

4、设置运行用户/组

5、限制请求数

6、限制连接数

7、日志分割

三、Nginx重要配置

1、系统内核优化

2、用过哪些nginx模块


一、Nginx性能优化

1、开启网页压缩

  • Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
  • 允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
  • 可在配置文件中加入相应的压缩功能参数对压缩性能进行优化

图片缩放:

2、页面缓存

  • 当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度
  • 一般针对静态网页设置,对动态网页不设置缓存时间

设置方法

修改配置文件,在ttp段、或者server段、或者location段加入对特定内容的过期参数

示例

修改Nginx的配置文件,在location段加入expires 参数

location ~\.(gif|jpg|jepg|png|bmp|ico)$ {root html;expires 1d;
}

3、连接保持超时

为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间

超时参数

  •  keepalive_timeout  服务端超时时间  客户端超时时间;
    • 设置连接保持超时时间
  • Client_header_timeout
    • 指定等待客户端发送请求头的超时时间
  • Client_body_timeout
    • 设置请求体读超时时间

4、设置工作进程数

  • 在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
  • 更改进程数的配置方法
    • 修改配置文件,修改进程配置参数
  • 修改配置文件的worker_processes参数
    • 一般设为CPU的个数或者核数
    • 在高并发情况下可设置为CPU个数或者核数的2倍
  • 增加进程数,可减少了系统的开销,提升了服务速度
  • 使用ps aux查看运行进程数的变化情况
[root@www conf]# cat /proc/cpuinfo | grep -c "physical"
4
[root@www conf]# vi nginx.conf
worker_processes 4;
[root@www conf]# systemctl restart nginx
[root@www conf]# ps aux | grep nginx

查看cpu情况 lscpu

  • 默认情况,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU
  • 在一台4核物理服务器,进行配置,将进程进行分配work_processes  与服务器CPU数量相同或auto
[root@www conf]# vi nginx.conf
worker processes 4;
worker_cpu affinity 0001 0010 0100 1000;
#cup与进程一一对应

5、设置工作进程连接数 

作进程的连接数是由 worker_connections 指令来控制的。这个指令用于设置每个工作进程所能处理的最大连接数。

events {worker_connections 1024; # 设置每个工作进程的最大连接数# worker_rlimit_nofile
}

6、工作进程静态绑核

在 Nginx 中,你可以使用 worker_cpu_affinity 指令来设置工作进程的 CPU 亲和性,从而将工作进程绑定到特定的 CPU 核心上。这可以帮助优化服务器性能,尤其是在多核服务器上。

worker_cpu_affinity 指令接受一个 CPU 亲和性掩码作为参数,掩码中每个位代表一个 CPU 核心。例如,对于一个具有 4 个 CPU 核心的服务器,掩码 0001 表示将工作进程绑定到第一个 CPU 核心上,而 1111 则表示将工作进程绑定到所有 CPU 核心上。

以下是一个示例配置,将工作进程绑定到前两个 CPU 核心上:

worker_processes 4;
worker_cpu_affinity 0001 0010;

在这个示例中,假设服务器有四个 CPU 核心,worker_cpu_affinity 将工作进程绑定到第一个和第二个 CPU 核心上。

7、开启高效文件传输模式

在 Nginx 中,开启高效文件传输模式可以显著提升服务器的性能和效率。你提到的三个指令 sendfile on;tcp_nopush on;tcp_nodelay on; 都是用于优化文件传输和网络性能的。

  1. sendfile on; sendfile 是一个系统调用,允许直接在内核空间和用户空间之间传输数据,而不需要将数据从内核缓冲区复制到用户缓冲区再发送。通过开启 sendfile 功能,Nginx 可以直接在磁盘和网络之间传输文件,提高文件传输效率,减少 CPU 和内存的消耗。

  2. tcp_nopush on; tcp_nopush 指令用于控制数据包的发送时机。当 tcp_nopush 设置为 on 时,Nginx 会尽可能地在发送 TCP 数据包之前将数据累积到一个完整的数据包中,从而减少 TCP 消息的数量,提高传输效率。这对于发送大文件或大量静态内容的情况特别有效。

  3. tcp_nodelay on; tcp_nodelay 指令用于控制是否启用 Nagle 算法。Nagle 算法的目的是将多个较小的数据包合并成一个较大的数据包,以提高网络的利用率。但是,在某些情况下,这种合并会导致延迟增加,例如对于实时性要求较高的应用。通过开启 tcp_nodelay,Nginx 可以禁用 Nagle 算法,减少延迟,提高网络传输速度

worker_processes auto;events {worker_connections 1024;
}http {sendfile on;tcp_nopush on;tcp_nodelay on;server {listen 80;server_name example.com;location / {root /var/www/html;index index.html;}}
}

8、IO多路复用

在 Nginx 中,多路复用是一种提高性能的关键技术,其中 epoll 是 Linux 下的一种高效的多路复用机制。通过使用 epoll,Nginx 能够更有效地管理大量的并发连接,从而提高服务器的吞吐量和性能。

在 Nginx 配置中,通过 use 指令可以指定 Nginx 使用的多路复用机制,而 epoll 就是其中一种选择。下面是一个简单的示例 Nginx 配置,演示了如何使用 epoll 多路复用:

worker_processes auto;events {worker_connections 1024;use epoll;
}http {# 其他 HTTP 配置项...server {# 服务器配置...}
}

9、连接优化

  1. multi_accept on;multi_accept 设置为 on 时,Nginx 的监听进程可以同时接受多个网络连接。这意味着在有新连接到达时,监听进程可以立即接受多个连接,而不是一次只处理一个连接。这样可以加快连接的接受速度,尤其是在高并发的情况下,可以减少连接等待时间,提高服务器的响应速度。

  2. accept_mutex on; accept_mutex 用于控制新连接的串行处理,以防止多个工作进程同时处理新连接,从而避免所谓的“惊群现象”(thundering herd)。惊群现象指的是在某些条件下,多个进程竞争同一个资源或锁时,会导致大量进程被唤醒,但最终只有一个进程能够获得资源,其他进程都会进行无用的竞争和等待。通过开启 accept_mutex,Nginx 可以以串行方式接入新连接,避免这种不必要的竞争和资源浪费。

以下是一个简单的示例 Nginx 配置,演示了如何使用这些指令:

worker_processes auto;events {worker_connections 1024;multi_accept on;accept_mutex on;
}http {# 其他 HTTP 配置项...server {# 服务器配置...}
}

二、Nginx安全优化

1、配置Nginx隐藏版本号

  • 隐藏Nginx版本号,避免安全漏洞泄漏
  • Nginx隐藏版本号的方法
    • 修改配置文件法
    • 修改源码法

1)将Nginx配置文件中servee tokens 选项的值设置为off

重启服务,访问网站使用curl-命令检测

vim /usr/local/nginx/conf/nginx.conf
http {include       mime.types;default_type  application/octet-stream;server_tokens off;								#添加,关闭版本号......
}systemctl restart nginx
curl -I http://192.168.80.10

2)修改 vim /opt/nginx-1.26.0/src/core/nginx.h\

3)headers-more-nginx-module-0.34.tar.g2 插件包,解压到一个日录,编译安装 nginx。
./confiqure --add-module='模块路径'ss make && make install

修改 nginx.conf 文件,在 http 配置块加 more clear headers'响应头字段';

即可去除 hginx 响应头任何想去除的字段

2、防盗链

在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失

Nginx防盗链功能也非常强大。默认情况下,只需要进行简单的配置,即可实现防盗链处理

3、访问控制

在 Nginx 中,可以使用 denyallow 指令来进行访问控制,限制特定 IP 地址或IP地址段对服务器资源的访问。

deny指令

deny 指令用于拒绝特定的 IP 地址或IP地址段对服务器资源的访问。可以在全局配置、http 配置块或者特定的 server 或 location 块中使用。

server {listen 80;server_name example.com;location /private {deny   192.168.1.1;deny   10.10.10.0/24;deny   all;# 其他配置...}
}

在上面的示例中,deny 指令用于限制对 /private 路径的访问。IP 地址为 192.168.1.110.10.10.0/24 的用户将会被拒绝访问,而其他用户也将被拒绝访问,因为最后一个 deny 指令是 deny all;

allow指令

allow 指令用于允许特定的 IP 地址或IP地址段对服务器资源的访问,与 deny 相反。

server {listen 80;server_name example.com;location /restricted {allow   192.168.1.0/24;allow   10.10.10.10;deny    all;# 其他配置...}
}

在上面的示例中,allow 指令用于限制对 /restricted 路径的访问。只有 IP 地址为 192.168.1.0/2410.10.10.10 的用户将被允许访问,其他用户将被拒绝访问,因为最后一个 deny 指令是 deny all;

4、设置运行用户/组

  • Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
  • Nginx默认使用nobody用户账号与组账号
  • 修改的方法
    • 编译安装时指定用户与组
    • 修改配置文件指定用户与组

1)编译安装时指定

  1. 创建用户账号与组账号,如nginx
  2. 编译安装时--user与--group指定Nginx服务的运行用户与组账号
[root@www nginx-1.12.0]# ./configure-prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
....

2)修改配置文件法指定

  1. 新建用户账号,如nginx
  2. 修改主配置文件 user选项,指定用户账号与组账号
  3. 重启nginx服务,使配置生效
  4. 使用ps aux命令查看nginx的进程信息,验证运行用户
[root@www conf# vi nginx.conf
user nginx nginx;
[root@www conf]# systemctl restart nginx
[root@www confl# ps aux lgrep nginx
root    130034 0.0 0.0 20220 620 ?       Ss 19:41 0:00 nginx:
master process /usr/local/sbin/nginx
nginx   130035 0.0 0.0 20664 1512 ?        S 19:41 0:00 nginx:

5、限制请求数

  1. limit_req_zone: limit_req_zone 指令用于定义一个共享内存区域,用于存储客户端请求的状态信息,以便进行请求速率限制。该指令通常在 http 配置块中使用。

    http {limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
    }
    

    在上面的示例中,定义了一个名为 mylimit 的共享内存区域,大小为 10MB,用于存储客户端的请求状态信息。限制请求速率为每秒 1 次。

  2. limit_req: limit_req 指令用于在特定的 serverlocation 块中启用请求速率限制。

    server {location /api {limit_req zone=mylimit burst=5 nodelay;# 其他配置...}
    }
    

    在上面的示例中,limit_req 指令将请求速率限制应用于 /api 路径的请求。zone 参数指定了之前定义的共享内存区域名称,burst 参数指定了允许的最大突发请求数,nodelay 参数表示不延迟处理请求,而是直接拒绝超出速率限制的请求。

6、限制连接数

  1. limit_conn_zone: limit_conn_zone 指令用于定义一个共享内存区域,用于存储客户端连接的状态信息,以便进行连接数限制。该指令通常在 http 配置块中使用。

    http {limit_conn_zone $binary_remote_addr zone=addr:10m;
    }
    

    在上面的示例中,定义了一个名为 addr 的共享内存区域,大小为 10MB,用于存储客户端连接的状态信息。

  2. limit_conn: limit_conn 指令用于在特定的 serverlocation 块中启用连接数限制。

    server {location /downloads {limit_conn addr 10;# 其他配置...}
    }
    

    在上面的示例中,limit_conn 指令将连接数限制应用于 /downloads 路径的连接。addr 参数指定了之前定义的共享内存区域名称,10 表示最大连接数为 10。

7、日志分割

  • 随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件
  • 太大的日志文件对监控是一个大灾难
    • 定期进行日志文件的切割
  • Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割
  • 通过Linux的计划任务周期性地进行日志切割

编写脚本 cd /usr/local/nginx/logs下有两个文件

三、Nginx重要配置

1、系统内核优化

/etc/sysctl.conf   内核参数配置文件
#用于解决系统存在大量TIME WAIT状态连接的问题
net.ipv4.tcp_syncookies=1        表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击
net.ipv4.tcp_tw_reuse=1          表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_tw_recycle=1        表示开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_fin_timeout=30      修改MSL值,系统默认的TIMEOUT时间

#如果连接数本身就很多,可再优化TCP的可用端口范围,进一步提升服务器的并发能力
net.ipv4.tcp_keepalive_time=1200           #当keepalive启用时,TCP发送keepalive探测消息的频率,确认客户端是否断网
net.ipv4.ip_local_port_range=1024 65535    #用于向外连接的端口范围。缺省情况下很小,为32768 60999
net.ipv4.tcp_max_syn_backlog=8192          #SYN队列长度,默认为1024,加大队列长度为8192,可容纳更多等待连接的网络连接数
net.ipv4.tcp_max_tw_buckets=5000           #表示系统同时保持TIME WAIT的最大数量
net.core.somaxconn=65535                   #一个端口能够监听的最大连接数

#如果需要IP路由转发
net.ipv4.ip_forward=1

/etc/security/limits.conf   内核资源限制文件
*     soft     noproc            65535         打开系统进程数
*     hard     noproc            65535
*     soft     nofile            65535         进程打开文件数
*     hard     nofile            65535

2、用过哪些nginx模块

http_stub_status_module       访问状态统计模块
http_gzip_module              网页压缩模块
http_rewrite_module           URL地址重写模块
http_ssl_module               https安全加密模块
http_auth_basic_module        网页用户认证模块
http_fastcgi_module           fastcgi转发模块
http_image_filter_module      图片处理模块
http_mp4/flv_module           mp4/flv视频格式模块
http_limit_req_module         限制请求数模块
http_limit_conn_module        限制连接数模块
http_proxy_module             代理转发模块
http_upstream_*_module        负载均衡模块
stream                        四层代理转发模块

思考:
你做过哪些nginx优化?
nginx配置方面做过....
系统内核方面做过....

关键字:Nginx优化与防盗链

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: