这里主要介绍的是Nginx的主要功能,以及他能够在生产环境做做什么,解决什么技术问题,他包括了反向代理、负载均衡、HTTP服务器(包含动静分离)、正向代理。

一、反向代理
反向代理应该是 Nginx 做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet上 的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。下面贴上一段简单的实现反向代理的代码。

server {
      listen      80;
      server_name  localhost;
      client_max_body_size 1024M;
 
      location / {
          proxy_pass http://localhost:8080;
          proxy_set_header Host $host:$server_port;
      }
  }
保存配置文件后启动 Nginx,这样当我们访问 localhost 的时候,就相当于访问 localhost:8080 了。

二、负载均衡
负载均衡也是 Nginx 常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如:Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。

1、RR(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。简单配置

upstream test {
      server localhost:8080;
      server localhost:8081;
  }
  server {
      listen      81;
      server_name  localhost;
      client_max_body_size 1024M;
 
      location / {
          proxy_pass http://test;
          proxy_set_header Host $host:$server_port;
      }
  }
配置了2台服务器,当然实际上是一台,只是端口不一样而已,而8081的服务器是不存在的,也就是说访问不到,但是我们访问 http://localhost 的时候,也不会有问题,会默认跳转到http://localhost:8080 具体是因为Nginx会自动判断服务器的状态,如果服务器处于不能访问(服务器挂了),就不会跳转到这台服务器,所以也避免了一台服务器挂了影响使用的情况,由于 Nginx 默认是RR策略,所以我们不需要其他更多的设置。

2、权重

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如:

upstream test {
     server localhost:8080 weight=9;
     server localhost:8081 weight=1;
 }
那么10次一般只会有1次会访问到8081,而有9次会访问到8080。

3、ip_hash

上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream test {
     ip_hash;
     server localhost:8080;
     server localhost:8081;
 }
4、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backend {
    fair;
    server localhost:8080;
    server localhost:8081;
}
5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

upstream backend {
    hash $request_uri;
    hash_method crc32;
    server localhost:8080;
    server localhost:8081;
}
以上5种负载均衡各自适用不同情况下使用,所以可以根据实际情况选择使用哪种策略模式,不过fair和url_hash需要安装第三方模块才能使用,由于本文主要介绍Nginx能做的事情,所以Nginx安装第三方模块不会再本文介绍。

三、HTTP服务器
Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现,首先看看Nginx做静态资源服务器。

server {
      listen      80;
      server_name  localhost;
      client_max_body_size 1024M;
 
      location / {
              root  e:\wwwroot;
              index  index.html;
          }
  }
这样如果访问http://localhost 就会默认访问到E盘wwwroot目录下面的index.html,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。

动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

upstream test{
      server localhost:8080;
      server localhost:8081;
  }
 
  server {
      listen      80;
      server_name  localhost;
 
      location / {
          root  e:\wwwroot;
          index  index.html;
      }
 
      # 所有静态请求都由nginx处理,存放目录为html
      location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
          root    e:\wwwroot;
      }
 
      # 所有动态请求都转发给tomcat处理
      location ~ \.(jsp|do)$ {
          proxy_pass  http://test;
      }
 
      error_page  500 502 503 504  /50x.html;
      location = /50x.html {
          root  e:\wwwroot;
      }
  }
这样我们就可以把HTML以及图片和css以及js放到wwwroot目录下,而tomcat只负责处理jsp和请求,例如当我们后缀为gif的时候,Nginx默认会从wwwroot获取到当前请求的动态图文件返回,当然这里的静态文件跟Nginx是同一台服务器,我们也可以在另外一台服务器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很简单了,另外localtion后面其实是一个正则表达式,所以非常灵活。

四、正向代理
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。当你需要把你的服务器作为代理服务器的时候,可以用Nginx来实现正向代理,但是目前Nginx有一个问题,那么就是不支持HTTPS,虽然我百度到过配置HTTPS的正向代理,但是到最后发现还是代理不了,当然可能是我配置的不对。

resolver 114.114.114.114 8.8.8.8;
  server {
 
      resolver_timeout 5s;
 
      listen 81;
 
      access_log  e:\wwwroot\proxy.access.log;
      error_log  e:\wwwroot\proxy.error.log;
 
      location / {
          proxy_pass http://$host$request_uri;
      }
  }
resolver是配置正向代理的DNS服务器,listen 是正向代理的端口,配置好了就可以在ie上面或者其他代理插件上面使用服务器ip+端口号进行代理了。

注意:Nginx是支持热启动的,也就是说当我们修改配置文件后,不用关闭Nginx,就可以实现让配置生效。Nginx从新读取配置的命令是:nginx -s reload 。
————————————————
版权声明:本文为CSDN博主「技术路上的苦行僧」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jokeMqc/article/details/99659079

Nginx(2)之nginx作用简介相关推荐

  1. 什么是nginx?什么是nginx的反向代理和正向代理又是什么?nginx反向代理的作用?

    1. nginx 1.1 nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄 ...

  2. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  3. Nginx正则表达式与location匹配简介

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.nginx rewrite概述 1.概述 2. 跳转场景​ 3. 跳转实现 4. rewrite实际场景 二.nginx ...

  4. 【云计算基础服务-Nginx WEB服务器---原理及简介详解】

    文章目录 前言: 一.云计算基础服务-Nginx WEB服务器 详解 1.Nginx简介及原理 1.1 Nginx web简介 1.2 Nginx工作原理 前言: 本专栏专门讲解云计算服务基础知识,适 ...

  5. windows版本服务器,修改nginx.conf,重启nginx配置文件不起作用解决办法。

    我的nginx是在windows版本服务器上面,我按照了nginx的命令: nginx -s reload :修改配置后重新加载生效 nginx -t -c /path/to/nginx.conf 测 ...

  6. nginx(官方安装) Nginx相关文件 Nginx模块 location

    文章目录 案例 部署nfs+sersync 1.backup 2.nfs 下载nginx并安装 配置nginx小游戏页面 1.nginx 2.因为nginx无法处理动态请求,所以这里我们需要安装php ...

  7. Nginx主配置文件nginx.conf详细说明

    第3章 Nginx核心配置文件nginx.conf史上最细中文详解 3.1定义Nginx运行的用户和用户组 user nginx nginx;#改为特殊的用户和组 3.2 nginxworker进程数 ...

  8. 【学习笔记】启动Nginx、查看nginx进程、查看nginx服务主进程的方式、Nginx服务可接受的信号、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级

     1.启动nginx的方式: cd /usr/local/nginx ls ./nginx -c nginx.conf 2.查看nginx的进程方式: [root@localhost nginx] ...

  9. Nginx server之Nginx作为反向代理服务器

    2019独角兽企业重金招聘Python工程师标准>>> 一:Nginx介绍 1.Nginx简介:nginx [engine x]是一个俄罗斯人编写的HTTP和反向代理服务器,另外它也 ...

  10. Nginx主配置文件nginx.conf中文详解

    第1章 nginx配置解释图解 第2章 Nginx核心配置文件nginx.conf史上最细中文详解 2.1 定义Nginx运行的用户和用户组 2.2 nginxworker进程数,即处理请求的进程(熟 ...

最新文章

  1. Vagrant 手册之多个虚拟机 multi-machine
  2. 【知识星球】总有些骨骼轻奇,姿态妖娆的模型结构设计,不知道你知不知道,反正我知道一些...
  3. python面向对象、向量化来实现神经网络和反向传播(三)
  4. 个推异常值检测和实战应用
  5. 在centOS7中装mysql_在 CentOS7 上安装 MySQL5.7
  6. Mysql 零距离-入门(二)
  7. 给单文档框架添加背景图
  8. 深入理解ArrayList 和 LinkedList 区别
  9. 2020 【第十一届蓝桥杯省赛】 C/C++ B组 (第二场)
  10. 树莓派自启动配置端口映射及启动jar
  11. Python-精准提取行政区省市区
  12. VBA之正则表达式(30)-- 提取机构代码
  13. 数据可视化—随机漫步
  14. 机器学习者面试,看这10个建议
  15. NB-IoT窄带物联网的优势特点
  16. android 滤镜 原理,android openglse实现滤镜九宫格
  17. 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化?
  18. 多队列网卡及RPS/RFS/XPS设置
  19. Java OutputStream.write()的功能简介说明
  20. Python爬取《冰雪奇缘2》豆瓣影评

热门文章

  1. Vue 组件库 (一)
  2. 如何用大数据开发套件周期调度机器学习算法
  3. Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
  4. 73本免费的语言无关的优秀编程书籍汇总
  5. Hi3536 uboot引导内核全过程
  6. jmultiselect2side.php改为asp,jquery.multiselect2side使用以及文件下载
  7. android recyclerview item自适应高度_web前端学习:高度自适应知识点
  8. 再探Linux内核write系统调用操作的原子性
  9. Linux进程的管理与调度(一)--- Linux进程描述符task_struct结构体详解
  10. linux内存源码分析 - 伙伴系统(释放页框)