Nginx应用全入门

基础回顾

Nginx是什么?

Nginx是一个高性能的HTTP和反向代理web服务器,特点是内存少,并发能力强

Nginx能做什么

  • Http服务器(Web服务器)
  • 反向代理服务器
  • 负载均衡
  • 动静分离

Nginx主要命令:

./nginx 启动nginx

./nginx -s stop 终止nginx

./nginx -s reload 重新启动nginx

安装nginx

  1. 到官网下载nginx

http://nginx.org/en/download.html

  1. 安装依赖
yum -y install gcc
yum -y install gcc-c++
yum install -y zlib-devel
yum -y install openssl openssl-devel
./configure --prefix=/usr/local/nginx make
make install

然后可以发现/usr/local/nginx目录。

Nginx核心配置

Nginx的核⼼配置⽂件conf/nginx.conf包含三块内容:全局块、events块、http块

  1. 全局块

从配置⽂件开始到events块之间的内容,此处的配置影响nginx服务器整体的运⾏,⽐如worker进程的数量、错误⽇志的位置等

  1. events块

events块主要影响nginx服务器与⽤户的⽹络连接,⽐如worker_connections 1024,表示每个workderprocess⽀持的最⼤连接数为1024

  1. http块

http块是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡等

应用场景之反向代理

反向代理的概念:

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

  1. 需求一:访问nginx,代理到tomcat目标服务器上,nginx端口设置为9003
  • 修改nginx.conf

  • 重启 sbin/nginx -s reload

效果:

  1. 需求二:访问http://192.168.56.115:9003/abc 时代理到tomcat,访问http://192.168.56.115:9003/def时访问到baidu

这里主要是多location的使用。location语法如下:

location [=||*|^~] /uri/ { … }

在nginx配置文件中,location主要有这几种形式

  • 正则匹配 location ~/lagou {}
  • 不区分大小写的正则匹配 location ~*/lagou {}
  • 匹配路径前缀 location ^~/lagou {}
  • 精确匹配 location =/lagou {}
  • 普通路径前缀匹配 lacation /lagou {}

优先级:精确匹配> 匹配路径前缀>不区分大小写的正则匹配>正则匹配 >普通路径前缀匹配

应用场景之负载均衡

当客户端浏览器访问到nginx时,使用nginx作为负载均衡器,将请求分配到两个tomcat:127.0.0.1:8080、和127.0.0.1:8082

  1. 轮询配置

默认策略,每个请求按时间顺序逐一分配到不同的服务器,如果某一个服务器下线,能自动剔除

  1. weight

weight代表权重,默认每一个负载的服务器都为1,权重越高分配的请求就越多

  1. ip_hash

每个请求按照ip的hash结果分配,每一个客户端的请求会固定分配到同一个目标服务器处理,可以解决session问题

应用场景之动静分离

动静分离就是讲动态资源和静态资源的请求处理分配到不同的服务器上,⽐较经典的组合就是Nginx+Tomcat架构(Nginx处理静态资源请求,Tomcat处理动态资源请求),那么其实之前的讲解中,Nginx反向代理⽬标服务器Tomcat,我们能看到⽬标服务器ROOT项⽬的index.jsp,这本身就是Tomcat在处理动态资源请求了。

  1. 修改nginx.conf配置
 location /static {
root staticData;
}
  1. 将静态资源放到配置的目录下

在nginx目录下创建/staticData/static目录,将静态文件放进去

  1. 访问

http://192.168.56.115:9003/static/index.html

http://192.168.56.115:9003/static/1.jpg

Ngnix底层进程机制刨析

Nginx启动后,以daemon多进程方式在后台运行,包括一个Master进程和多个Worker进程。

  1. master进程

主要是管理worker进程,比如

  • 接收外交信号向各woker进程发送
  • 监控woker进程的运行状态,当worker进程异常退出后Master进程会自动重新启动新的worker进程。
  1. worker进程

woker进程具体处理网络请求。多个worker进程之间是对等的,各个进程之间是独立的。一个进程只能在一个worker进程中处理,worker进程的个数是可以设置的,一般设置与机器的cpu核数一致。

例如:我们监听9003端口,一个请求到来时,如果有多个worker进程,那么每个worker进程都有可能处理这个链接

  • master进程创建之后,会创建需要监听的socker,然后从master进程在fork出多个worker进程。所以,所有worker进程的监听描述符在新连接到来时都变得可读。
  • nginx使用互斥锁保证只有一个worker进程能够处理请求。

流程说明:

以 ./nginx -s reload 来说明nginx信号处理这部分的流程

1)master进程对配置⽂件进⾏语法检查

2)尝试配置(⽐如修改了监听端⼝,那就尝试分配新的监听端⼝)

3)尝试成功则使⽤新的配置,新建worker进程

4)新建成功,给旧的worker进程发送关闭消息

5)旧的worker进程收到信号会继续服务,直到把当前进程接收到的请求处理完毕后关闭

所以reload之后worker进程pid是发⽣了变化的

Nginx多进程模型的好处:

  • 每个worker进程是独立的,不需要加锁,节省开销
  • 每个worker进程是独立的,互不影响,一个异常了,其他的依然可以提供服务
  • 多进程模型为reload热部署提供了支撑

Nginx应用场景配置的更多相关文章

  1. 针对nginx应用场景的配置 知识整理

    本文为转载,原文链接 前言 原本想写整理一篇针对nginx应用场景的相应配置,但发现已经有人整理了,而且写得非常不错,特意转过来 概论 Nginx 是一款面向性能设计的 HTTP 服务器,能反向代理 ...

  2. 场景实践篇一:Nginx负载均衡配置

    code1   code2    code3  三个文件夹, 每个文件夹下面一个 index.html 的文件夹 cd /etc/nginx/conf.d/  下面新建   server1.conf  ...

  3. Nginx安装及配置详解

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  4. nginx简介与配置

    nginx简介 nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行. nginx由俄罗斯的程序 ...

  5. Nginx安装及配置详解包括windows环境

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  6. Nginx安装及配置详解【转】

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  7. [转帖]Nginx安装及配置详解 From https://www.cnblogs.com/zhouxinfei/p/7862285.html

    Nginx安装及配置详解   nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP ...

  8. 2-4、nginx特性及基础概念-nginx web服务配置详解

    Nginx Nginx:engine X 调用了libevent:高性能的网络库 epoll():基于事件驱动event的网络库文件 Nginx的特性: 模块化设计.较好扩展性(不支持模块动态装卸载, ...

  9. Nginx应用场景

    1. Nginx应用场景 1)http服务器.Nginx可以独立的提供http服务,可以做网页静态服务器(也就是将静态文件放到nginx目录下,通过nginx来访问就ok)   2)虚拟主机,可以在一 ...

随机推荐

  1. 『与善仁』Appium基础 — 19、元素定位工具(三)

    目录 1.Chrome Inspect介绍 2.Chrome Inspect打开方式 3.Chrome Inspect工具的使用 (1)Chrome Inspect工作前提 (2)Chrome Ins ...

  2. C#生成编号

    //自动生成账单编号 public string GetNewPoID(string Prefix) { string NewPoID = Prefix + DateTime.Now.Year.ToS ...

  3. Git(一)【基本使用,集成IDEA,GitHub】

    目录 一.本地库操作 ①基本操作 1.初始化本地库 2.设置用户签名|用户名|邮箱 3.查看本地库状态 4.添加暂存区 5.提交到本地库 6.查看文件modify详情 ②历史版本以及回退 1.查看历史 ...

  4. 从面试官的角度,聊聊java面试流程

    在这篇回答里,就讲以我常规的面试流程为例,说下java方面大致会问什么问题,以及如何确认候选人达到招聘要求. 先说面试前准备,可能有些面试官是拿到简历直接问,而且是在候选人自我介绍时再草草浏览简历,但 ...

  5. JavaScript小数、百分数的转换

    百分数转化为小数 function toPoint(percent){ var str=percent.replace("%",""); str= str/10 ...

  6. RestTemplate的exchange()方法,解决put和delete请求拿不到返回值的问题

    嗷嗷待哺的controller(被调用provider的controller方法) //测试get少量参数 @RequestMapping(value = "detailsGetD" ...

  7. 【编程思想】【设计模式】【行为模式Behavioral】模板模式Template

    Python转载版 https://github.com/faif/python-patterns/blob/master/behavioral/template.py #!/usr/bin/env ...

  8. Mysql中replace与replace into的用法讲解

    Mysql replace与replace into都是经常会用到的功能:replace其实是做了一次update操作,而不是先delete再insert:而replace into其实与insert ...

  9. Java中方法和类的深入分析

    1.构造方法不能被继承.也就是说子类里没有父类的构造方法.   Java重载根据的是实参和方法形参之间的匹配.自动类型转换也在重载版本的判断中起到了作用.重载的价值在于允许使用通用名称访问相关的方法. ...

  10. 06 - Vue3 UI Framework - Dialog 组件

    做完按钮之后,我们应该了解了遮罩层的概念,接下来我们来做 Dialog 组件! 返回阅读列表点击 这里 需求分析 默认是不可见的,在用户触发某个动作后变为可见 自带白板卡片,分为上中下三个区域,分别放 ...