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

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



 本文转自 棋帅小七 51CTO博客,原文链接:http://blog.51cto.com/xvjunjie/1955103

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
2月前
|
缓存 前端开发 JavaScript
tomcat核心技术+Nginx性能调优技术
而Tomcat的基本配置,每个配置项也基本上对应了Tomcat的组件结构,如果要用一张图来形象展现一下Tomcat组成的话
37 1
|
3月前
|
缓存 负载均衡 应用服务中间件
高性能网络编程技术 Nginx 的概念与实践
Nginx 是一款高性能、轻量级的Web服务器和反向代理服务器,它在网络编程技术领域中被广泛应用。本文将详细介绍Nginx的概念和实践,包括其核心原理、功能特点、优势和应用场景等方面。同时,还将深入探讨如何使用Nginx进行高性能网络编程,结合实际案例进行分析。
|
3月前
|
缓存 负载均衡 应用服务中间件
高性能网络编程技术 Nginx 的概念与实践
在当今互联网时代,高性能网络编程技术越来越受到重视。Nginx 作为一款高性能、高可靠性的 Web 服务器,拥有广泛的应用和优异的性能表现。本文将介绍 Nginx 的基本概念、架构以及实践技巧,帮助读者更好地理解和使用这一工具。
|
4月前
|
Java 应用服务中间件 数据库连接
太厉害!Redis+Nginx+设计模式+Spring全家桶+Dubbo技术精选合集
最近花了很长的时间去搜罗Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档。昨天也是终于全部整理好了,今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技能了,遇到哪方面的问题了 直接打开文档学一学就好了。不多bb了,直接上干货!
|
8月前
|
Java 应用服务中间件 数据库连接
太厉害!Redis+Nginx+设计模式+Spring全家桶+Dubbo技术精选合集
最近花了很长的时间去搜罗Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档。昨天也是终于全部整理好了,今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技能了,遇到哪方面的问题了 直接打开文档学一学就好了。不多bb了,直接上干货!
BATMJ技术实战之多线程+JVM+Nginx+Redis+SpringBoot(书籍赠送)
感谢各位的关注!!!!请看下面这就是小编免费赠送给大家和粉丝的福利哦 Java多线程编程核心实战(文档) 深入理解Java虚拟机:JVM实战(文档) 深入浅出Nginx实战(文档) Redis核心实战(文档) 深入浅出SpringBoot以及SpringBoot2.x(文档) 由于细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
|
存储 缓存 运维
技术应用:Nginx运维优化最佳实践(二)
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
技术应用:Nginx运维优化最佳实践(二)
|
缓存 负载均衡 应用服务中间件
万字详解Nginx技术
Nginx 是一个很强大的高性能 Web 和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx 是 Apache 服务不错的替代品. 这里为你揭开它的神秘面纱......
万字详解Nginx技术
|
缓存 负载均衡 应用服务中间件
Nginx - Web 缓存技术简述
Nginx - Web 缓存技术简述
285 0
|
弹性计算 应用服务中间件 Linux
基于ECS弹性服务,Dokcer容器技术部署Nginx服务
如何基于ECS弹性服务,Dokcer容器技术部署Nginx服务?
504 0
基于ECS弹性服务,Dokcer容器技术部署Nginx服务