Nginx介绍

Posted shenxm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx介绍相关的知识,希望对你有一定的参考价值。

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的安装

	官方:
		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来解决。

以上是关于Nginx介绍的主要内容,如果未能解决你的问题,请参考以下文章

nginx.conf 忽略了 nginx-ingress 配置映射片段

将 nginx rtmp 片段发送到 WebRTC

Python代码阅读(第41篇):矩阵转置

text 有用的nginx命令和片段

Python代码阅读(第40篇):通过两个列表生成字典

linux学习:Nginx--常见功能配置片段与优化-06