linux-nginx-1

Posted

tags:

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

nginx
机器环境:web主机192.168.2.18 centos7 测试主机192.168.2.29
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,具有占用内存少,并发能力强等优点。
官网:www.nginx.org
官方文档:http://nginx.org/en/docs/
中文文档:http://tengine.taobao.org/nginx_docs/cn/docs/
二、nginx的功能与特性
1、基本功能及特性
①作为静态资源的web服务器,能缓存打开的文件描述符;
②作为反向代理服务器,可做缓存、负载均衡;
③支持FastCGI
④模块化,非DSO机制(不能动态装卸载),过滤器gzip,SSI和图像大小调整等
⑤支持SSL
2、扩展功能:
①基于名称和IP做虚拟主机
②支持keepalive
③支持平滑配置更新或程序版本升级
④定制访问日志,支持使用日志缓存以提高性能
⑤支持url rewrite
⑥支持路径别名
⑦支持基于IP及用户的认证;
⑧支持速率限制,并发限制等;

三、nginx的进程模型
技术分享图片

◆nginx会运行一个主进程(master)和若干个由其fork出来的工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。连接请求就由为数不多的几个仅包含一个线程的worker进程以高效的回环(run-loop)机制进行处理,这样就不会引起很多的进程/线程上下文切换,从而降低了系统开销。每个线程内部对socket的管理方式是异步非阻塞的,使用epoll事件驱动机制来实现对大量socket描述符的管理,当描述符多的时候也只是会占用较多的内存而已,而不会造成占用大量cpu时间,这就是nginx并发能力强的原因。每个worker可以并行处理数千个的并发连接及请求。
每个worker进程是平等的,当有连接请求进来,交由哪个worker处理呢?master进程在建立需要listen的socket之后,fork出若干个worker进程,所有worker进程会抢互斥锁,抢到的的接受并处理连接请求,返回数据给客户端,最后断开连接,一个请求只在由一个worker处理。
worker数是可以设置的:如果负载以CPU密集型应用为主,如SSL或压缩应用,则worker数应与CPU数相同;如果负载以IO密集型为主,如响应大量内容给客户端,则worker数应该为CPU个数的1.5或2倍。
主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份运行。
主进程主要完成如下工作:
①读取并验正配置信息;
②创建、绑定及关闭套接字;
③启动、终止及维护worker进程的个数;
④无须中止服务而重新配置工作特性;
⑤控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本;
⑥重新打开日志文件,实现日志滚动;
⑦编译嵌入式perl脚本;
worker进程主要完成的任务包括:
①接收、传入并处理来自客户端的连接;
②提供反向代理及过滤功能;
③nginx任何能完成的其它任务;
cache loader进程主要完成的任务包括:
①检查缓存存储中的缓存对象;
②使用缓存元数据建立内存数据库;
cache manager进程的主要任务:
①缓存的失效及过期检验;

     四、nginx的模块和工作原理

nginx代码是由内核和一系列的模块组成, nginx内核主要用于提供Web Server的基本功能,以及Web和Mail反向代理的功能;还用于启用网络协议,创建必要的运行时环境以及确保不同的模块之间平滑地进行交互。不过,大多跟协议相关的功能和某应用特有的功能都是由nginx的模块实现的。
◆nginx模块从结构上分为:
核心模块
http模块
http标准模块
http可选模块
如 http_stub_status_module,http_ssl_module,http_gzip_static_module
邮件模块
第三方扩展模块
◆nginx模块从功能上分为:
handlers:此类模块直接处理请求,并生成内容
filter:此类模块对其它handlers生成的内容进行修改,最后由nginx输出
proxies:此类模块主要与后端服务如fastcgi进行交互,实现服务代理和负载均衡等功能

NGINX 1.9.11开始增加加载动态模块支持,从此不再需要替换nginx文件即可增加第三方扩展。目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块。
这里可以参考这篇文章https://www.cnblogs.com/tinywan/p/6965467.html
五、nginx安装
首先要先安装开发环境
yum -y groupinstall "Development Tools" "Server Platform Development"
nginx的rewrite模块和http核心模块会用到PCRE正则表达式语法,所以要安装pcre-devel
yum -y install gcc pcre-devel openssl-devel zlib-devel
我们这里采用yum安装,需要有epel源,配置epel源:
yum install epel-release.noarch
yum install nginx
补充一个编译安装的例子
首先创建nginx用户和组
groupadd nginx
useradd -r -s /sbin/nologin nginx
下载源码包
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar xf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure
--prefix=/usr/local/nginx
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx/nginx.pid
--lock-path=/var/lock/nginx.lock
--user=nginx #指定以什么身份运行worker进程
--group=nginx
--with-http_ssl_module
--with-http_flv_module #流媒体模块
--with-http_stub_status_module #监控运行状态的模块
--with-http_gzip_static_module
--http-client-body-temp-path=/usr/local/nginx/client #临时包体的暂存路径
--http-proxy-temp-path=/usr/local/nginx/proxy
--http-fastcgi-temp-path=/usr/local/nginx/fcgi
--http-uwsgi-temp-path=/usr/local/nginx/uwsgi
--http-scgi-temp-path=/usr/local/nginx/scgi
--with-pcre
make && make install

以上是关于linux-nginx-1的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器