博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx基础
阅读量:6843 次
发布时间:2019-06-26

本文共 5997 字,大约阅读时间需要 19 分钟。

I/O模型:

一次I/O经过两个阶段:第一步:将数据从磁盘文件先加载至内核内存空间(缓冲区),等待数据准备完成,时间较长第二步:将数据从内核缓冲区复制到用户空间的进程的内存中,时间较短磁盘文件 -----> 内核空间 ----->用户空间I/O模型:同步/异步:关注的是消息通信机制 同步:synchronous,调用者等待被调用者返回消息,才能继续执行异步:asynchronous,被调用者通过状态,通知或回调机制主动通知调用者被调用者的运行状态 阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态阻塞:blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起非阻塞:nonblocking,指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成最终的调用结果返回之前,调用者不会被挂起

5种I/O模型:

同步阻塞:进程发起调用后,第一阶段数据从磁盘空间到内存空间的过程是阻塞的,进程会被挂起第二阶段,数据从内存空间进入进程内存空间时,也是阻塞的!整个过程一个进程只能响应一个请求同步非阻塞:进程发起调用后,第一阶段数据从磁盘空间到内存空间的过程中进程不用阻塞,但确需要不断向被调用者询问调用是否完成,第二阶段数据从内核内存空间到进程空间内存的时候,进程依然会阻塞I/O复用:进程发起调用后,会利用select函数进行监控,此时select[epoll]系统调用会阻塞等待调用完成[磁盘---内核内存]从而解放了进程,进程可以继续响应别的用户请求,当第一节阶段完成后,select调用结束,进程会最等待数据进入进程内存Nginx因为使用epoll这种系统调用做为底层的实现方式,当第一阶段进程发起系统调用后,会阻塞在epoll调用中而进程可以去响应其它的用户请求,当调用结束时,epoll会触发信号通知进程返回来等待数据进入进程空间!此外epoll支持的并发访问基本不受限制,所以Nginx可以支持更好的并发事件驱动:进程发起调用后,第一阶段数据从磁盘空间到内存空间的过程中进程不用阻塞,当数进入内核内存空间时,内核会触发一个信号通知进程回来等待数据进入进程空间!异步非阻塞--异步I/O:进程发起调用后,两个阶段都不需要阻塞,直接是在第二个阶段完成后,内核直接通知用户线程可以进行后续操作了

Nginx特性简介:

特性:模块化设计,较好的扩展性高可靠性支持热部署:不停机更新配置文件,升级版本,更换日志文件低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存event-driven[事件驱动],aio[异步I/O],mmap[内存映射],sendfile 基本功能:静态资源的web服务器http协议反向代理服务器pop3/imap4协议反向代理服务器FastCGI(LNMP),uWSGI(python)等协议模块化(非DSO)-如zip,SSL模

报文响应码:

1XX:信息性状态码()      100:请求继续 101:转换协议     2XX:成功状态码      200:OK 请求没问题,资源存在!201:服务器接收并且保存     3XX:重定向状态码       301:永久重定向,在响应报文中使用首部“localtion:URL值”,指定资源现在所处的位置       302:临时重定向在响应报文中使用首部“localtion:URL值”指定临时资源位置       304:没修改这个资源可以使用缓存,条件式请求中使用     4XX:客户端错误       401:认证       403:拒绝访问,请求被服务器拒绝       404:NOT Found,服务器无法找到请求的URL       405:不允许使用此方法请求相应的URL     5XX:服务器类的错误       500:服务器内部错误:       502:代理服务器从上游收到了一条伪相应       503:服务器此时无法提供服务,但将来可能可可用

Nginx安装:

epel源中有Nginx安装包Nginx启动方式:方式1:Nginx:默认为启动nginx  -h 查看帮助选项  -V 查看版本和配置选项  -t 测试nginx语法错误-T 检测nginx语法并输出配置文件信息-q 检测过程中只显示错误信息  -c filename 指定配置文件(default: /etc/nginx/nginx.conf)  -s signal 发送信号给master进程,signal:stop, quit, reopen, reload示例: nginx -s stop  停止nginxnginx -s reload  加载配置文件  -g directives 在命令行中指明全局指令 使用nginx启动后,不支持systemctl控制方式2:centos7 --->systemctl start nginxcentos6 --->service nginx start

主配置文件介绍:

主配置文件:/etc/nginx/nginx.conf简要说明:1 所有配置要以";"结尾2 支持使用配置变量  内建变量:由Nginx模块引入,可直接引用  自定义变量:由用户使用set命令定义         set variable_name value;  引用变量:$variable_name主配置文件分块:main block {    主配置段}http {    http块}mail {    邮件模块}stream {    stream模块}

Nginx编译安装:

创建用户和组:groupadd -r nginxuseradd -r -g nginx -s /sbin/nologin nginx准备开发环境:    首先配置yum源然后安装:        yum groupinstall Development tools        yum groupinstall "Server Platform Development"        yum install pcre-devel        yum install openssl-devel        yum install zlib[devel]准备nginx源码包组,解压及编译:    tar xf nginx-1.14.0.tar.gz    cd nginx-1.14.0./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/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/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --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=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcremake && make install 创建目录:mkdir /var/tmp/nginx根据你自己指定的文件存放目录来创建!准备语法高亮:1 再家目录下创建 mkdir .vim/syntax2 再网上或者官网上找一个 nginx.vim文件,放在这个目录中3 然后cd到父目录中,创建一个  filetype.vim文件au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/conf/* if &ft == '' |  setfiletype nginx | endif 4 配置nginx脚本文件,因为文字太多这里就不附送脚本文件内容1 vim /etc/rc.d/init.d/nginx把脚本文件复制进去2 chmod +x nginx3 chkconfig --add nginx4 service nginx start启动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 表示把指定模块编译进--with-http_v2_module --支持http2.0版本--with-file-aio --异步ai--with-threads  ---支持线程--with-http_dav_module --withhttp_stub_status_module编译时如何更改nginx名称和版本:1 更改版本和名称:编辑源码包目录下:nginx-1.14.0/src/core/nginx.h更改版本:#define NGINX_VERSION      "10.6.10"更改nginx名称:#define NGINX_VER          "test/" NGINX_VERSION2 设置不在相应报文中显示真正的server编辑源码包目录下:/nginx-1.14.0/src/http/ngx_http_header_filter_module.c 更改项: static u_char ngx_http_server_string[] = "Server: testnginx" CRLF;  编译成功后测试访问: [root@apache122:26:02yum.repos.d]#curl -I 192.168.23.48HTTP/1.1 200 OKServer: test/10.6.10 -->server已经自定义Date: Sat, 10 Nov 2018 14:55:48 GMTContent-Type: text/htmlContent-Length: 20Last-Modified: Sat, 10 Nov 2018 14:55:24 GMTConnection: keep-aliveETag: "5be6f15c-14"Accept-Ranges: bytes使用隐藏server:server_tokens off; 测试结果:[root@apache122:55:48yum.repos.d]#curl -I 192.168.23.48HTTP/1.1 200 OKServer: testnginx --->已经改变成自定义Date: Sat, 10 Nov 2018 14:58:11 GMTContent-Type: text/htmlContent-Length: 20Last-Modified: Sat, 10 Nov 2018 14:55:24 GMTConnection: keep-aliveETag: "5be6f15c-14"Accept-Ranges: bytes

具体配置项介绍:

主语句块配置:Main 全局配置段常见的配置指令分类正常运行必备的配置优化性能相关的配置用于调试及定位问题相关的配置事件驱动相关的配置相关配置:1 user [username groupname]:以哪个用户的身份运行2 pid /path/to/pidfile_name:指定nginx的pid文件注意:1 进程结束pid文件自动删除2 所在路径应该对所有者开放写权限3 include file | mask  指明包含进来的其它配置文件片断4 load_module file:模块加载模块加载配置文件:/usr/share/nginx/modules/*.conf  指明要装载的动态模块路径: /usr/lib64/nginx/modules

转载于:https://blog.51cto.com/13878078/2318935

你可能感兴趣的文章