C++后端程序员必须彻底搞懂Nginx,从原理到实战详解

2023-01-14 0 687

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

1. 概要

  Nginx

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

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

2. 逆向全权

2.1 萨德基全权

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

C++后端程序员必须彻底搞懂Nginx,从原理到实战详解

2.2 逆向全权

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

C++后端程序员必须彻底搞懂Nginx,从原理到实战详解

3. 阻抗均衡

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

C++后端程序员必须彻底搞懂Nginx,从原理到实战详解

4. 回音分立

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

C++后端程序员必须彻底搞懂Nginx,从原理到实战详解

5. 高需用

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

C++后端程序员必须彻底搞懂Nginx,从原理到实战详解

分享更多关于C/C++ Linux后端合作开发网络底层基本原理知识学习提升,完善技术栈,内容知识点包括Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,

C++后端程序员必须彻底搞懂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 两栖作战一

同时实现效果:

  在浏览器输入 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:8080 weight=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 的基本基本原理,并且能够实用性逆向全权和阻抗平衡。

分享更多关于C/C++ Linux后端合作开发网络底层基本原理知识学习提升,完善技术栈,内容知识点包括Linux,Nginx,ZeroMQ,MySQL

C++后端程序员必须彻底搞懂Nginx,从原理到实战详解

相关文章

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

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