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 你需要知道的内容相关推荐

  1. Nginx静态资源压缩实战内容介绍

    经过上述内容的优化,我们再次思考一个问题,假如在满足上述优化的前提下,我们传送一个1M的数据和一个10M的数据那个效率高?,答案显而易见,传输内容小,速度就会快.那么问题又来了,同样的内容,如果把大小 ...

  2. Learning NGINX 学习NGINX Lynda课程中文字幕

    Learning NGINX 中文字幕 学习NGINX 中文字幕Learning NGINX 使用业界标准的开源Web服务器NGINX建立高性能架构 除了负载均衡和HTTP缓存等额外功能之外,NGIN ...

  3. 学习Nginx,看完这篇超详细的文章就够了

    目录 本文简介 一.Nginx的基本概念 1.1.Nginx是什么? 1.2.Nginx能帮助我们做些什么? 1.3.Nginx的特性 二.Nginx的安装 2.1.环境介绍 2.2.安装Nginx ...

  4. 菜鸟学习nginx之接收HTTP Header

    上一篇介绍了<菜鸟学习nginx之接收HTTP请求行>,本篇介绍Nginx接收HTTP Header处理流程. 一.HTTP Header处理流程 处理Header与上一篇处理HTTP请求 ...

  5. Nginx使用教程(五):使用Nginx缓存之缓存静态内容

    NGINX虽然已经对静态内容做过优化. 但在高流量网站的情况下,仍然可以使用open_file_cache进一步提高性能. NGINX缓存将最近使用的文件描述符和相关元数据(如修改时间,大小等)存储在 ...

  6. web前段学习day_01:HTML(学习如何搭建页面结构和内容):文本标签、列表标签、图片标签、超链接、表格、表单表单、分区标签、实体引用

    学习如何构造页面结构和内容 安装HBuilderX 一.HTML 创建第一个HTML页面 写完html后如何测试 写在body中的常见标签有哪些? 注释快捷键 Ctrl+Shift+/ 1.文本相关标 ...

  7. 【转】医疗业务学习笔记--DICOM协议的基础内容!!!!!!!!!!

    转自:医疗业务学习笔记--DICOM协议的基础内容 - 知乎 本文首发于"雨夜随笔"公众号,欢迎关注. DICOM协议是医疗领域对如何处理.存储.打印和传输医疗图片的一系列标准.D ...

  8. Nginx学习---Nginx的详解_【all】

    1.1. Nginx简介 1.什么是nginx nginx:静态的,开源的www软件,可以解析静态的小文件(低于1M ),支持高并发占用较发少的资源(3W并发,10个进程,内存150M),跨平台 te ...

  9. 学习VR技术要学哪些内容?VR全景如何制作?

    提起VR相当大家而言都不陌生,VR伴随着科技的发展,进入到人们的日常生活中,不少人都对VR技术很关注,不少公司或者企业也开始逐渐发展VR的技术,如果现在对VR技术能够有所了解的话,那么在后期便能够掌握 ...

最新文章

  1. python中index函数_python中index函数的用法
  2. MySQL COUNT函数优化及count(1)/count(*)/count(列名)的区别
  3. Linux网络编程一步一步学+基础
  4. Windows系统程序设计之结构化异常处理
  5. linux嵌入式开发箱跑马灯,跑马灯实验(STM32F4开发板)
  6. dibian+9+oracle+java_debian – 安装了Oracle Java,但在安装软件时,我得到了`你的Java版本不受支持....
  7. linux下用ntp对时
  8. Scratch 怪兽动画+骨骼矢量素材编程素材免费下载!
  9. ASP.Net中控件的EnableViewState属性 (转)
  10. Linux三剑客之SED
  11. 微信小程序圣诞帽_完成圣诞快乐Web应用程序界面
  12. shell脚本中执行ssh
  13. Ps怎么做火焰字 PS火焰字制作图文教程
  14. 期货基本面分析:,马来西亚10月1-10日棕榈油出口量较上月同期下降17.3%,但对中国出口创一年新高
  15. pem crt key文件区别
  16. 为何应用型本科(机器人工程等专业)大量学生选择考研
  17. com.google.guava maven依赖
  18. 远程桌面中goland软件不能使用键盘的历史后退和前进快捷键
  19. 关于互相帮忙投票的微信群、微信刷投票群、微信投票刷票群的详情介绍
  20. SELinux策略语言--类型强制(编写TE规则)

热门文章

  1. 思科模拟器-单臂路由实现vlan间的通信
  2. 突发!开源项目LayUI宣布下线 !
  3. C# 实现简易QQ界面
  4. latex error: does not look like a valid PDF document ; xdvipdfmx:fatal: Out of memory - asked for ..
  5. 《死侍2》片尾彩蛋催泪 瑞安·雷诺兹大秀中文
  6. 那些好老公做不出的事(三)
  7. redis 3 命令总结
  8. linux开发工程师前景_linux开发工程师待遇 和你想象中的有多少差距
  9. 华南虎事件带给我的思考
  10. Java Netty 教程