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. 学习java 7.13

    学习内容: 一个汉字存储:如果是GBK编码,占用2个字节:如果是UTF-8编码,占用3个字节 汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数 字符流=字节流+编码表 采用何种规则编码,就要 ...

  2. day9 图书设计项目

    总路由层url from django.conf.urls import url from django.contrib import admin from app01 import views ur ...

  3. Kafka(一)【概述、入门、架构原理】

    目录 一.Kafka概述 1.1 定义 二.Kafka快速入门 2.1 安装部署 2.2 配置文件解析 2.3Kafka群起脚本 2.4 topic(增删改查) 2.5 生产和消费者命令行操作 三.K ...

  4. 编程之美Q1

    题目 和数书页有点类似,就直接数吧 #include<iostream> using namespace std; class q1 { public: size_t func(size_ ...

  5. Shell学习(二)——变量和基本数据类型

    参考博客: [1]LinuxShell脚本--变量和数据类型 [2]shell只读变量删除 一.变量 定义变量的语法 定义变量时,变量名和变量值之间使用"="分隔,并且等号两边不能 ...

  6. android转换透明度

    比方说 70% 白色透明度. 就用255*0.7=185.5  在把185.5转换成16进制就是B2 你只需要写#B2FFFFFF 如果是黑色就换成6个0就可以了.前2位是控制透明度的.

  7. Advanced C++ | Virtual Copy Constructor

    这个不懂,等看会了再写...

  8. jquery datatable使用简单示例

    目标: 使用 jQuery Datatable 构造数据列表,并且增加或者隐藏相应的列,已达到数据显示要求.同时, jQuery Datatable 强大的功能支持:排序,分页,搜索等. Query ...

  9. 【Service】【Database】【MySQL】基础

    1. 概念 1.1. 作者:Unireg 1.2. MySQL AB --> MySQL Solaris:二进制版本: 1.3. 官方网站: MySQL: www.mysql.com Maria ...

  10. AJAX - Http 中 post 和 get 的区别

    HTTP: post 和 get 是 HTTP 协议中的两种方法.浏览器和服务器的交互是通过 HTTP 协议执行的,他的全称为Hyper Text Transfer Protocol(超文本传输协议) ...