一. Nginx的诞生

Nginx是一个高效的web及反向代理服务器,它的第一版发布于2012年,晚于如今占据最大市场份额的Apache。那么Nginx的诞生肩负了哪些使命呢?或者说它于Apache的差别在哪里?

低效的Apache!Apahce诞生于上世纪90年代。那个时候硬件技术还不是很成熟,服务器大多是单核单cpu的,而且网络请求数也不是很多。和大多数那个年代诞生的组件一样,Apache的底层采用的是同步多进程的模型。如今服务器向着多核多cpu发展,处理的网络请求也动辄十万级 百万级,尤其是物联网的诞生,以亿为单位的qps也出现在大家的视野中。在这样的场景下,Apache低效的底层模型就无法应对了。一个服务器能开启的进程数是有限的,而且操作系统在多个进程之间的切换也会消耗大量的资源和时间,导致Apache无法跑满多核cpu的性能。

高效的Nginx!Nginx的底层采用了多路复用的技术,轻松应对百万级的连接。如果说同步、多进程代表着低效,那么异步、多路复用就是高性能的代名词了。Nginx可以在一个线程中处理多个请求,避免了进程、线程间的切换,在用户态中实现并发的处理。而且Nginx几乎是用纯C开发的,可直接编译成机器语言,这也是其高效的原因之一。

比较一下Apache和Nginx,Nginx有如下几个优点:1. 高并发,高性能;2. 可扩展性好(拥有丰富的模块);3. 高可靠性;4. 热部署;5. BSD许可证(允许修改源码并用到商业场景)

如此看来也就不难理解,为什么Nginx的短时间内能占据这么大的市场。虽然Apahce现在依然是市场占有率第一的web容器,但是Nginx与其的差距在逐年递减。不仅创业公司和新的项目大多采用Nginx,而且一些老项目也在慢慢的由Apache转向Nginx。

二. Nginx的主要引用场景

Nginx主要提供了三个功能:1. 静态资源的访问;2. 反向代理 3. API服务

1. Nginx允许用户直接访问服务器的静态资源,依托于Nginx强大的性能,使其访问速度远高于配置在应用服务器上的静态资源。

2. 应用服务一般要中和开发效率、程序的可读性、可扩展性等等因素,其响应速度一般远低于Nginx。Nginx提供了反向代理的功能,利用负载均衡、缓存的手段,允许用户通过Nginx访问服务来获取更高的体验。值得一提的是,多路复用的模型只是应对高并发的情景下比多进程、多线程模型的效率高,并不能对单个连接的处理的更快,而是能较快的处理更多的连接。

3. 就像上诉提到的,应用服务的执行效率一般会比较低,所以Nginx还提供了另一种方式来提升用户请求数据的速度,这就是API服务。Nginx的API服务可以直接访问数据库或者缓存服务,并将拿到的数据直接返回给用户。

三. Nginx的版本

​免费版:Nginx.org、OpenResty.org

​商业版:Nginx.com、OpenResty.com

三. Nginx安装与启动

1. 安装Prce

    • 打开Prce官网下载页面:https://ftp.pcre.org/pub/pcre/

    • 复制想安装的Prce版本下载链接

    • 使用wget命令下载:wget https://ftp.pcre.org/pub/pcre/pcre-8.37.tar.gz

    • 使用tar命令解压:tar -xzf pcre-8.37.tar.gz

    • 使用chmod命令配置Prce解压文件夹的全部读写权限:chmod -R 777 pcre-8.37

    • 使用cd命令切换到Prce解压文件夹:cd pcre-8.37

    • 使用configure命令配置安装:./configure

    • 使用make命令编译:make

    • 使用make install命令安装:make install

2. 安装Nginx

      • 打开Nginx官网下载页面:http://nginx.org/en/download.html

      • 复制想安装的Nginx版本下载链接,有最新版本和稳定版本两个选择

      • 使用wget命令下载:wget http://nginx.org/download/nginx-1.16.1.tar.gz

      • 使用tar命令解压:tar nginx-1.16.1.tar.gz

      • 使用cd命令切换到Nginx解压文件夹:cd nginx-1.16.1

      • 使用configure命令配置安装:./configure --prefix=/home/user/nginx --with-pcre=/home/user/tool/pcre-8.37/

      • 使用make命令编译:make

      • 使用make install命令安装:make install

编译成功后可以看到这样的四个文件夹:sbin(Nginx的可执行文件)、conf(配置文件)、logs(日志文件)、html(静态页面示例)。

四. Nginx的组成

​1. 二进制可执行文件(sbin目录下)

​2. 配置文件(conf目录下的Nginx.conf,可在Nginx启动时指定)

​3. 访问日志(logs目录下的access.log,可在配置文件中配置)

​4. 错误日志(logs目录下的error.log,可在配置文件中配置)​

五. Nginx配置语法(config)

  配置语法:

  1. 配置文件由指令和指令块组成

      2. 每条指令以;结尾,指令和指令之间以空格符分隔

      3. 指令块以{}大括号将多条指令组织在一起

      4. include语句允许组合多个配置文件以提升可维护性

      5. 使用符号#添加注释,增加可读性

      ​6. 使用符号$使用变量

      ​7. 部分执行的参数支持正则表达式

  配置参数:

​  1. 时间单位

​        ​y:years

     ​    ​M:months

      ​    ​d:days

    ​    ​h:hours

     ​    ​m:minutes
        ​    ​S:seconds

     ​    ​w:weeks

       ​    ​ms:milliseconds

   ​2. 空间单位

​    ​        ​空:bytes

​        ​k/K:kilobytes

​        ​m/M:megabytes

​        ​g/g:gigabytes

  配置指令块:

  1. http

      2. server

      3. location

      4. upstream

六. Nginx命令行(sbin)

帮助:nginx -?

nginx -h

使用指定的配置文件:nginx -c

使用指定的配置指令:nginx -g

使用指定的运行目录:nginx -p

发送信号:nginx -s

测试配置文件是否有语法错误:-t    -T

打印nginx的版本信息、编译信息等:-v    -V

命令行的应用:

首先应进入sbin目录中

1. 启动:./nginx

2. 重载配置文件:./nginx -s reload

3. 热部署:

a)备份原二进制文件

b)覆盖新二进制文件到原文件

注:新二进制文件是nginx源码make编译后的objs文件中nginx.sh

热部署不需要执行make install 安装命令

c)向Nginx的master进程发送信号,告诉其要开始热部署了。

命令:kill -USER2 12345(12345为master进程pid)

注:接收到信号后nginx会新开一个master进程,并在新的进程中使用新的二进制可执行文件。此时新旧master进程都在运行,但是旧的master进程已经不再监听80端口了,所有新的请求都会到新的master进程中。

d)向旧的master进程发送信号,告诉其可以优雅的结束自己了。

命令:kill -WINCH 12345

注:此时旧的worker进程已经消失了,但是旧的master进程还在。这是因为一旦新二进制文件有错误,直接reload旧master,并down掉新master进程,做版本回退。

4. 切割日志文件

​    ​    ​a)mv 原文件名 新文件名 (这里只能使用mv命令,linux系统会保证指向旧文件名的写入直接写入到新文件名而不会发生错误)

​    ​    ​b)重置配置文件

​    ​    ​    ​    ​命令:./nginx -s reopen

[Day1] 初识Nginx的更多相关文章

  1. 初识nginx——内存池篇

    初识nginx——内存池篇 为了自身使用的方便,Nginx封装了很多有用的数据结构,比如ngx_str_t ,ngx_array_t, ngx_pool_t 等等,对于内存池,nginx设计的十分精炼 ...

  2. 初识Nginx及编译安装Nginx

    初识Nginx及编译安装Nginx 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...

  3. 初识nginx之第一个demo

    商城项目做了一个多月了,想到必须用到负载均衡,简单了解了一下nginx,首先分享第一个demo,五月份上线后,会继续分享一系列相关知识. 在nginx根目录下,用了一个园友的批处理文件nginx.ba ...

  4. 初识nginx

    先来一波官方站点关于nginx介绍.nginx相关历史这里不再赘述啦.   nginx 是免费,开源,高性能 HTTP 服务器和反向代理服务器,也可作为IMAP/POP3代理服务器.nginx以它的高 ...

  5. nginx(四)初识nginx日志文件

    nginx 日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,通俗的理解就是先用log_format来定 ...

  6. 初识nginx+tomcat

    百度百科说: Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯 ...

  7. nginx(一)初识nginx

    什么是nginx?Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. Nginx应用场景(都很常用): 1:http服务器.N ...

  8. 初识 Nginx

    Nginx 是一个免费的,开源的,高性能的HTTP服务器和反向代理,以及IMAP / POP3代理服务器. Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名.很多高知名度的网站 ...

  9. 初识nginx反向代理和缓存机制

    实现的需求图:   环境: nginx缓存和反向代理服务器:192.168.0.224 实际存储数据机器:192.168.0.37 一.实现反向代理 1.安装nginx,两台服务器都需要安装 1)安装 ...

随机推荐

  1. linux内核参数sysctl.conf,TCP握手ack,洪水攻击syn,超时关闭wait(转)

    http://www.xshell.net/linux/Linux_sysctl_conf.html 优化Linux内核sysctl.conf参数来提高服务器并发处理能力 Posted by 破冰 o ...

  2. php断点续传之文件上传与文件下载

    下载: 原理: Http头的 Range.Content-Range()未启用单点登录GerenalRequest URL: http://www.demotest.com/php/fileDownl ...

  3. LuoguP3498 [POI2010]KOR-Beads

    呀呀呀,临走10分钟刷一道水题 然而只是记一下第一次hash被卡 各种模数都被卡了... 本来想打双哈希了,后来皮了一下,模数改成了998244353,然后竟然A掉了 正着hash一遍,反着hash一 ...

  4. android中实现监听的四种方法

    (1)自身类作为事件监听器 package cn.edu.gdmec.s07150745.work5; import android.support.v7.app.AppCompatActivity; ...

  5. display: -webkit-box; 做个小小试验

    最近做个微信项目发现css3在微信内部浏览器中和其他浏览有些区别 做个小小笔记 .job { display: -webkit-box; display: flexbox; -webkit-box-p ...

  6. HTML-完美解决父子元素的外边距重叠和高度塌陷问题

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 杜教筛&套路总结

    杜教筛 \[ \begin{split} (g*f)(i)&=\sum_{d|i}g(d)f(\frac id)\\ \Rightarrow g(1)S(n)&=\sum_{i=1}^ ...

  8. img属性src的特点

    img属性src的特点: src=“图片地址” 成功则加载图片,失败则显示alt文字和断裂的图片 src="" 则不加载,不显示alt文字和断裂的图片 因此当图片加载失败后,$(& ...

  9. 廖雪峰Java13网络编程-3其他-1HTTP编程

    1.HTTP协议: Hyper Text Transfer Protocol:超文本传输协议 基于TCP协议之上的请求/响应协议 目前使用最广泛的高级协议 * 使用浏览器浏览网页和服务器交互使用的就是 ...

  10. thinkphp 参数绑定

    参数绑定是指绑定一个参数到预处理的SQL语句中的对应命名占位符或问号占位符指定的变量,并且可以提高SQL处理的效率,需要数据库驱动类的支持,目前只有PDO和Sqlsrv驱动支持参数绑定功能. 富瑞华大 ...