Nginx学习笔记(一)——概述及常用命令
文章目录
一、Nginx概述
1.1 什么是Nginx?
-
Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP/SMTP服务。
-
Nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其 特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
1.2 为什么用Nginx?
(1)跨平台、配置简单;
(2)非阻塞、高并发连接
:处理2-3万并发连接数,官方监测能支持5万并发;
(3)内存消耗小
:开启10个nginx才占150M内存,Nginx采取了分阶段资源分配技术;
(4)nginx处理静态文件好,耗费内存少
;
(5)内置的健康检查功能
:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
(6)节省宽带:支持GZIP压缩,可以添加浏览器本地缓存;
(7)稳定性高:宕机的概率非常小
(7)master/worker结构
:一个master进程,生成一个或者多个worker进程。
(8)接收用户请求是异步的:浏览器将请求发送到nginx服务器,它先将用户请求全部接收下来,再一次性发送给后端web服务器,极大减轻了web服务器的压力
;
(9)一边接收web服务器的返回数据,一边发送给浏览器客户端
;
(10)网络依赖性比较低,只要ping通就可以负载均衡;
(11)可以有多台nginx服务器;
(12)事件驱动:通信机制采用epoll模型
。
1.3nginx的作用
-
反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet上 的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 -
负载均衡
负载均衡就是将一个任务分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务,简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理。负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡,而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。 -
HTTP服务器
Nginx本身也是一个静态资源的服务,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现。动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。 -
正向代理
正向代理,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端才能使用正向代理。当需要把你的服务器作为代理服务器时,可以用Nginx来实现正向代理。
1.4.nginx的优缺点
优点
-
高并发量:根据官方给出的数据,能够支持高达 50,000 个并发连接数的响应
-
简单稳定:配置简单,基本在一个conf文件中配置,性能比较稳定,可以7*24小时长时间不间断运行
-
内存消耗少:处理静态文件,同样起web 服务,比apache 占用更少的内存及资源,所以它是轻量级的
-
模块化程度高:Nginx是高度模块化的设计,编写模块相对简单,包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter,支持 SSL 和 TLSSNI。
-
支持Rwrite重写规则:能够根据域名、URL的不同, 将HTTP请求分发到不同的后端服务器群组。
-
低成本:Nginx可以做高并发的负载均衡,且Nginx是开源免费的,如果使用F5等硬件来做负载均衡,硬件成本比较高。
-
支持多系统:Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows,由于Nginx是免费开源的,可以在各系统上编译并使用。
缺点
-
动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力,apache作为后端处理动态请求。
-
rewrite弱:虽然nginx支持rewrite功能,但是相比于Apache来说,Apache比nginx 的rewrite 强大。
1.5 Nginx工作模式
1、Nginx 由内核和模块组成。
- 内核的设计十分微小和简洁,完成的工作也很简单。仅通过查找配置文件将客户端请求映射到一个 location block(location 是Nginx配置中的一个指令,用于 URL 匹配),而在这个 location 中所配置的每个指令将会启动不同的模块去完成相应的工作。
- Nginx 的模块从结构上分为核心模块、基础模块和第三方模块:
核心模块:HTTP 模块、 EVENT 模块和 MAIL 模块
基础模块: HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite模块,
第三方模块:HTTP Upstream Request Hash 模块、 Notice 模块和 HTTP Access Key模块。
2、Nginx有两种工作模式:master-worker
模式 和 单进程
模式。
master-worker 模式:一个master 进程和至少一个的worker进程
该模式下,nginx 启动成功后,会有一个 master 进程和至少一个的 worker 进程。多用于生产环境。
-
master 进程
负责处理系统信号,加载配置,管理 worker 进程(启动、杀死、监控、发送消息/信号等)。 -
worker 进程
负责处理具体的业务逻辑,也就是说,对外部来说,真正提供服务的是 worker 进程。
- 稳定性高,只要还有 worker 进程存活,就能够提供服务,并且一个 worker 进程挂掉 master 进程会立即启动一个新的 worker 进程,保证 worker 进程数量不变,降低服务中断的概率。
2. 配合 linux 的 cpu 亲和性配置,可以充分利用多核 cpu 的优势,提升性能
3. 处理信号/配置重新加载/升级时可以做到尽可能少或者不中断服务(热重启–>不中断服务)
单进程模式:只有一个进程
- 单进程模式下, nginx 启动后只有一个进程, nginx 的所有工作都由这个进程负责。
- 由于只有一个进程,因此可以很方便地利用 gdb 等工具进行调试。
- 该模式不支持 nginx 的平滑升级功能,任何的信号处理都可能造成服务中断,并且由于是单进程,进程挂掉后,在没有外部监控的情况下,无法重启服务。
- 因此,该模式一般只在开发阶段和调试时使用,生产环境下不会使用。(了解)
二、nginx常用命令
选项 | 选项 |
---|---|
不加选项 | 启动nginx服务 |
-h或-? | 查看inginx命令帮助 |
-v | 查看nginx版本信息 |
-V | 查看nginx编译信息 |
-c | 启动nginx时指定主配置文件 |
-t | 测试nginx.conf文件是否存在语法错误 |
-s | 向正在运行的nginx主进程发送信号,信号的可用值有stop, quit, reopen, reload |
具体说明:
-
nginx -h nginx -?
如果你想要看看nginx命令都有哪些可用的选项,则可以使用"-h选项"或者 -
-t选项或者-T
使用"-t"选项或者"-T"选项可以测试nginx.conf配t文件中是否存在语法错误
nginx.conf中的配置指令需要以分号结尾,如果没有以分号结尾,会在启动nignx时报语法错误。其实,在启动nginx服务之前,我们就可以使用nginx -t命令对nginx.conf文件进行语法检查,如果配文件中存在语法错误,那么相应的错误信息会输出 -
-s选项
-s选项的作用就是向正在运行的nginx进程发送信号
比如,当nginx服务已经启动,我们想要停止nginx服务,则可以使用nginx -s stop命令停止nginx服务,“nginx -s stop"命令表示向nginx进程发送stop信号,使用”-s"选项除了能够发送stop信号,还能发送quit信号、reopen信号以及reload信号 -
quit信号
与stop信号的作用类似,quit信号作用也是用于停止nginx服务, quit信号和stop信号的区别在于,nignx进程收到stop信号以后会立即停止服务,而收到quit信号后,不会再接收新的请求,但是会先处理完已经接受的链接请求,处理完这些请求之后再停止服务,这种停止方式被称之为"优雅的停止” -
reload信号
reload信号的作用就是在不停止服务的情况下重载配文件,比如,nginx正在正常的提供服务,此时,管理员修改了nginx.conf文件中的配置指令,管理员希望新的配立刻生效,但是又不希望重启nginx服务,此时就可以使用nginx -s reload命令
重载配置文件,以便在不重启nginx的情况下载入新的配置,同时避免了因重启而造成的服务中断 -
reopen信号
利用reopen信号可以使nignx进程重新打开日志文件,以便实现日志分割的效果