Nginx的学习笔记

为什么使用Nginx;

性能比较好;

第三方模块扩展较多;(开源协议较为宽松)

高可靠性:主控进程和工作进程,一个工作进程出错主进程可以快速另开一个;

低内存消耗:一万个keep-alive连接在Nginx仅消耗2.5MB,支持较高的连接数;

支持热部署;不用停止服务就能版本更新,更新配置文件,更换日志文件,(源于master和worker分开设计)

基本功能:

支持静态的web服务器;能缓存打开的文件 描述符,

http smtp pop3协议的反向代理服务器,缓存,负载均衡;

支持FastCGI(fpm)

模块化,不能动态装卸在,支持过滤器压缩zip,支持ssi及图像大小调整;支持SSL

扩展功能;

支持基于名称和IP的虚拟主机

支持keepalive

支持平滑升级

可以定制访问日志,支持使用日志缓冲区提高日志存储性能;

支持url重写

支持路径别名

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

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

...

Nginx基本架构;

一个master进程生成一个或多个worker进程基于事件驱动机制响应工作;

消息通知:select,poll,rt,signals

支持sendfile,sendfile64

支持AIO

支持mmap

Nginx的工作模式:

非阻塞,事件驱动,一个master生成一个或多个worker,每个worker处理多个事件请求;

简单的编译安装Nginx:

./configure

--prefix=/usr/local/nginx 指定安装路径;

--conf-path=/etc/nginx/nginx.conf 指定主配置文件位置;

--user=nginx 指定以什么用户运行

--group=nginx 指定以什么组运行

--error-log-path=/var/log/nginx/error.log 指定错误日志位置

--http-log-path=/var/log/nginx/access.log 指定访问日志路径

--pid-path=/var/run/nginx/nginx.pid 指定pid文件存放路径

--lock-path=/var/lock/nginx.lock 指定锁文件路径

--with-http_ssl_module 表明启用ssl模块

--with-http_stub_status_module 启用status模块

--with-http_gzip_static-module 启用gzip压缩

由于Nginx支持url重写,而url重写是要基于pcre的方式来使用正则表达式,

so要安装pcre_devel包,

编译好后启动nginx

/usr/local/nginx/sbin/nginx

结束nginx

killall nginx

nginx -h 查看帮助

nginx -t 测试配置文件

正常运行的必备配置:

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

2,pid 指定nginx的pid文件

3,worker_rlimit_nofile #

指定一个worker进程所能够打开的最大文件句柄;

4,worker_rlimit_sigpending #

指定每个用户能够发往worker的信号数量;

优化性能的配置:

1,worker_processes # :

worker 线程的个数,通常应该设定为物理CPU核心数减一

2,worker_cpu_affinity cpumask ...:

绑定worker进程至指定的CPU上:

3,timer_resolution t:解析度频繁数

4,worker_priority nice: -20,19 调整优先级

worker_priority -2

事件相关的配置:

1 accept_mutex [on|off] 内部调用用户请求各worker时用的负载均衡锁;

打开时表示能让多个worker轮流地,序列化的与响应新请求;

2 lock_file /path/to/lock_file:

3,accept_mutex_delay # ms:一个worker请求锁文件等待时长;

4,use [epoll | rgsig | select | poll];

定义使用的事件模型;建议让Nginx自动选择;

5,worker_connections #

每个worker进程响应的最大并发请求数;

用于调试定位问题的:

1,deamon [off|on]

表示是否以守护进程方式启动nginx:正常环境应该为on

2,master_process on|off:

是否以master/worker模型来启动nginx 默认为on

3,error_log /path/to/error_log level:

错误日志及级别:出于调试的目的可以使用debug,但此级别只有在编译nginx时使用了--with-debug才有效;

IO模型:

阻塞,非阻塞,IO复用,信号驱动IO(epoll),AIO(异步IO)

Nginx应用

1,定义虚拟主机:

一个server块就是一个server主机

server{

}

2,listen

监听的端口

listen address [:port] [default_server] [ssl]

backlog=number:指明TCP协议的backlog队列大小,默认为-1,表示不设置;

rcvbuf=size:设定监听句柄的SO_RCVBUF参数;

例子:

listen 172.16.100.8:80

3,server_name name1 [name2] [name3] ... 主机名;

(1) 先做精确匹配 www.magedu.com

(2) 左侧通配符匹配 *.magedu.com

(3) 右侧通配符匹配 www.*>

(4) 正则表达式匹配 ~^.*\.magedu.\.com$

(5) default_server中定义的默认配置

elinks -dump 表示直接请求网页之后退出;

elinks -dump http://www.mage.com

4,root 设置路径映射的,设置web资源路径映射,用于指明请求的url所对应的文档目录路径;

5,location:匹配访问请求的URI,匹配到后就用location内部定义的方式响应;

URI:请求路径中去掉服务器名和端口剩余部分

比如:

Nginx 定义了三种

location /img {}

location /bbs {}

location / {}

我们访问http://www.server.com/img会被第一个匹配到

http://www.server.com/bbs就会被第二个匹配到

如果访问里第其他的被匹配不到的,那就会被默认的/匹配也就是第三情况

location 匹配规则:location [=|~|~*]

= 精确匹配

~ 正则表达式匹配

~* 正则表达式匹配且不区分大小写

*~ URL的前半部分匹配,不检查正则

匹配优先级

= *~ ~* 无符号

root可以写在location中,比如

location /images/{

root "/web/images";

}

6 alias path 路径别名

别名与root区别:

如果定义成root:

location /img {

root "/www/images/"

}

请求:www.mage.com/img/index.html

实际结果是在 /www/images/index.html

如果定义成alias

location /imgs/ {

alias "/www/images/"

}

请求:www.mage.com/imgs/index.html

实际结果是在 /www/images/index.html

7 index file

设定默认主页面

index index.html ;

8 自定义错误页面:根据http状态返回码重定向错误页面

error_page code [..] URI

例如:

error_page 404 /error/404.html

注意:如果定义的页面写成绝对路径和相对路径的返回码时不一样的;

自定义 错误码

error_page 404 =200 /error/404.html

# 错误码为404时,跳转时定义成200,然后转到你访问的页面;

# 等号后面的code码可以省略,此时表示以新资源的响应码为用户请求的响应码;

9 try_file

网络连接的相关配置:

1,keepalive_timeout time:

保持连接的超时时长,默认为75

2,keepalive_requests #

再一次保持连接上允许承载的最大资源数;

3,keepalive_disable 跟浏览器类型比如 safari,msie6

禁用指定浏览器的长连接;

4,tcp_nodelay on|off

对长连接是否使用TCP_NODELAY选项;

5,client_header_timeout #

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

6,client_body_timeout #

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

7,send_timeout #

发送响应报文的超时时长;

对客户端请求进行限制:

1,limit_except METHOD {...}

指定对范围之外的其他方法的访问控制;

limit_except GET {

allow 172.16.0.0/16;

deny all;

}

如果客户端请求访问时使用的是GET方法以外的,那么仅允许172.16这网段,其他的都拒绝;

2,client_body_max_size SIZE:

限制请求报文中body部分的上限;通过检查请求报文首部中的"Content_Length"来判定;

3,limit_rate speed:

限制客户端美妙中传输的字节数,默认为0,表示无限制;

文件操作优化相关的配置:

1,sendfile on|off

2,aio on|off 异步IO是否开启

3,directio size|off 直接IO,不写往内存,

4,open_file_cache max=N[inactive=time] | off;

nginx可以缓存以下三种信息:

(1) 文件句柄、文件大小和最近一次修改时间;

(2) 打开目录的目录结构;

(3) 没有找到的或者没有权限操作的文件的相关信息;

max=N表示可缓存的最大条目上限;一旦到达上限,则会使用LRU从缓存中删除最近最少使用的条目;

inactive=time: 在inactive指定的时长内没有被访问过的缓存条目就会淘汰;

5,open_file_cache_errors on|off

是否缓存在文件缓存中打开文件时出现错误(找不到,没权限等错误)信息;

6,open_file_cache_min_user #:

每隔多久检查一次缓存中缓存条目的有效性;默认为60s;

扩展模块:

基于IP的访问控制:

Nginx学习补充:(附件上传)

1,编译安装Nginx配置文件语法不会高亮

2,Nginx服务脚本

时间: 2024-10-24 22:57:04

Nginx的学习笔记的相关文章

Nginx+Lua学习笔记-环境搭建

使用的OpenResty 具体教程可以参考:http://jinnianshilongnian.iteye.com/blog/2186270 这里只记录下我自己的环境搭建过程 系统使用的是ubuntu-14.04.1-server-amd64.iso 所有操作都使用了sudo提权... 首先参考http://blog.chinaunix.net/uid-8721861-id-2017178.html解决apt-get install时Media change: please insert the

Nginx Rewrite学习笔记

相关指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令. 1.if指令 语法: if(confition){...} 默认值:none 使用环境:server,location 该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句.if指令不支持嵌套,不支持多个条件&&和||处理. 以下信息可以被指定为条件 (1)变量名,错误的值包括:空字符串"",或者任何以0开始的字符串 (2)变量比较可以使用"=

一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建

作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记: 阅读目录 环境说明 安装CentOS7 安装.NET Core SDK for CentOS7 搭建ftp服务器 安装mysql 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 环境说明 服务器系统:CentOS 7.3 64位 相关工具:putty.Xftp 服务器软件软件:.n

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root、alias、index配置

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root.alias.index配置 实验环境: centos 测试节点IP:172.16.3.101 基于端口的虚拟主机: vim /etc/nginx/nginx.conf # 向里面的http {}里面加入如下内容   server { # server定义一个虚拟主机         listen 8080; # 监听本机所有IP端口8080         server_name www.test.com; # 虚拟主机名为:w

nginx docker镜像学习笔记

最近在看nignx,在本地虚拟机使用docker nginx镜像搭建了nginx+php环境 学习笔记如下: 拉取nginx镜像docker pull nginx 创建一个容器,并挂载本地目录docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx挂载的路径权限为只读(:ro),默认权限是读写. 指定端口docker run --name some-nginx -d -p 8080:80 som

马哥学习笔记二十八——nginx反向代理,负载均衡,缓存,URL重写及读写分离

Nginx反向代理 Nginx通过proxy模块实现反向代理功能.在作为web反向代理服务器时,nginx负责接收客户请求,并能够根据URI.客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server).nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上.如下面的示例中,location的/uri将被替换为上游服务器上的/newuri. location /uri { proxy_pa

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

python学习笔记之函数总结--高阶函数以及装饰器

python学习笔记之函数总结--高阶函数以及装饰器 Python特点: 1.不是纯函数式编程(允许变量存在): 2.支持高阶函数(可以传入函数作为变量): 3.支持闭包(可以返回函数): 4.有限度的支持匿名函数: 高阶函数: 1.变量可以指向函数: 2.函数的参数可以接收变量: 3.一个函数可以接收另一个函数作为参数: 下面我将示例一些函数的写法以及使用,并说明python中函数的特性: 1.基本的高阶函数示例: #!/usr/bin/env python def func():