不可不知的Nginx知识

2022-12-27 0 1,083

时代大背景

网络的自由化导致了网络的信息量稳步增长,加上在六十年代这一趋势在R5 CPU 上的失灵,CPU 向着多核方向发展,而 Apache 显然并没有搞好多核构架的准备,它的两个民主化同一天只能处理两个相连,处置完两个允诺后才能处置下两个,这毫无疑问不能应付如今网络上海量的使用者。更何况民主化间转换的成本是非常高的。在这种大背景下,Nginx 不断涌现,能随心所欲处置上百万、上一千万的相连。

Nginx 优势

高mammalian高效能扩展性好高效率热布署开放源码许可

Nginx 主要应用情景

动态资源服务项目,透过邻近地区文件格式系统提供更多服务项目逆向相关服务项目、阻抗平衡API服务项目、职权控制,减少应用服务项目器压力

Nginx 命令行和产品目录

透过 rpm -ql nginx 能查阅 Nginx 加装的命令行和产品目录。

如图是我在某时云上加装的新一代稳定版的Nginx的命令行及产品目录。

不可不知的Nginx知识
/etc/nginx/nginx.conf 核心理念命令行/etc/nginx/conf.d/default.conf 预设http服务项目器命令行/etc/nginx/fastcgi_params fastcgi实用性/etc/nginx/scgi_params scgi实用性/etc/nginx/uwsgi_params uwsgi实用性/etc/nginx/koi-utf/etc/nginx/koi-win/etc/nginx/win-utf 这三个文件格式是代码态射文件格式,因为译者是瑞典人/etc/nginx/mime.types 增设HTTP协定的Content-Type与file相关联关系的文件格式/usr/lib/systemd/system/nginx-debug.service/usr/lib/systemd/system/nginx.service/etc/sysconfig/nginx/etc/sysconfig/nginx-debug 这五个文件格式是用以实用性守护者民主化管理的/etc/nginx/modules 基本共享资源库和内存保护/usr/share/doc/nginx-1.18.0 协助文件格式/usr/share/doc/nginx-1.18.0/COPYRIGHT 著作权新闻稿/usr/share/man/man8/nginx.8.gz 指南/var/cache/nginx Nginx的内存产品目录/var/log/nginx Nginx的笔记产品目录/usr/sbin/nginx 可莱盖/usr/sbin/nginx-debug 增容执行可莱盖

关于 Nginx 的常用命令和命令行句法很容易就能搜到,责任编辑不作约勒,上面从 Nginx 的功能和实际情景起程看看各情景下 Nginx 能提供更多给他们什么样实用性项。在此之后,他们先来明确两个概念:

萨德基全权 Forward proxy

一句话解释萨德基全权,萨德基全权的对象是客户端,服务项目器端看不到真正的客户端。

不可不知的Nginx知识
resolver 8.8.8.8 # 谷歌的域名解析地址 server { location / { # 当客户端允诺我的时候我会把允诺转发给它 # $http_host 要访问的主机名 $request_uri 允诺路径 proxy_pass http://$http_host$request_uri; } }

逆向全权 Reverse proxy

一句话解释逆向全权,逆向全权的对象是服务项目端,客户端看不到真正的服务项目端。

不可不知的Nginx知识

跨域

跨域是前端工程师都会面临的情景,跨域的解决方案有很多。不过要知道在生产中,要么使用 CORS 、要么使用 Nginx 逆向全权来解决跨域。在 Nginx 的命令行中进行如下实用性即可:

server { listen 80; server_name localhost; # 使用者访问 localhost逆向全权到 http://webcanteen.com location / { proxy_pass http://webcanteen.com } }

Gzip

Gzip 是网络上非常普遍的一种数据压缩格式,对于纯文本来说能压缩到原大小的 40%,能节省大量的带宽。不过需要注意的是,启用 Gzip 所需的 HTTP 最低版是 1.1。

location ~ .*\. (jpg|png|gif)$ { gzip off; #关闭压缩 root /data/www/images; } location ~ .*\. (html|js|css)$ { gzip on; #启用压缩 gzip_min_length 1k; # 超过1K的文件格式才压缩 gzip_http_version 1.1; # 启用gzip压缩所需的HTTP最低版 gzip_comp_level 9; # 压缩级别压缩比率越高文件格式被压缩的体积越小 gzip_types text/css application/javascript; # 进行压缩的文件格式类型 root /data/www/html; }

允诺限制

对于大流量恶意的访问,会造成带宽的浪费,给服务项目器增加压力。往往对于同一 IP 的相连数和mammalian数进行限制。

关于允诺限制主要有两种类型:

limit_conn_module 相连频率限制limit_req_module 允诺频率限制
# $binary_remote_addr 远程IP地址 zone 区域名称 10m内存区域大小 limit_conn_zone $binary_remote_addr zone=coon_zone:10m; server { # conn_zone 增设相关联的共享资源内存区域 1是限制的数量 limit_conn conn_zone 1; }
# $binary_remote_addr 远程IP地址 zone 区域名称 10m内存区域大小 rate 为允诺频率 1s 一次 limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s; server { location / { # 设置相关联的共享资源内存区域 burst最大允诺数阈值 nodelay不希望超过的允诺被延迟 limit_req zone=req_zone burst=5 nodelay; } }

访问控制

关于访问控制主要有两种类型:

-http_access_module 基于 IP 的访问控制-http_auth_basic_module 基于使用者的信任登陆

(基于使用者的信任登陆不是很安全,责任编辑不做实用性介绍)

以下是基于 IP 的访问控制:

server { location ~ ^/index.html { # 匹配 index.html 页面 除了 127.0.0.1 以外都能访问 deny 127.0.0.1; allow all; } }

ab命令

ab命令全称为:Apache bench,是 Apache 自带的压力测试工具,也能测试 Nginx、IIS 等其他 Web 服务项目器。

-n 总共的允诺数-c mammalian的允诺数
ab n 1000 c 5000 http://127.0.0.1/

防盗链

location ~ .*\.(jpg|png|gif)$ { # 匹配防盗链资源的文件格式类型 # 透过 valid_referers 定义合法的地址白名单 $invalid_referer 不合法的返回403 valid_referers none blocked 127.0.0.1; if ($invalid_referer) { return 403; } }

阻抗平衡 Load Balance

当他们的网站需要解决高mammalian、海量数据问题时,就需要使用阻抗平衡来调度服务项目器。将允诺合理的分发到应用服务项目器集群中的一台台服务项目器上。

不可不知的Nginx知识

Nginx 能为他们提供更多阻抗平衡的能力,具体实用性如下:

# upstream 指定后端服务项目器地址 # weight 增设权重 # server 中会将 http://webcanteen 的允诺转发到 upstream 池中 upstream webcanteen { server 127.0.0.1:66 weight=10; server 127.0.0.1:77 weight=1; server 127.0.0.1:88 weight=1; } server { location / { proxy_pass http://webcanteen } }

后端服务项目器状态

后端服务项目器支持以下的状态实用性:

down:当前服务项目器不参与阻抗平衡backup:当其他节点都无法使用时的备用服务项目器max_fails:允许允诺失败的次数,若到达就会休眠fail_timeout:经过max_fails次失败后,服务项目器的暂停时间,预设为10smax_conns:限制每个服务项目器的最大接收相连数
upstream webcanteen { server 127.0.0.1:66 down; server 127.0.0.1:77 backup; server 127.0.0.1:88 max_fails=3 fail_timeout=10s; server 127.0.0.1:99 max_conns=1000; }

分配方式

轮询(预设),每个允诺按照时间顺序轮流分配到不同的后端服务项目器,如果某台后端服务项目器宕机,Nginx 轮询列表会自动将它去除掉。weight(加权轮询),轮询的加强版,weight 和访问几率成正比,主要用于后端服务项目器性能不均的情景。ip_hash,每个允诺按照访问 IP 的 hash 结果分配,这样每个访问能固定访问两个后端服务项目器。url_hash,按照访问 URL 的 hash 结果来分配允诺,使得每个URL定向到同两个后端服务项目器上,主要应用于后端服务项目器为内存时的情景。自定义hash,基于任意关键字作为 hash key 实现 hash 算法的阻抗平衡fair,按照后端服务项目器的响应时间来分配允诺,响应时间短则优先分配。

译者:童欧巴

链接:https://juejin.im/post/6864085814571335694

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务