责任编辑具体来说如是说 Nginx 的逆向全权、阻抗平衡、回音分立和高需用的基本原理,随即简述 Nginx 的命令行,最终透过前述事例同时实现 Nginx 逆向全权和阻抗平衡的具体内容实用性。专业委员会 Nginx ,一则足够多了。
1. 概要
Nginx 是开放源码的轻量 Web 伺服器、逆向全权伺服器,和阻抗平衡器和 HTTP 缓存器。其特征是高mammalian,高操控性和低缓存。
Nginx 专为操控性强化而合作开发,操控性是其最重要的权衡,同时实现上十分著重工作效率,能抵挡高阻抗的挑战,最小能全力支持 50000 个mammalian通话量。 Nginx 还全力支持热布署,它的采用不光难,基本上能努力做到 7×24 半小时无间断运转。 Nginx 的中文网站采用者有:腾讯、淘宝网、京东、腾讯、新浪、网易等。
2. 逆向全权
2.1 萨德基全权
Nginx 不但能做逆向全权,同时实现阻抗平衡,还能用作萨德基全权来展开玩游戏等机能。
2.2 逆向全权
应用程序对全权伺服器是无交互的,应用程序不须要做任何人配
3. 阻抗平衡
将原本允诺分散到一般而言伺服器上的情形改成减少伺服器的数目,接着将允诺递送到各伺服器上,将阻抗递送到相同的伺服器,即阻抗平衡。
4. 回音分立
为了加快中文网站的解析速度,能把静态页面和动态页面由相同的伺服器来解析,加快解析速度,降低原来一般而言伺服器的压力。
5. 高需用
为了提高系统的需用性和容错能力,能减少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模块的必备知识了如指掌。
愿早日战胜疫情!码字不易,点个赞鼓励一下吧~
其它干货(必备技能):