Nginx介绍
nginx
nginx是个轻量级、高性能的web服务。
nginx是一个免费的,开源的,高性能的http和反响代理服务,邮件代理服务和通用的tcp/udp代理服务。
nginx 是HTTP, SMTP, POP3和IMAP 协议的web服务和反代服务,带有高并发、高性能和低内存利用的特性。
nginx的功能
静态资源的web服务器
反向代理服务器,实现负载均衡,是为七层代理服务器
http协议反向代理服务器
pop3/imap4 协议反向代理服务器
FastCGI(lnmp),uWSGI(python) 等协议
模块化(非DSO ),如zip,SSL
nginx与web 服务相关的功能
虚拟主机(server)
支持 keep-alive 和管道连接
访问日志(支持基于日志缓冲提高其性能)
url rewirte
路径别名
基于IP及用户的访问控制
支持速率限制及并发数限制
重新配置和在线升级而无须中断客户的工作进程
Memcached的GET接口
nginx的特性
模块化设计
nginx采用高度模块化设计,使得具有较好的扩展性,Nginx的模块分为核心模块、邮件模块和第三方模块。
高可靠性
高可靠性是指服务可靠性。
Nginx采用一个主进程(master)和N个工作进程(worker)的工作模式,而worker进程才是真正复制相应用户请求的进程。
配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。
所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。
支持热部署
Nginx使用主进程和工作进程的机制,使得Nginx支持热部署,这个热部署包括不停止服务更新配置文件、更新日志文件、以及更新服务器程序版本,也称为平滑升级。
低内存消耗
Nginx对于内存的消耗是非常小的,特别是对于非活动连接。
Nginx对于非活动连接是指,当我们开启持久连接功能时,用户连接不再发送数据后就会立即转为非活动连接,直到持久连接超时时间到达才销毁。
高扩展性
Nginx 的设计具有扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。
因此,当对某一个模块修复 Bug 或进行升级时,可以专注于模块自身,无须在意其他。
Nginx支持磁盘异步I/O(AIO)、内存映射机制(MMAP)、事件驱动机制(Event-driven)、单线程N请求等等。
所以支持高并发请求解决C10K(并发连接10000)问题,而这些都是其他服务器无法支持的,
nginx程序架构
主要是master进程和worker进程
master/worker结构
一个master进程:
负责加载和分析配置文件
管理worker进程
平滑升级
一个或多个worker进程
处理并响应用户请求
缓存相关的进程:
cache loader:载入缓存对象
cache manager:管理缓存对象
nginx 模块
nginx 高度模块化,但其模块早期不支持DSO机制,1.9.11版本支持动态装载和卸载。
模块分类:
核心模块:
core module
标准模块:
HTTP模块:ngx_http_*
HTTP Core modules 默认功能
HTTP Optional modules 需编译时指定
Mail模块:
ngx_mail_*
Stream模块:
ngx_stream_*
第三方模块
nginx的功用
静态的web资源服务器
html,图片,js,css,txt等静态资源
结合FastCGI/uWSGI/SCGI 等协议反向代理动态资源请求
http/https 协议的反向代理
imap4/pop3 协议的反向代理
tcp/udp 协议的请求转发(反向代理)
nginx的安装
官方:
http://nginx.org/packages/centos/7/x86_64/RPMS
Fedora-EPEL:
https://mirrors.aliyun.com/epel/7/x86_64/
编译安装:
yum install pcre-devel openssl-devel zlib-devel
useradd -r nginx
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
make && make install
编译安装nginx 选项:
--prefix=/etc/nginx 安装路径
--sbin-path=/usr/sbin/nginx 指明nginx 程序文件安装路径
--conf-path=/etc/nginx/nginx.conf 主配置文件安装位置
--error-log-path=/var/log/nginx/error.log 错误日志文件安装位置
--http-log-path=/var/log/nginx/access.log 访问日志文件安装位置
--pid-path=/var/run/nginx.pid 指明pid 文件安装位置
--lock-path=/var/run/nginx.lock 锁文件安装位置
--http-client-body-temp-path=/var/cache/nginx/client_temp 客户端body 部分的临时文件存放路径,如果服务器允许客户端使用put 方法提交大数据时,临时存放的磁盘路径
--http-proxy-temp-path=/var/cache/nginx/proxy_temp 作为代理服务器,服务器响应报文的临时文件存放路径
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp 作为fastcgi 代理服务器,服务器响应报文的临时文件存放路径
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp作为uwsgi 代理服务器,服务器响应报文的临时文件存放路径
--http-scgi-temp-path=/var/cache/nginx/scgi_temp 作为scgi 反代服务器,服务器响应报文的临时文件存放路径
--user=nginx 指明以那个身份运行worker 进程,主控master进程一般由root 运行
--group=nginx
--with-http_ssl_module 表示把指定模块编译进来
nginx目录和命令
rpm -ql nginx(7
/etc/logrotate.d/nginx
/etc/nginx/
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx-1.10.2
/usr/share/licenses/nginx-1.10.2
/usr/share/nginx/html/
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/log/nginx
/etc/rc.d/init.d/nginx(6)
/etc/sysconfig/nginx(6)
命令:nginx
nginx — HTTP and reverse proxy server, mail proxy server
nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
nginx 默认我启动nginx,且不能与service和systemctl进行混用。
-?,-h 帮助
-v 显示版本
-V 显示版本和配置选项然后退出
-t 检查nginx 语法错误
-T 测试配置并显示退出
-q 在测试期间禁止显示非错误消息
-s signal 发送信号给master进程,signal可为:stop, quit,reopen, reload
-p prefix 设置前缀路径(default: /usr/share/nginx/)
-c filename 指定配置文件(default: /etc/nginx/nginx.conf)
-g directives 从配置文件中设置全局指令
命令:nginx-upgrade
nginx-upgrade - tool to upgrade nginx without any downtime
用法:nginx-upgrade
nginx优缺点
nginx的优点
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,Nginx单凭这点可利用的场合就远多于LVS了。
2、Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一,相反LVS对网络稳定性依赖比较大。
3、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。
3、可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。
4、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
5、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。
6、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可以考虑用其作为反向代理加速器。
7、Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了,不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃。
8、Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多。
9、抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
Nginx的缺点是:
1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点。
2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测,不支持Session的直接保持,但能通过ip_hash来解决。