学习 nginx 你需要知道的内容

Posted X可乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习 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 中打开可以修改文件内容
    • 如果我们想要修改监听端口可以去修改上图中的 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; # 默认入口 
            
        
    
    
  • 修改配置后,一定要重启 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 # 邮件服务配置区
  	
  

默认配置解析

配置项中出现的 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;
        	
	

反向代理与正向代理

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

负载均衡

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

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

以上是关于学习 nginx 你需要知道的内容的主要内容,如果未能解决你的问题,请参考以下文章

多图预警,神器 Nginx 的学习手册

2W 字你全面认识 Nginx

几个点认识Nginx服务器

Nginx的这些妙用,你肯定有不知道的!

一篇Nginx 的学习手册 ( 建议收藏 )

Nginx快速扫盲nginx入门