Linux–Nginx攻略

什么是Nginx

Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的WEB服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx HTTP服务器的特色及优点

  • 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)
  • 资源消耗少:在3万并发连接下,开启10个Nginx线程消耗的内存不到200MB
  • 可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的Haproxy软件或LVS的功能
  • 具备Squid等专业缓存软件等的缓存功能
  • 支持异步网络I/O事件模型epoll

Nginx的主要企业功能

  • 使用Nginx运行HTML,JS,CSS,小图片等静态数据(此功能类似Lighttpd软件)
  • Nginx结合FastCGI运行php等动态程序(例如使用fastcgi_pass方式)
  • Nginx结合Tomcat/Resin等支持Java动态程序(常用的proxy_pass)

Nginx作为web服务器的主要应用场景包括:

  1. 使用Nginx运行HTML,JS,CSS,小图片等静态数据(此功能类似Lighttpd软件)
  2. Nginx结合FastCGI运行php等动态程序(例如使用fastcgi_pass方式)
  3. Nginx结合Tomcat/Resin等支持Java动态程序(常用的proxy_pass)

一般情况下普通php引擎支持的并发连接参考为300-1000,Java引擎和数据库的并发连接参考值为300-1500.当然架构不同可能会有浮动

Nginx的安装

快速安装命令集合:

各个命令解释

  • 安装前需要安装pcre库(兼容正则表达式)
  • 还需要安装openssl
  • 编译之前还需要创建一个用户
  • 编译安装:
  • 安装完成后的检查与启动,重启

 

  • 注意:1、关闭防火墙:

    2、关闭安全子系统(selinux)

    a、查看selinux的状态:

    可以通过/usr/sbin/sestatus –v 或者用命令 getenforce

    Disabled为关闭

    b、更改selinux的方式:

    setenforce 0(临时关闭)

    vi编辑/etc/selinux/config进行下面更改

    SELINUX=disabled(永久关闭)

安装故障总结

安装故障处理:

故障一:没有安装pcrepcre-devel

报错为:./configure: error: the HTTP rewrite module requires the PCRE library.

故障二:没有安装opensslopenssl-devel

报错为:./configure: error: SSL modules require the OpenSSL library.

故障三:nginx.pid文件缺失

执行:/application/nginx1.6.2/sbin/nginx -c /application/nginx1.6.2/conf/nginx.conf

重新指定下配置文件的位置

报错为:nginx: [error] open() "/application/nginx1.6.2/logs/nginx.pid" failed (2: No such file or directory)

如果yum报错请:

http://user.qzone.qq.com/616745045/2  按照上述文档进行配置

常用的Nginx http功能模块

 

nginx.conf详解

egrep -v "#|^$" nginx.conf.default >nginx.conf

Location 模块

location 模块的作用是根据用户请求的URI来执行不同的应用,匹配成功了进行相关的操作

什么是统一资源标示符URI(Uniform Resource Identifier):

是一个用于标识某一互联网资源名称的字符串,该种标识允许用户对任何的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。Web上可用的每种资源 HTML文档、图像、视频片段、程序等 - 由一个统一资源标识符进行定位。

Location基础语法

6种location格式的区别

1、^~ 特殊字符串匹配 匹配到相应的字符串后,不会对后面正则进行匹配

2、~* 正则匹配 不区分大小写

3、‘=‘ 精确查找

4、/xxx/ 普通字符串路径匹配

5、/ 根 当所有匹配结束 没有符合的 匹配默认的 / 根路径

6、~ 表示uri包含正则,并且区分大小写

实验一、输入www.imdsx.cn

nginx代理走的是精确匹配所有走到了400(这里多提一句,当多次使用的路径时 可以使用精确匹配方式,加快匹配速度提高性能)

实验二、输入http://www.imdsx.cn/123456

nginx所有location都没有匹配到找到了默认的根  也就是401

实验三、输入http://www.imdsx.cn/1.gif

nginx匹配的事正则 *.gif 也就走到了 403

组合实验

实验四、输入www.imdsx.com/aaa/1.gif

同时存在普通路径、和正则的情况下nginx又是如何匹配的呢?

nginx匹配的是正则,因为nginx在匹配时会先记录最高匹配度的普通uri,再去匹配正则,如果正则有匹配的则展示正则,否则展示普通uri

实验五、输入www.imdsx.cn/aaa/1.abc 

我们输入了一个不符合正则的URI nginx匹配到了普通URI 502错误

实验五、输入www.imdsx.com/bbb/1.gif

nginx这时匹配的是402错误,^~ 方式如果匹配到普通uri后就不在继续正则匹配

重新改下location

实验六、“^~”遵循最大匹配原则 

 输入www.imdsx.cn/aaa/

nginx匹配了 400

输入www.imdsx.cn/aaa/bbb/

nginx匹配了 401

重新改下location

试验七、当最长匹配(^~)和精确匹配(=)相同时

这时输入http://www.imdsx.cn/aaa/

nginx 匹配到了 401 匹配到了精确匹配(=)

Nginx对于静态文件的缓存配置

只要访问的是图片文件,就会根据图片的名称在image的这个目录中寻找

为什么配置静态缓存?

1、为了提高响应速度

2、减轻真实服务器的负载

对于静态资源(长久使用不变动的文件或图片)我们可以在反向代理服务器中进行缓存,nginx在跳转时只要匹配到了缓存中的文件,讲直接通过nginx返回给客户端,如果没有则在下发到个服务器进行处理。大大优化了客户的访问速度和对真是服务器所造成的真实压力

upstream模块

Upstream的牛逼之处在于,它解决了nginx跨越单机的限制,完成网络数据的接收、处理和转发。实现了负载均衡的能力。数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。在云模型大行其道的今天,数据转发使nginx有能力构建一个网络应用的关键组件。

Upstream的四种命中机制

1、ip_hash;

iphash 能够避免同一个客户端连续的web请求分发到多个机器 涉及到session校验问题 通过iphash解决该问题

2、least_conn;

请求分发到最少连接数的服务器上

3、Round Robin(轮训)

默认是轮训机制,当有服务器down掉,就从负载列表清除掉

轮询时默认的weight=1;

4、Weight(权重)(weighted round robin)

基于权重的反向代理 weight值越大越有几率被分配

在实际应用中iphash和weight可以搭配使用

反向代理的配置设置

代理缓存区设置(proxy_buffering)

proxy_buffering参数

代理缓存的开启和关闭,不影响proxy_buffer_size的作用,只作用在proxy_buffers、proxy_busy_buffers_size

接受服务器返回的第一个部分 response header 建议设置为proxy_buffers的一个buffer的大小

设置buffer的数量和大小

nginx在接受服务器的数据的同时,并不是全部接受服务器回传的数据在返回客户端而是有部分数据在接收的同时返回客户端,返回的大小通过proxy_busy_buffers_size 设置,建议是单个buffer的两倍。如果缓冲区和busy缓冲区都满了则写到磁盘的临时文件中。通过下方的参数设置

responser返回占满了所有buffer则存在temp_file下 而最多能接收的大小则通过proxy_max_temp_file_size设置 当涉及到磁盘存储时就涉及到IO的操作,则会影响到客户端体验的效果

是一次访问能写入的临时文件的大小,默认的大小单个buffer的2倍

生产中常见的网站状态码

1
2
3
4
5
6
7
8
9
10
11
12
13
状态码 详细描述说明
200-OK                      服务器成功返回网页,这是成功的状态码
301-Moved Permanently       永久跳转,所请求的网页将永久跳转到被设定的新位置
403-Forbidden               禁止访问,虽然这个请求时合法的,但是服务器端因为匹配了预先设置的规则而拒绝相应客户端的请求,
                            此类问题一般为服务器或服务器权限配置不当所致
404-Not Found               服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源所导致
500-Internal Server Error   内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求,
                            这是一个较为笼统的报错,一般为服务器的设置或内部程序问题导致
502-Bad Gateway             坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成相应网关服务器,
                            这通常为反向代理服务器下面的节点出问题导致
503-Service Unavailable     服务当前不可用,可能是服务器超载或停机维护导致的,或者是反向代理没有可以提供的服务节点
504-Gateway Timeout         网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求,
                            多数是服务器过载导致没有在指定的时间内返回数据给前端代理服务器
原文地址:https://www.cnblogs.com/xiaojinniu425/p/7770855.html