从原理到实战,彻底搞懂 Nginx!

2023-01-06 0 948

责任编辑具体来说如是说 Nginx 的逆向全权、阻抗平衡、回音分立和高需用的基本原理,随即简述 Nginx 的命令行,最终透过前述事例同时实现 Nginx 逆向全权和阻抗平衡的具体内容实用性。专业委员会 Nginx ,一则足够多了。

1. 概要

Nginx 是开放源码的轻量 Web 伺服器、逆向全权伺服器,和阻抗平衡器和 HTTP 缓存器。其特征是高mammalian,高操控性和低缓存。

Nginx 专为操控性强化而合作开发,操控性是其最重要的权衡,同时实现上十分著重工作效率,能抵挡高阻抗的挑战,最小能全力支持 50000 个mammalian通话量。 Nginx 还全力支持热布署,它的采用不光难,基本上能努力做到 7×24 半小时无间断运转。 Nginx 的中文网站采用者有:腾讯、淘宝网、京东、腾讯、新浪、网易等。

2. 逆向全权

2.1 萨德基全权

Nginx 不但能做逆向全权,同时实现阻抗平衡,还能用作萨德基全权来展开玩游戏等机能。

从原理到实战,彻底搞懂 Nginx!

2.2 逆向全权

应用程序对全权伺服器是无交互的,应用程序不须要做任何人配

从原理到实战,彻底搞懂 Nginx!

3. 阻抗平衡

将原本允诺分散到一般而言伺服器上的情形改成减少伺服器的数目,接着将允诺递送到各伺服器上,将阻抗递送到相同的伺服器,即阻抗平衡。

从原理到实战,彻底搞懂 Nginx!

4. 回音分立

为了加快中文网站的解析速度,能把静态页面和动态页面由相同的伺服器来解析,加快解析速度,降低原来一般而言伺服器的压力。

从原理到实战,彻底搞懂 Nginx!

5. 高需用

为了提高系统的需用性和容错能力,能减少nginx伺服器的数目,当主伺服器发生故障或宕机,备份伺服器能立即充当主伺服器展开无间断工作。

从原理到实战,彻底搞懂 Nginx!

6. Nginx命令行

6.1 文件结构

Nginx 命令行由三部分组成。

#全局块 events { #events块} http #http块 {#http全局块 server #server块 {#server全局块 location [PATTERN] #location块 {} location [PATTERN] {} } server {}#http全局块 }

第一部分 全局块

主要设置一些影响 nginx 伺服器整体运转的实用性指令。

比如: worker_processes 1; , worker_processes 值越大,能全力支持的mammalian处理量就越多。第二部分 events块

events 块涉及的指令主要影响Nginx伺服器与采用者的网络连接。

比如: worker_connections 1024; ,全力支持的最小通话量。第三部分 http块

http 块又包括 http 全局块和 server 块,是伺服器实用性中最频繁的部分,包括实用性全权、缓存、日志定义等绝大多数机能。

server块:实用性虚拟主机的相关参数。location块:实用性允诺路由,和各种页面的处理情形。

6.2 命令行

########### 每个指令必须有分号结束。################# #user administrator administrators; #实用性采用者或者组,默认为nobody nobody。 #worker_processes 2; #允许生成的进程数,默认为1 #pid /nginx/pid/nginx.pid; #指定nginx进程运转文件存放地址error_log log/error.log debug; #制定日志路径,级别。这个设置能放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg events { accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off #use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #最小通话量,默认为512 } http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型,默认为text/plain #access_log off; #取消服务日志 log_format myFormat $remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for; #自定义格式access_log log/access.log myFormat; #combined为日志格式的默认值 sendfile on; #允许sendfile方式传输文件,默认为off,能在http块,server块,location块。sendfile_max_chunk 100k; #每个进程每次调用传输数目不能大于设定的值,默认为0,即不设上限。 keepalive_timeout 65; #连接超时时间,默认为75s,能在http,server,location块。 upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #热备 } error_page 404 https://www.baidu.com; #错误页 server { keepalive_requests 120; #单连接允诺上限次数。 listen 4545; #监听端口server_name 127.0.0.1; #监听地址 location ~*^.+$ { #允诺的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 #root path; #根目录 #index vv.txt; #设置默认页proxy_pass http://mysvr; #允诺转向mysvr 定义的伺服器列表 deny 127.0.0.1; #拒绝的ip allow 172.18.5.54; #允许的ip } } }

7.实用性实例

7.1 逆向全权

7.1.1 两栖作战一

同时实现效果:

在浏览器输入 http://www.abc.com

, 从 nginx 伺服器跳转到 linux 系统 tomcat 主页面。

具体内容实用性:
server {listen 80; server_name 192.168.4.32; #监听地址 location / { root html; #/html目录 proxy_pass http://127.0.0.1:8080; #允诺转向index index.html index.htm; #设置默认页 } }

7.1.2 两栖作战二

同时实现效果:

根据在浏览器输入的路径相同,跳转到相同端口的服务中。

具体内容实用性:
server { listen 9000;server_name 192.168.4.32; #监听地址 location ~ /example1/ { proxy_pass http://127.0.0.1:5000; }location ~ /example2/{ proxy_pass http://127.0.0.1:8080; } }

location 指令说明:

~ : 表示uri包含正则表达式,且区分大小写。~* : 表示uri包含正则表达式,且不区分大小写。= : 表示uri不含正则表达式,要求严格匹配。

7.2 阻抗平衡

7.2.1 两栖作战一

同时实现效果:

在浏览器地址栏输入 http://192.168.4.32/example/a.html

,平均到 5000 和 8080 端口中,同时实现阻抗平衡效果。

具体内容实用性:
upstream myserver { server 192.167.4.32:5000; server 192.168.4.32:8080; }server{ listen 80; #监听端口 server_name 192.168.4.32; #监听地址 location / { root html; #html目录index index.html index.htm; #设置默认页 proxy_pass http://myserver; #允诺转向 myserver 定义的伺服器列表 } }

nginx 分配伺服器策略

轮询(默认)

按允诺的时间顺序依次逐一分配,如果服务器down掉,能自动剔除。权重

weight 越高,被分配的应用程序越多,默认为 1。比如:
upstream myserver { server 192.167.4.32:5000 weight=10;server 192.168.4.32:8080weight=5; }

ip

按允诺 ip 的 hash 值分配,每个访客固定访问一个后端伺服器。比如:
upstream myserver { ip_hash;server 192.167.4.32:5000; server 192.168.4.32:8080; }

fair

按后端伺服器的响应时间来分配,响应时间短的优先分配到允诺。比如:
upstream myserver { fair; server 192.167.4.32:5000; server 192.168.4.32:8080; }

恭喜!目前为止你已经掌握了 Nginx 的基本基本原理,并且能够实用性逆向全权和阻抗平衡。接下来还会更新一则Nginx进阶:从基本原理到实践,全盘比如说Nginx(高级篇),同时实现Nginx 实用性回音分立和高需用实用性实例,并对 Nginx 基本原理展开深入解析。

补充:惯例,如果只想看一本关于Nginx的书,还是推荐最经典的程序员必读书单:深入理解Nginx(第2版) (豆瓣),可自行购买。

我从这里购入:

Nginx要结合代码和实践才能真正意会到它的强大之处,这本 从第1版发行以后,就深受广大程序员的喜爱。能让你对合作开发Nginx模块的必备知识了如指掌。

愿早日战胜疫情!码字不易,点个赞鼓励一下吧~

其它干货(必备技能):

小晶:从基本原理到两栖作战,全盘比如说 Nginx!(高级篇)53 赞同 · 11 评论文章

相关文章

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

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