Nginx技术详解(1)

Nginx Web服务应用:

Nginx(engine x)是一个开源的,支持高并发的www服务和代理服务软件。

Nginx是俄罗斯人Igor Sysoev开发的,最初被应用到俄罗斯的大型网站(www.rambler.ru)上。后来作者将源代码以类BSD许可证的形式开源出来供全球使用。

在功能应用方面,Nginx不仅是一个优秀的Web服务软件,还具有反向代理负载均衡和缓存的功能。

在反向代理负载均衡方面类似于LVS负载均衡及HAProxy等你专业代理软件。

Nginx部署起来更加方便简单,在缓存服务功能方面,有类似于Squid等专业的缓存服务软件。

Nginx可以运行在UNIX、Linux、MS Windows Server、Mac OS X Server、Solaris等操作系统中。

Nginx的重要特性:

--可以针对静态资源高速节点并发访问及缓存。

--可以使用反向代理加速,并且可以进行数据缓存。

--具有简单负载均衡,节点健康检查和容错功能。

--支持远程Fast CGI服务的缓存加速。

--支持Fast CGI、Uwsgi、SCGI、Memcached Server的加速和缓存。

--支持SSL、TLS、SNI。

--具有模块化的架构:

--过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSL和图像缩放等功能。

--在SSL过滤器中,包含多个SSL页面,如果经由Fast CGI或反向代理处理,可以并行处理。

Nginx所具备的www服务特性:

--支持基于域名、端口和IP的虚拟主机配置。

--支持KeepAlived和piplined连接。

--可进行简单、方便、灵活的配置和管理。

--支持修改Nginx配置,并且在代码上线时,可平滑重启,不中断业务访问。

--可自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过rsyslog处理日志。

--可利用信号控制Nginx进程。

--支持3xx-5xxHTTP状态码重定向。

--支持rewrite模块,支持URI重写及正则表达式匹配。

--支持基于客户端IP地址和HTTP基本认证的访问控制。

--支持PUT、DELETE、MKCOL、COPY、MOVE等特殊的HTTP请求方法。

--支持FLV流和MP4流技术产品应用。

--支持HTTP响应速率限制。

--支持同一IP地址的并发连接或请求限制。

--支持邮件服务代理。

面试必备:

--支持高并发,可以支持几百万并发连接。

--资源消耗少,在3万并发连接下,可以开启10个nginx的线程消耗的内存不到200MB。

--可以做HTTP反向代理及加速缓存,及负载均衡功能,内置对RS节点服务器健康检查功能,折现但能够与专业的HAProxy或LVS的功能。

--具备Squid等专业缓存软件等的缓存功能。

--支持异步网络I/O事件模型epoll(Linux2.6+)。

Nginx软件主要企业应用:

--作为Web服务软件

--使用Nginx运行HTML、JS、CSS、小图片等静态数据(类似于Lighttpd)

--结合Fast CGI运行PHP等动态程序(例如使用fastcgi_pass方式)

--Nginx结合Tomcat/Resin等支持Java动态程序(常用proxy_pass)

--反向代理或负载均衡服务(Nginx从1.9.0开始就开始支持TCP的代理了)

--前端业务数据缓存服务

Web服务应用产品性能对比:

--静态数据的访问上:

--处理小文件(小于1MB)时,Nginx和Lighttpd比Apache更有优势,Nginx处理小文件的优势明显,Lighttpd综合最强。

--动态数据的访问上:

--三者差距不大,Apache更有优势,因为处理动态数据的能力在于PHP(Java)和后端数据库的服务能力,也就是说瓶颈不在Web服务器上。

--一般情况下普通PHP引擎支持的并发连接参考值300~1000。

--Java引擎和数据库的并发连接参考值300~1500。

为什么Nginx比Apache的性能高:

Nginx使用最新版的eepoll(Linux 2.6内核)和kqueue(FreeBSD)异步网络I/O模型,而Apache使用的是传统的select模型。

目前Linux下能够承受高并发访问的Squid、Memcached软件采用都是epoll模型。

处理大量的连接的读写时,Apache所采用的select网络I/O模型比较低。

如何正确采用Web服务器:

--静态业务:如果是高并发场景,尽量采用Nginx或Lighttpd,二者首选Nginx。

--动态业务:理论上采用Nginx和Apache均可,建议使用Nginx,为了避免相同业务服务的软件多样化,增加维护成本,动态业务可以使用Nginx兼做前端代理,再根据页面的元素或目录转发到其他的服务器进行处理。

--既有动态业务又有静态业务,就用Nginx。

编译安装Nginx:

(1)安装Nginx需要的pcre(Perl兼容正则表达式)库,允许Nginx使用rewrite模块提供URL重写功能。

yum install pcre pcre-devel -y

(2)安装openssl-devel,允许Nginx提供HTTPS服务。

yum install openssl-devel -y

mkdir -p /home/root/tools         #创建工具目录

cd /home/root/tools        #进入工具目录

tar -zxvf ./nginx-1.13.4.tar.gz       #解压Nginx代码文件

cd ./nginx-1.13.4        #进入源代码目录

useradd nginx -s /sbin/nologin -M

#Do not create the user‘s home directory, even if the system wide setting from /etc/login.defs (CREATE_HOME)is set to yes.

#-M参数指定不要创建home目录,即使系统范围设置/etc/login.defs指定了yes。

#-s参数指定创建用户时设置用户的登录shell,这里指定为不可登录,作为服务进程账号使用。

./configure --user=nginx --group=nginx --prefix=/application/nginx-1.13.4/ --with-http_stub_status_module --with-http_ssl_module

make && make install

ln -s /application/nginx-1.13.4/ /application/nginx    #创建软连接

#当Nginx软件升级编译安装或带新版本后,删除原来的软连接,再重新建立新的软连接就好,如果程序中引用nginx路径的地方不需要做任何更改。

#--with-http_stub_status_module 激活状态信息

#--with-http_ssl_module    开启SSL加密支持

#Nginx的大部分模块都会默认编译到软件中,不需要单独指定编译参数。

(3)启动Nginx

/application/nginx/sbin/nginx -t        #启动的时候检查语法错误

nginx: the configuration file /application/nginx-1.13.4//conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.13.4//conf/nginx.conf test is successful

/application/nginx/sbin/nginx      #启动Nginx

lsof -i :80          #查看Nginx服务端口是否成功启动

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx   37232  root    6u  IPv4  92444      0t0  TCP *:http (LISTEN)

nginx   37233 nginx    6u  IPv4  92444      0t0  TCP *:http (LISTEN)

#也可以通过netstat命令查看:

netstat -tunlap | grep :80

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      37232/nginx

使用浏览器访问http://192.168.10.3,或者使用curl命令:

curl http://192.168.10.3

<!DOCTYPE html>

<html>

<head>

<title>Welcome to nginx!</title>

<style>

body {

width: 35em;

margin: 0 auto;

font-family: Tahoma, Verdana, Arial, sans-serif;

}

</style>

</head>

<body>

<h1>Welcome to nginx!</h1>

<p>If you see this page, the nginx web server is successfully installed and

working. Further configuration is required.</p>

<p>For online documentation and support please refer to

<a href="http://nginx.org/">nginx.org</a>.<br/>

Commercial support is available at

<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>

</body>

</html>

Nginx故障集锦:

(1)编译安装的时候遇到的错误:

./configure:error:SSL modules require the OpenSSL library.

You can either do not enable the modules,or install the OpenSSL library into the system,or build the OpenSSL library statically from the source with nginx by using --with-openssl=<path> option.

(2)Nginx启动疑难杂症:

--报错“nginx:[emerg]getpwnam("nginx")failed”:

因为没有对应的Nginx服务用户,执行useradd nginx -s /sbin/nologin -M 创建用户即可。

(3)编译安装PCRE软件的时候,gcc不全导致报错:

make all-am

make[1]:Entering directory `/home/root/tools/pcre-8.30`

CXX     pcrecpp.lo

libtool:compile:unrecognized option `-DHAVE_CONFIG_H`

libtool:compile:Try`libtool --help‘ for more infomation`

make[1]:***[pcrecpp.lo] error 1

make[1]:Leaving directory `/home/root/tools/pcre-8.30`

make:***[all] error 2

使用yum install gcc-c++ gcc -y安装

(4)查看Nginx的编译参数:

/application/nginx/sbin/nginx -V

nginx version: nginx/1.13.4

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: --user=nginx --group=nginx --prefix=/application/nginx-1.13.4/ --with-http_stub_status_module --with-http_ssl_module

(5)浏览器访问不了Nginx网页

需要在服务器端和客户端进行排查:

服务器端:

--首先关闭SELinux:

setforce 0                    #临时设置来临时生效

vim /etc/selinux/config       #更改SELinux的配置文件,下次开机时生效

SELINUX=disabled              #更改参数

:wq

--然后检查防火墙:

/etc/init/iptables stop       #设置防火墙是关闭状态

chkconfig iptables off        #取消开机自启

--再查看Nginx的端口是否开启:

netstat -tunlap | grep :80

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      37232/nginx

--查看Nginx进程是否存在:

ps -aux | grep nginx

root      37232  0.0  0.1  44764  1080 ?        Ss   04:13   0:00 nginx: master process /application/nginx/sbin/nginx

nginx     37233  0.0  0.1  45196  1984 ?        S    04:13   0:00 nginx: worker process

root      38013  0.0  0.0 103308   848 pts/0    S+   07:06   0:00 grep nginx

--可以查看Nginx的日志:

cat /application/nginx/logs/error.log

客户端:

--在客户端上ping服务器端IP地址:

ping -c3 192.168.10.3        #使用-c参数指定ping发送数据包的次数

PING 192.168.10.3 (192.168.10.3) 56(84) bytes of data.

64 bytes from 192.168.10.3: icmp_seq=1 ttl=64 time=0.036 ms

64 bytes from 192.168.10.3: icmp_seq=2 ttl=64 time=0.029 ms

64 bytes from 192.168.10.3: icmp_seq=3 ttl=64 time=0.025 ms

--- 192.168.10.3 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2001ms

rtt min/avg/max/mdev = 0.025/0.030/0.036/0.004 ms

检查客户端的telnet服务器端的IP地址,端口是否开启:

telnet 192.168.10.3

使用浏览器检查,访问测试。

时间: 2024-11-06 16:40:19

Nginx技术详解(1)的相关文章

Nginx技术详解(2)

部署一个Web站点: 服务器准备:node0 IP:192.168.10.3 进入/application/nginx/html/下把index.html文件删除: rm -rf /application/nginx/html/index.html 创建index.html文件,并追加文本: echo 'Hello,welcome to Nginx!' > /application/nginx/html/index.html     #创建并追加 cat /application/nginx/h

CDN技术详解及实现原理

CDN技术详解 一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同好. 第一章    引言    “第一公里”是指万维网流量向用户传送的第一个出口,是网站服务器接入互联网的链路所能提供的带宽.这个带宽决定了一个 网站能为用户提供的访问速度和并发访问量.如果业务繁忙,用户的访问数越多,拥塞越严重,网站会在最需要向用户提供服务时失去用户.(还有“中间一公里” 和

nginx服务器详解

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

实现高性能纠删码引擎 | 纠删码技术详解(下)

作者介绍: 徐祥曦,七牛云工程师,独立开发了多套高性能纠删码/再生码编码引擎.柳青,华中科技大学博士,研究方向为基于纠删码的分布式存储系统. 前言: 在上篇<如何选择纠删码编码引擎>中,我们简单了解了 Reed-Solomon Codes(RS 码)的编/解码过程,以及编码引擎的评判标准.但并没有就具体实现进行展开,本篇作为<纠删码技术详解>的下篇,我们将主要探讨工程实现的问题. 这里先简单提炼一下实现高性能纠删码引擎的要点:首先,根据编码理论将矩阵以及有限域的运算工程化,接下来主

Linux磁盘阵列技术详解(二)--raid 1创建

我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还是以一块硬盘的不同分区为例,实际工作中应该是不同的硬盘才对. 具体分区步骤不再赘述! 分区后结果如下图所示: ② 创建raid 1 mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sdc1 /dev/sdc2 /dev/sdc3 或者 mdadm -C -v /de

Protocol Buffer技术详解(语言规范)

Protocol Buffer技术详解(语言规范) 该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo.这样做的目的主要在于不仅可以保持Google文档的良好风格和系统性,同时再结合一些比较实用和通用的用例,这样就更加便于公司内部的培训,以及和广大网友的技术交流.需要说明的是,Blog的内容并非line by line的翻译,其中包含一些经验性总结,与此同时,对于一些不是非常常用的功能并未予以说明,有兴趣的开发者

红帽Linux故障定位技术详解与实例(2)

红帽Linux故障定位技术详解与实例(2) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 3.内核故障情形及处理 (1)内核panic panic是内

红帽Linux故障定位技术详解与实例(1)

红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 红帽Linux故障定位技术详解与实例是本文要介绍的内容,主要

红帽Linux故障定位技术详解与实例(3)

红帽Linux故障定位技术详解与实例(3) 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 5.用kdump工具内核故障定位实例 A) 部署Kdump 部署 kdump 收集故障信息的步骤如下: (1)设置好相关的内核启动参数 在 /boot/grub