IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 学习 nginx 你需要知道的内容 -> 正文阅读

[系统运维]学习 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; # 默认入口 
            }
        }
    }
    
  • 修改配置后,一定要重启 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 就是这样的流程

负载均衡

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

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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:10:24  更:2022-07-03 11:10:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 7:29:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码