nginx 个人详解,基础知识,要点总结

nginx

nginx(web server , web reverse proxy):

http协议:80/tcp, HyperText Iransfer Procotol

html:HypreText Mark Language(超文本标记语言)

文本:HTTP/1.0 MIME

MIME:Multipurpose Internet Mail Extension

major/minor

text/plain

image/jpeg

URL:scheme://server[:port]/path/to/source

http事务:request <--> response

request

<method><URL><version>

<HEADERS>

<body>

response

<version><status><reason phrase>

<HEADERS>

<body>

协议格式:文本、二进制

method

GET、HEAD、POST、PUT、DELETE、TRACE、OPTIONS

status

1xx:信息类

2xx:成功类

3xx:重定向类

4xx:客户端错误类

5xx:服务器端错误

HEADER

通用首部

请求首部

响应首部

实体首部

扩展首部

web页面:多个资源

入口:资源引用:

认证:

基于IP认证:

基于用户访问:

basic

digest

资源映射:

Alias

DocumentRoot

httpd:MPM(多路处理模块)

prefork ,worker ,event(第一种是进程模型,后两种是线程模型)

prefork:主进程,生成多个子进程,每个子进程处理一个进程

worker:主进程,生成多个子进程,每个子进程生成多个线程,每个线程响应一个请求

event:主进程,生成多个子进程,每个子进程响应多个请求

I/O类型

同步和异步:

关注的是消息通知机制

同步:调用发出之后不会立即返回,但一返回,则返回的即是最终结果

异步:调用发出之后,被调用方立即返回消息,但返回的并非最终结果:被调用者通过状态,通知机制等来通知调用者,或通过回调函数来处理结果:

阻塞和非阻塞

关注的是调用者等待被调用者返回调用结果时的状态

阻塞:调用结果返回之前,调用者会被挂起,调用者只有在得到返回结果之后才能继续

非阻塞:调用者在结果返回之前,不会被挂起,即调用不会阻塞调用者

I/O模型:

blocking IO 阻塞式IO

nonblocking IO 非阻塞式IO

IO multiplexing 复用性IO

select():最多不能超1024个并发,poll():profork、worker

singnal driven IO  事件驱动型IO:event

增加了通知机制

水平触发:多次通知

边缘通知:只通知一次

asynchronous IO: 异步型IO

eopll

例如:一次read操作

(1)等待数据准备好,从磁盘到内核内存

(2)从内核内存复制到进程内存

nginx

Nginx:engine X

Tngine

Registry

libevent:高性能的网络库

epoll()

Nginx特性

模块化设计,较好的扩展性

高可靠

master --> worker

低内存消耗

10000个keep-alive模式下的connection,仅需要2.5MB内存

支持热部署

不停机而更新配置文件,日志文件滚动,升级程序版本

支持事件驱动、AIO、mmap

基本功能

静态资源的web服务器,能缓存打开的文件描述符

http、smtp、pop3 协议的反向代理服务器

支持缓存加速,负载均衡机制

支持FastCGI(fpm,LNMP),uWSGI(python)等

模块化(非DSO机制)、过滤器zip,SSI及图像的大小调整

支持SSL

扩展功能

基于名称和IP的虚拟主机

支持keeplive

支持平滑升级

定制访问日志,支持使用日志缓冲区提供日志存储性能

支持url rewrite

支持路径别名

支持基于IP和用户的访问控制

支持速率限制,支持并发数限制

Nginx的基本架构

一个master进程,生成一个或多个worker进程

事件驱动,epoll(边缘触发),kqueue:BSD系统,/dev/poll

复用器:select,poll,rt signal

支持sendfile,sendfile64

支持AIO

支持mmap

nginx的工作模式:非阻塞,时间驱动,有一个master进程生成多个worker线程,每个worker响应N个请求

worker * n

模块类型

核心模块

Standard HTTP modules

Optional HTTP modules

Mail modules

3rd party modules

安装方法:

源码:编译安装

编译安装: ./configure --help(查看帮助)

配置文件:

main配置段:全局配置段

event:定义event模型工作特性

http{}:定义http协议的相关配置

配置指令:要以分号结尾,语法格式:

directive value1[value2 ...]

支持使用变量

内置变量

模块会提供几建变量定义

自定义变量

set var_name value

主配置段指令

用于调试、定位问题

正常运行必备的配置

优化性能的配置

事件相关的配置

nginx:非阻塞、事件驱动、异步

主配置段的指令

正常运行的必备配置

1、user USERNAME[GROUPNAME]

指定运行worker进程的用户和组

2、pid  /path/to/pid_file

指定nginx守护进程的pid文件

3、worker_rlimit_nofile  # ;

指定所有worker进程所能够打开的最大文件句柄数

性能优化的相关配置

1、worker_processes #

所能打开的worker进程的个数:通常应该略少于cpu物理核心数

2、worker_cpu_affinity  cpumask...

优点:提升缓存的命中率

context switch (进程切换):会产生cpu的不必要的消耗

cpumask:

0000 0000

0000 0001

0000 0010

0000 0100

0000 1000

worker_cpu_affinity 00000001 00000010 00000100 (绑定前三颗cpu)

3、time_resolution

计时器解析度:降低此值,可减少gettimeofday()系统调用的次数

4、work_priority number;

指明worker进程的nice值,nice值越小,优先值越高

-20 19

100 139

事件相关的配置

1、accept_mutex {off|on};

master调度用户请求至各worker进程时使用的负载均衡锁:on表示能让多个worker轮流的,序列化的去响应新请求;

2、lock_file file:

accept_mutex用到的锁文件路径

3、use [epoll|rtsig|select|poll]

指明使用的事件模型:建议让nginx自行选择

4、worker_connection #;

设定单个worker进程所能够处理的最大并发连接数

worker_connection (51200)* worker_processes

用于调试,定位问题,(解码时,要加上这个包  --with-debug)

1、daemon {on|off}

是否已守护进程方式,来运行nginx:调试时应设置为off

2、master_process {on|off}

是否以master/worker模型来运行nginx;调试时可以调试为off

3、error_log 位置 级别;

若要使用debug级别,需要在编译nginx时使用了 --with-debug选项

nginx作为web服务器时使用的配置:

http{}:由ngx_http_core_module模块所引入:

配置框架:

http{

upstream{

..

}

server{

location URL{

...

}#类似于httpd中的<location>,用于定义URL与本地文件系统的映射关系:

location URL {

if...{

}

}

...

}#每个server类似于httpd中的一个<VirtualHost>

}

注意:与http相关的指令仅能够放置于http、server、location、upstream、if上下文,但有些指令仅用于这五种上下文中的某些中:

配置指令;

1、server{}

定义一个虚拟主机的

2、listen

指定监听的端口和地址

3、server_name NAME [...]

后可跟多个主机;名称还可以使用正则表达式(~)或通配符;

(1)先做精确匹配检查;

(2)左侧通配符匹配检查

(3)右侧通配符匹配检查

(4)正则表达式匹配检查

(5)default_server

4、root path:

设置资源路径映射;用于指明请求的URL所对应的资源所在的文件系统上的起始路径

5、location

功能:允许根据请求的URL来匹配定义的各location。匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能

= :精确匹配检查

~:正则表达式模式匹配检查,区分字符大小写

~*:正则表达式模块匹配检查,不区分字符大小写

^~: URL的前半部分匹配,不支持正则表达式

匹配优先级:= > ^~ > ~ > ~* > 不带任何符号的

6、alias path;

用于location配置段,定义路径别名

注意:root表示指明路径为对应的location"/"URL; alias 表示路径映射,即location指令后定义的URL是相对于alias所知名的路径而言

7、 index file;

默认主页面:

index index.php index.html;

8、error_page code [...] [=code] URL | @name

根据http响应状态码来指明待用的错误页面:

error_page 404 [= 200]/404_customed.html

[=code]: 以指定的响应码进行响应,而不是默认的原来的响应码:默认表示以新资源的响应码为其响应码:

9、基于IP的访问控制机制

allow IP/network

deny IP/network

10、基于用户的访问控制

basic,digest

auth_basic "" ;

auth_basic_user_file "/PATH/TO/PASSWORD_FILE

账号密码文件建议使用htpasswd来创建

11、https服务

生成私钥,生成证书签署请求,并获得证书

server {

listen   443 ssl;

server_name www.baidu.com

ssl_certificate /etc/nginx/ssl/nginx.crt

ssl_cretificate_key /etc/nginx/ssl/nginx.crt

ssl_session_cache  shsred:SSL:1m;

ssl_session_timeout  5m;

ssl_ciphers  HIGH:!aNULL:!MDS

ssl_prefer_server_ciphers  on;

location / {

root /data/web

index index.html  index.htm

}

}

12、stub_ststus {on|off}

仅能用于location上下文

location  /ststus {

stub_status on;

}

13、rewrite regex replacement flag;

例如:

rewrite ^/images/(.*\.jpg)$ /imgs/$ break;

flag:

last:一旦此rewrite规则重写完成后,就不再被后面其他的rewrite规则进行处理,而是由User Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程

break;一旦此rewrite规则重写完成后,由User Agent对新的URL重写发起请求,且不再会被当前location内的任何rewrite规则所检查

redirect:以302响应码(临时重定向)返回新的URL

permanent:以301响应码(永久重定向)返回新的URL

14、if

语法:if(condition){...}

应用语法: server , location

condtion:

(1)变量名:

变量值为空串,或者以“0”开始,则为false,其他均为true

(2)以变量为操作数构成的比较表达式

可使用=,!= 类似的比较操作符进行测试

(3)正则表达式的模式匹配操作

~:区分大小写

~*:不区分大小写

!~和!~*:对上面两种测试取反

(4)测试文件存在性:-f,!-f

(5)测试指定路径为目录的可能性:-d ,!-d

(6)测试文件存在性:-e,!-e

(7)检查文件是否有执行权限:-x,!-x

15、防盗链

location ~*\.(jpg|gif|jpeg|png)$ {

valid_referer none blocked www.baidu.com;

if ($invialid_referer) {

rewrite ^/ http://www.baidu.com/403.html

}

}

16、定制访问日志格式

log_format

网络连接相关的配置

1、keeplive_timeout #

长连接的超时时长,默认75秒

2、keeplive_requests #

在一个长连接上所能够允许请求的最大资源数

3、keeplive_disable [msie6|safari|none]

为指定类型的User Agent禁用长连接

4、tcp_nodelay on|off

是否对长连接使用TCP_NODELAY选项;(如想提升用户体验,使用on)

5、client_header_timeout #;

读取http请求报文首部的超时时长

6、client_body_timeout #;

读取http请求报文body部分的超时时长

7、send_timeout #;

发送响应报文的超时时长

fastcgi的相关配置

lnmp:php要启用fpm模型

原文地址:http://blog.51cto.com/13214087/2132974

时间: 2024-11-01 18:46:57

nginx 个人详解,基础知识,要点总结的相关文章

Scala详解--------基础知识详解

Chapter1 1.Scala解释器 启动Scala解释器的方法如下: 自己总结的: 1.打开执行命令栏WIN+R  ,输入cmd,在命令行上输入Scala等待启动如下 如上面所示即可启动Scala 2.使用bin内部的启动脚本 找到你所安装Scala的目录,并在Scala的bin文件夹中找到scala.bat文件,打开即可. 以上是我知道的打开方式,另外,可以使用eclipseEE进行安装插件,进行使用,具体的使用情况可以参考上一篇文章. 下面来测试一下Scala编译器的效果吧 测试成功,说

nginx配置文件详解笔记

web运维第一篇:nginx配置文件详解笔记#定义Nginx运行的用户和用户组user www www;#nginx进程数,建议设置为等于CPU总核心数.worker_processes 8;#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]error_log /var/log/nginx/error.log info;#进程文件pid /var/run/nginx.pid;#一个nginx进程打开的最多文件描述符数目,理论值应

Nginx 配置文件详解

Nginx 配置文件详解 user nginx ; #用户 worker_processes 8; #工作进程,根据硬件调整,大于等于cpu核数 error_log logs/nginx_error.log crit; #错误日志 pid logs/nginx.pid; #pid放置的位置 worker_rlimit_nofile 204800; #指定进程可以打开的最大描述符 这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文 件数(ulimit -n)与ngin

三、Java基础知识要点合集

1.数据类型 Java的数据类型分为基本数据类型和引用数据类型. a, 基本数据类型包括:byte, boolean, char, short, int, long, float, double; b, 每个基本数据类型都有相应的引用类型,比如int  ->  Integer,char -> character. c, 查询不同类型数据的范围,方法之一是可以用基本类型对应的引用类型.比如,"int i = Integer.Size; "(i表示int型数据所占的位(bit)

RHEL7下Nginx配置文件详解(二)

RHEL7下Nginx配置文件详解 全局配置 #user  nobody nobody;//指定Nginx进程运行用户以及用户组. worker_processes  1;//开启的进程数. #error_log  logs/error.log;//定义全局错误日志 #error_log  logs/error.log  notice; //定义全局错误日志 #error_log  logs/error.log  info; //定义全局错误日志 #pid        logs/nginx.p

&#8203;Nginx 安装详解

Nginx 安装详解 nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 如有需要nginx 安装进行图文介绍http://down.51cto.com/data/1966600 点击进行下载 yum install gcc gcc-c++ -y 下面正式开始 -------------------------------------------------------------------------------------------- 一般我们都

nginx服务器详解

轻量级的web服务器 1.nginx服务器功能 nginx服务器可以扮演:web服务器.应用服务器.代理服务器.反向代理服务器.后台服务器.CDN缓存服务器 nginx的基本模块: 内核模块CoreModule:用于控制nginx服务器的基本功能,该模块的指令置于配置文件的根部(开始部分),内核模块还提供了大量的内置变量:$url.$host.... 事件驱动模块EventsModule:用于控制nginx如何处理连接,该模块的指令参数会对应用程序的性能产生重要影响,置于events{}中. h

LAMP架构(nginx安装,默认虚拟主机,用户认证,域名重定向,nginx配置文件详解)

一.安装nginx [[email protected] conf]# wget http://nginx.org/download/nginx-1.8.0.tar.gz [[email protected] conf]# tar zxvf nginx-1.8.0.tar.gz [[email protected] conf]# cd nginx-1.8.0 [[email protected] conf]# ./configure --prefix=/usr/local/nginx [[ema

总结了零基础学习Java编程语言的几个基础知识要点

很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这些Java的基本概念也是必不可少的,死记硬背肯定是不行的,重在理解,理解它们之间的区别与联系,分别有哪些应用.想想这些代码中用到了哪些知识点.不要一味地照着书本敲代码.而不去理解. 1.Java编程语言,即语法. 2.Java文件格式,即各种文件夹.文件的后缀. 3.Java虚拟机(JVM),即处理

nginx之旅第一篇:nginx下载安装、nginx配置文件详解、nginx默认网站

一.nginx下载安装 版本nginx 1.15.5 系统环境centos7.5(本机ip192.168.199.228) 关闭selinux 和防火墙firewall 1.下载 wget http://nginx.org/download/nginx-1.15.5.tar.gz -P /usr/src 2.安装 安装大概过程 配置---编译---安装 配置 1)检查环境 是否 满足安装条件 依赖解决 2)指定安装方式 配置文件 命令文件 各种文件放哪里 开启模块功能[内 置模块 三方模块] 3