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详解

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倍

生产中常见的网站状态码

时间: 2024-10-28 22:45:01

Linux–Nginx攻略的相关文章

《Linux深度攻略》一书,讲述Linux日常系统管理和服务器配置内容

Linux深度攻略 首先从介绍Linux系统的安装入手,讲述了Linux系统管理和服务器配置两部分的知识.系统管理方面内容有Linux系统简介和安装,Linux字符界面,目录和文件管理,Linux常用命令,Shell编程,用户和组群账户管理,权限.所有者和ACL,归档.压缩和备份,软件包管理,磁盘和文件系统管理,逻辑卷管理,进程和服务管理,任务计划以及Linux系统引导和启动.服务器配置方面内容有Linux网络基本配置,配置OpenSSH.VNC.NFS.DHCP.Samba.DNS.Apach

思维导图学 Linux Shell攻略之干货篇 mysql数据库脚本管理系统

以结果为导向的学习,才是最有效率学习.笔者以前也曾经隔三差五的学习linux shell编程来着.给我的感觉就是,今天学了,后天忘了,一星期之后就白学了. 还好,最近自己平时没啥事,一直照着<linux shell攻略>,学做一些小例子,看着自己写的shell程序,简单的几行程序,实现一些好玩的效果,信心满满.不知不觉间,慢慢坚持了2周. 说说自己的干货吧.其实就是一个linux 操作mysql数据库脚本管理系统. 功能谈不上复杂,就是在平时工作中,笔者要维护多套业务系统,这些业务系统主要功能

linux脚本攻略

ls #列出以a和o开头的所有文件 [[email protected] ~]# ls anaconda-ks.cfg nss-pam-ldapd-0.9.8-1.gf.el7.x86_64.rpm openldap-clients-2.4.44-21.el7_6.x86_64.rpm original-ks.cfg tools [[email protected] ~]# ls [ao]* anaconda-ks.cfg openldap-clients-2.4.44-21.el7_6.x86

思维导图学 Linux Shell攻略之小试牛刀篇

曾听一位大神讲过,带着目的去学,知识往往能记得牢,记得稳.借助思维导图这个工具,对一些我感兴趣的知识点进行分类管理.以后方便自己复习. 我会以思维导图+代码段的方式,回滚学习linux shell编程. 转义/色彩 与用户交互的接口 #打印一个普通的字符串 [[email protected] ~]# echo "it's isa dog" it's is a dog   #打印一个带有单引号和换行符的字符串,单引号可正常输出,但换行符没有效果 #没有达到想要的效果 [[email p

Linux安全攻略-僵尸进程

原文地址:http://blog.chinaunix.net/uid-29033331-id-3857755.html 微软系列的东西现在已经非常受人们的喜爱,尤其是他独特人性化操作才让大家爱不释手,但是他也以漏洞之王为称,所以政府.企业等大型服务器是绝对没人敢用windows系列产品的.相比之下Linux在安全方面就闲得非常强壮. 而且照以后的发展趋势来看Linux将在各各领域占有绝对的优势,这个年代要是不懂Linux很难立足.所以今天我就带大家步入Linux最基本的安全领域—"进程"

Linux学习攻略分享,云计算应该怎么学?

要学好云计算首先就要养成在命令行下工作的习惯,一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序.在命令行下学习虽然一开始进度较慢,但是熟悉后,您未来的学习之路将是以指数增加的方式增长的.从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的.即使是通过一条缓慢的调制解调器线路,它也能操纵几千公里以外地远程系统. 用Unix思维思考Linux 由于Linux是参照Unix的思想来设计的,理解和掌握它就必须以Unix的思维来进行,而不能以Windo

shell脚本学习1(Linux脚本攻略)

sudo <command> < arguments> 等价于root权限执行命令 赋予所有用户文件的可执行权限:chmod a+x script.sh 执行脚本:./script.sh#./表示当前的目录 命令1:echo "welcome to Bash" 命令2:printf "hello world" 区别:printf 不带换行! example1: #!/bin/bash printf "%-5s %-10s %-4s\

&lt;linux shell 攻略&gt; 庖丁解牛 mysql数据库脚本管理系统

操作界面 这个小系统一共包含4个脚本 sh 功能 备注 oneKey.sh 主程序,调用其他程序,对外提供功能 menu.sh 勾画菜单 function.sh 提供操作数据库接口 valid.sh 操作mysql数据库,验证数据 menu.sh 画字符菜单 #!/bin/bash function print_main_menu(){ cat <<EOF ####################################### #    1)创建数据库                 

cafebabe.cc/navo 我也来写写攻略

=如果还没有点进去过cafebabe.cc/nazo/ 过的话,可以先点进去尝试一下闯关哦~= 目前没有搜到比较全的攻略,相对完整的就是来自知乎(http://www.zhihu.com/question/31231641)上张博韬大神的解答啦.不过他点到为止,有时还是有点捉摸不透.我想把他的答案写得再具体一点.这就是我这篇攻略的重点了.... 不过还是推荐大家自己先尝试闯关,攻略都是折叠起来的,实在想不通了再打开吧.恩,不多说了,点开链接进去吧! level1:点击“此处”链接就好了,没什么好