Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由俄罗斯的程序设计师Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强。在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。
自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如京东、新浪、网易、腾讯、淘宝等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。
Nginx工作模式(转)
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
Nginx的模块从结构上分为核心模块、基础模块和第三方模块,HTTP模块、EVENT模块和MAIL模块等属于核心模块,HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块属于基本模块,而HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块属于第三方模块,用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。
Nginx的模块从功能上分为三类,分别是:
Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。handlers处理器模块一般只能有一个。
Filters (过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx 输出。
Proxies (代理类模块)。就是Nginx 的HTTP Upstream 之类的模块
在工作方式上,Nginx分为单工作进程和多工作进程两种模式。
在单工作进程模式下,除主进程外,还有一个工作进程,工作进程是单线程的;
在多工作进程模式下,每个工作进程包含多个线程。
Nginx默认为单工作进程模式。
Nginx的模块直接被编译进Nginx,因此属于静态编译方式。启动Nginx后,Nginx的模块被自动加载,不像在Apache一样,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载。在解析配置文件时,Nginx的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成。
如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。
Nginx 通过事件驱动相应多个用户,使用一个工作线程来响应多个不同的用户请求
prework 是一个进程响应一个用户请求
worker是一个线程响应一个用户请求
为此nginx适合于高并发的场景需求,并且nginx对静态内容响应较快,但是nginx不支持CGI
在应用是nginx时,nginx主要是工作在web的前端,实现反向代理
LNMP环境的搭建——Nginx
1.Nginx安装
所需软件包:nginx-1.8.0.tar.gz
tar zxf nginx-1.8.0.tar.gz
cd nginx-1.8.0 yum install pcre-devel openssl-devel -y ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module
make make install
vim /root/.bash_profile
source /root/.bash_profile
cd /usr/local/lnmp/nginx/sbin/ ./nginx -t ##检测 ./nginx ##服务开启脚本
curl -I localhost ##检测http协议提供程序
##开机启动##
vim /etc/rc.local
在最后加上nginx
nginx -s
nginx -h
2.屏蔽nginx版本
rm -rf /root/nginx-1.8.0 /usr/local/lnmp/nginx tar zxf nginx-1.8.0.tar.gz ##重新解压nginx源码包
vim /root/nginx-1.8.0/src/core/nginx.h ##伪装版本
将“nginx/”后面部分删除
vim /root/nginx-1.8.0/auto/cc/gcc ##关闭debug调式
将debug部分注释掉
cd nginx-1.8.0 ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module make make install
nginx -t ##检测nginx配置 nginx -s reload ##加载配置
useradd -s /sbin/nologin -d /usr/local/lnmp/nginx nginx
vim /usr/local/lnmp/nginx/conf/nginx.conf user nginx nginx; ##用户和组,可以只写用户 worker_processes 2; ##cpu个数,不能超过lscup
events { use epoll; ##nginx epoll 采用异步非阻塞模式 apache --select 同步阻塞机制 io复用模型类型 worker_connections 4096; ##连接数 }
3.开启https
将server这一段注释去掉,将cert.key改为cert.pem(注意要在{}内)
cd /etc/pki/tls/certs/ make cert.pem
cp cert.pem /usr/local/lnmp/nginx/conf/
nginx -t nginx -s reload
4.nginx 监控小插件
vim /usr/local/lnmp/nginx/conf/nginx.conf
增加以下内容(##/status 名字自定义):
nginx -t nginx -s reload
访问 ip/status
5.nginx 虚拟主机
在/usr/local/lnmp/nginx/conf/nginx.conf最后加上以下部分(注意后面“}”):
mkdir /web{1..2} echo www.linux.org > /web1/index.html echo www.unix.org > /web2/index.html nginx -t nginx -s reload
6.nginx 负载均衡套件
在server2和server3做以下工作:
yum install httpd -y cd /var/www/html/ echo server2/3.example.com > index.html
在/usr/local/lnmp/nginx/conf/nginx.conf最后加上以下部分(注意后面那个括号):
nginx -t nginx -s reload
访问www.linux.org 测试