• 学习 nginx 你需要知道的内容


    Nginx 是什么?

    • Nginx是一款轻量级 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协议下发行。其特点是占有内存少,并发能力强。
    • 换句话说 Nginx 是一款轻量级的 Web 服务器,并且占内存少并发能力强

    有 Node.js 为啥还要学 Nginx

    • 众所周知,Node 本身是可以做 HTTP 服务器的,Node 流行后端框架中(Express,Koa,Nest)也都具备 HTTP 服务器能力,既然如此,我们为什么要学习 Nginx?
    • Node 做服务端,本身就是为了业务层服务的,很难充分利用服务器硬件资源处理 HTTP 本身的逻辑,大量负载的情况下,容易造成网络阻塞甚至崩溃。

    安装方式

    • Windows
      • http://nginx.org/
      • 下载安装包并解压
      • 打开解压目录内 nginx.exe 所在目录,双击nginx.exe
      • 复制 nginx.exe 路径到 cmd 中并进入
      • 输入 ./nginx -v 显示版本号即安装成功
      • 浏览器输入 localhost:80 即可访问 nginx 的首页
    • Linux
      • 通过 yum 安装 nginx sudo yum install -y nginx
      • 启动 nginx sudo systemctl start nginx.service
      • 设置开机自启 sudo systemctl enable nginx.service
      • 浏览器中输入 localhost:80 即可访问 nginx 的首页
    • 注意
      • nginx 默认监听 80 端口,但是电脑中可能会有其他程序占用 80 端口所以可能访问 80 时无法访问,可以通过修改配置更改监听端口

    修改配置

    • Windows
      • nginx 的配置文件时 conf 目录下的 nginx.conf,在 vscode 中打开可以修改文件内容
      • 微信截图_20220412100740.png
      • 如果我们想要修改监听端口可以去修改上图中的 11 行 http 内部 23 行 server 中的 listen,截图中是我修改后的,监听了 81 端口,域名是 localhost
      • default_type 和 charset 可以按需添加,作用是避免页面汉字乱码
      • location / {} 中的
        • root 表示对应的入口文件目录,也就是 conf 目录同级的 html 目录
        • index 表示入口文件为 index.html 或者 index.htm
        • 如果要修改文件,可以去对应位置打开文件修改
    • Linux
      • 查询 nginx 配置文件地址 nginx -t
        • 默认返回 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
      • 修改配置 vi /etc/nginx/nginx.conf
      http {
          server { 
              listen 80; # 端口号,可修改为自己需要的
              server_name http://10.60.xxx; # 域名 
              location / { # 监听的路径 
                  root /xxx; # 首页所在目录,有默认值,也可以自定义 
                  index index.html index.htm; # 默认入口 
              }
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    • 修改配置后,一定要重启 nginx
      • Windows ./nginx -s reload
      • Linux nginx -s reload

    Nginx 架构常用命令操作

    • nginx -t 测试配置是否正确,配置文件修改后先操作验证,在进行后续操作。
    • nginx -s reload 加载最新配置,等待全部子进程结束,然后开辟新的子进程使用新的配置。
    • nginx -s reopen 重新打开日志,重命名 access.log 日志文件,并重新创建新 access.log 文件,再次访问查看变化。
    • nginx -s quit   优雅停止,等待全部子进程处理完毕,不再开启新的子进程。
    • nginx -s stop  立即停止,不等待子进程处理,立即停止所有子进程及主进程。
    • 其他操作命令可以通过帮助命令 nginx -h 进行查看
    • windows 在修改命令为 ./nginx -XXXX

    配置项与含义

    • 想要真正用好 nginx 我们需要对其运行逻辑和配置项有充分的了解

    全局配置区域

    Main  #全局配置区,Nginx 核心功能配置
    events{ # events 事件区,子进程核心配置
    	
    }
    http { # http 服务器配置区
      
      server { # 不同服务配置区
        	location { # location 不同请求路径配置区
        		
        	}
      }
    		
    }
    mail{ # 邮件代理配置区
      server{ # 邮件服务配置区
      	
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    默认配置解析

    配置项中出现的 include /xx/xx 是引入外部配置项;# 则是注释内容;

    Windows 与 Linux 中默认配置不同,但配置项含义都是一样的

    user www-data;	#使用那个用户角色运行 Nginx
    worker_processes auto;	#允许开启的 worker 数量,通常设置成和cpu的数量相等
    pid /run/nginx.pid;	 # pid 路径
    include /etc/nginx/modules-enabled/*.conf;  #引入其他配置项 
    events {	# 事件区
    	# 每个 work 进程支持的最大链接数,理论值 65535 每个进程的最大句柄数 
            worker_connections 1024; 
    	# 2字节==16位,
    }
    http { # http 区
     	#sendfile 指定 nginx 调用 sendfile 函数(zero copy 方式)来输出文件,
    	#配合 tcp_nopush 与 tcp_nodelay 完成数据的快速响应
            sendfile on; 
            tcp_nopush on; # 数据包会累积后一起传输,可以提高传输效率。
    	tcp_nodelay on; #小的数据包不等待直接传输
    	#  tcp_nopush 与 tcp_nodelay 互斥,Nginx 会借助sendfile 进行平衡处理
    
    	# 持久链接打开的超时时长
            keepalive_timeout 65;
    				
    	# 散列表的冲突率,越大,消耗内存越多,冲突率越低,检索速度就更快
            types_hash_max_size 2048;
    	# mime 类型列表
            include /etc/nginx/mime.types; 
    	# 默认 mime 类型 流
            default_type application/octet-stream;
    	# 协商ssl加密算法时,优先使用服务端的加密套件
            ssl_prefer_server_ciphers on;
    	# [错误]日志存储路径
            access_log /var/log/nginx/access.log;
            error_log /var/log/nginx/error.log;
    	# 开启 gzip 协议压缩,减少数据传输量
            gzip on;
    	# 引入其他配置文件
            include /etc/nginx/conf.d/*.conf;
    
            server { #server区 
    		# 设置系统监听端口 
            	listen 80 default_server;
            	listen [::]:80 default_server; 
    		# 定义服务器访问默认根路径
            	root /var/www/html;
    		# 定义首页索引文件的名称
            	index index.html index.htm index.nginx-debian.html;
    		# 定义访问域名
            	server_name _;
    		# location 区域,相当于路由判断
            	location / {
                	    try_files $uri $uri/ =404;
            	}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    反向代理与正向代理

    • 反向代理就是外部客户端通过网关访问内网服务器上的内容,网关起到了反向代理的功能,内网服务器不对外提供服务,一般由防火墙设立拦截,之对外暴露网关端口
    • 简单来说
      • 反向代理,代理的是服务器,帮助服务器处理请求响应给客户端,隐藏真实服务器响应。
      • 正向代理,代理的是客户端,帮助客户端获取目标服务器的数据,隐藏真实客户端请求。
    • 举个例子
      • 反向代理
        • 我们去饭店吃饭,这家饭店有豫菜,鲁菜,川菜,也分别有三个菜系对应的厨师,但是我们去饭店吃饭,并不需要管事那个厨师炒的菜,只需要点菜下单即可,有服务员将菜分配给不同的厨师去具体处理,那么这个服务员就充当了反向代理服务器
      • 正向代理
        • 我们通常无法直接访问外网,这时候可以通过一个代理服务器帮助我们来访问外网,比如说我无法访问 服务器A,但是可以访问 服务器B,那么我可以去访问 服务器B,然后由 服务器B 去帮我把请求转发给 服务器A,这种就叫正向代理,比如说 VPN 就是这样的流程

    负载均衡

    内网服务器因为要处理大量的业务逻辑,因此,内网单台服务器的响应能力非常有限,为了提供更加快速的响应,一般会在内网架设多台业务逻辑处理器,当某一台正在工作时,可以由其他正在闲置的服务器来处理请求响应;

    后端多台相同的业务逻辑服务器,被称为服务器集群;而当请求到来时,到底由那台服务器进行处理,取决于代理转向那台服务器,这项能力,就叫负载均衡

  • 相关阅读:
    RK3588 Linux内核中断(一)
    Ubuntu部署OpenStack踩坑指南:还要看系统版本?
    Untiy 使用RotateAround()方法实现物体围绕某个点或者某个物体旋转
    【C++】类和对象 从入门到超神 (中)
    返回多维数组转换为一维后的数组:array.flatten()
    c++ 阅读笔记
    LeetCode:第305场周赛【总结】
    python 图片下面加边框TK界面
    保研考研机试攻略:第二章——入门经典(2)
    Nest.js项目小结1
  • 原文地址:https://blog.csdn.net/CS_DGD/article/details/125558665