http协议以及IO 模型:http协议:80/tcp 超文本传输协议html开发或标记的文本html:超文本标记语言、http协议MEMI:编码方案major/minorURL : scheme://server:port/path/to/source;
HTTP事物:request:<method> <URL> <version><header><entity-body>response:<version> <status> <reason phrase><header><body>应用层协议格式:文本:smp,http二进制:缓存服务器 memeachermethod:GET:从服务器获取一个资源HEAD:只从服务器获取响应首部(<version> <status> <响应短语>  <headers>这两行)POST:向服务器发行要处理的数据PUT:将请求的主体部分存储在服务器上(危险)DELETE:删除服务器上指定的文档TRACE:追踪请求到达服务器中间经过的代理服务器OPTIONS:请求服务器返回对指定资源支持的使用方法status:1xx:100-101,信息提示2xx:200-206,成功类的信息3xx:300-305,重定向类的状态码,301 永久重定向,302 临时重定向4xx:400-415:客户端错误5xx:500-505,服务器错误常用的状态码:200:成功响应 -- ok301:永久重定向 -- Moved Permanently302:临时重定向 -- Moved Temporarily304:本地有缓存,问服务器端,资源是否发生变化,服务器端资源未发生改变 -- Not Modified401:需要输入账号密码访问 Unauthorized403:请求别禁止Forbidden404:服务器无法找到客户端请求的资源, Not Found500:服务器内部错误 Intrenal Server Error502:代理服务器从后端服务器收到了一条伪响应,如无法连接到网关:Bad Gateway503:服务器不可用,临时服务器维护或过载,服务器无法处理请求504:网关超时首部的分类:通用首部:即可用在响应也可用在请求请求首部响应首部实体首部扩展首部通用首部:Date:报文的创建时间Connecion:连接方式Via:显示报文经过的中间节点Cache-Control:控制缓存Pragma:也是缓存相关请求首部:Accept:通过服务器自己可接受的媒体类型Accept—CharsetAccept-Ecoding:接受的编码格式,如gipAccept-LanguageClient-IPHost:请求的服务器名称和端口号Referer:包含当前正在请求的资源的上一级资源User-Agent:客户端代理(浏览器类型等)条件式请求首部:ExpectIF-Modified-Since:自从指定的时候之后,请求的资源是否修改IF-Unmodified-SinceIF-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的ETag不匹配IF-Match安全请求的首部:Authorization:向服务器发送认证信息,如账号密码Cookie:向服务器端发送cookieCookie2代理请求首部:Proxy-Authorization:向待服务器认证响应首部:信息性:Age:有效期限,响应持续时长Server:服务器类型 ,软件名称和版本协商首部:某资源有多种昂表示方法时使用Accept-Range:服务器可接受的请求范围类型Vary:服务器查看的其他首部列表安全响应首部:Set-Cookie:向客户端设置cookiewww.Authenticate:来自副武器的对客户端的质询认证表单实体首部:Allow:列出对此实体可使用的请求方法Location:告诉客户端真正实体位与何处Content-Encoding:内容编码模式Content-LanguageContent-Length:主体的长度Content-Location:实体真正所处的位置COntent-Type:主体的对象类型缓存相关的:ETag:实体的扩展标签Expires:实体的过期时间Last-Modified:最后一次修改的时间    web页面:多个资源URL:pv:page viewUV:基于cookie尽可能的快速打开页面方案:并行访问:支持的最大并发数 是 针对对单个域名做限制,所以很多时候,不同的资源 提供不同的域名。页面缓存:认证:基于IP认证:基于用户认证:basec认证digest认证资源认证:Alias:路径 别名DocumentRoot:url映射路径httpd:MPMprefork:worker:event: I/O类型:同步和异步:synchronous   asyncronous关注的是:消息通知机制(如何通知)同步:调用发出之后,不会立即返回,一旦返回,则返回的是最终结果异步:调用发出之后,被调用方立即返回消息,但返回的并非最终给结果;被调用者通过状态、通知机制等来通知调用者,或通过回调函数来处理结果。阻塞和非阻塞:block, nonblock关注的是:调用者等待被调用者返回调用结果时的状态(过程)阻塞:调用结果返回之前,调用者会被挂起,调用者只有在得到返回结果之后,才能继续。非阻塞:调用者在结果返回之前,不会被挂起,即调用者不会被阻塞。常用的IO 模型:阻塞式IO:一直等非阻塞式IO:数据在到用户空间时,一次又一次的查看,数据是否好了当数据进入用户空间,在往进程内存时,处于阻塞状态IO复用:select() poll() --- 效果一样的系统调用 (BSD,sysv风格)prefork, work就是基于select实现的,所以最多支持1024个请求并发还是被阻塞,只是阻塞留给了select,因为没有腾出干别的事,性能没有什么提高,只是可以接受新IO事件驱动IO:通知机制:1、水平触发通知,一直通知,直到处理2、边缘触发, 只通知一次event 是事件驱动IO异步IO:一个进程同一时刻只能处理一个IO一个web有网络IO 和 磁盘IOnginx:事件IO/边缘触发 ,异步IO, mmap,所以支持很好的并发能力                Nginx(web server, web server proxy)(俄罗斯人)Nginx:国内:Tengine:淘宝Registry:陌陌用libevent:高性能的网络库epoll():实现 事件驱动IOnginx特性:模块化设计,较好的扩展性,nginx不支持动态装卸在模块,Tengine支持动态装卸在高可靠:类似httpd,主控进程,工作线程master --> workermaster:worker:低内存消耗:一个线程响应多个请求,10000个keep-alive模式下的请求,仅需2.5MB内存支持热部署:配置甚至nginx版本更新,日志文件的滚动,不停机支持事件驱动支持AIO,异步io支持mmap:内存映射基本功能:静态资源的web服务器(类似httpd),能缓存打开的文件描述符支持的协议:http,smtp,pop3协议的反向代理缓存加速,负载均衡(反带实现)支持fscgi(fpm,LNMP),uWSGI(Python)模块化(非DSO) 过滤器zip,SSI及图像的大小调整支持SSL扩展功能:基于名称和IP的虚拟主机支持keepalive支持平滑升级定制访问日志,支持日志缓冲区提供日志缓存新能支持路径别名支持基于IP及用户的访问控制支持速率限制,支持并发限制正向代理:代理客户端,请求所有的服务器 -- 内部访问外部反向代理:代替客户端,访问某些服务器的某些资源 -- 外部访问内部缓存是基于 K-V 缓存的Nginx基本架构:一个master生成多个worker进程事件驱动,epoll(边缘触发) kquequ,/dev/poll复用器:select,poll,rt signal支持sendfile,sendfiled64支持mmap支持AIONginx工作模式:非阻塞,事件驱动,由一个master进程生成多个worker进程,每个worker响应n个请求worker * n (端口才65535)sendfile机制:nginx模块类型:核心模块:变准的http模块(standerd http modules):可选的模块:第三方模块:编译的时候,手动指定在何处安装方法:原码:编译安装制作好的程序:rpm包原码编译安装:安装pcre-devel,支持正则,以便url重写配置文件放在安装目录下(推荐),以便后期移植rpm及源码安装:# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=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 --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_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/fastcgi# make && make install配置文件:main配置段:全局配置event:定义event类型工作特性http{}:定义heep协议相关的配置nginx.org 查看文档主配置段的指令:正常运行的必备配置:1、user USRNAME [groupName]:指定运行work运行的用户和组(使用同一个身份,有别于httpd)user nginx nginx; 2、pid /path/to/pid_file:nginx守护进程的pid文件默认可能是编译的位置 、pid /var/run/nginx/nginx.pid3、work_rlimt_nofile #;指定所有work进程打开的最大文件句柄数性能优化相关的配置:1、worker_process #;worker进程的个数,通常少于物理核心数2、worker_cpu_affinity cpumask ...;cpu绑定,只是说,该进程绑定到了该核心上,自己使用自己的缓存,不被调到其他核心,但不是说其他进程不切进该cpu(如果一直霸占cpu,启动时就绑定,同时去掉cpu的中断功能,隔离出一个cpu处理其它进程)cpumask:0000 00010000 00100000 01000000 1000worker_cpu_affinity 00000001 00000010 00000100;3、timer_reslution计时器解析度,降低此值,可减少gettimeofday系统调用的次数4、work_priority number:指明worker进程的优先级nice -20 19优先级 100 139nice 数字越小优先级越大默认是以root启动,所以可以设置的事件相关的配置;1、accept_mutex (off |on)master调度用户请求至worker进程时使用的负载均衡锁,on表示能让多个worker轮流,序列化的去响应新请求2、lock_file file:accept_mutex用到的所文件路径3、use [epoll |rtsig | select | poll    ]指明使用的时间类型,建议nginx自行选择4、worker_connection:单个worker的最大并发链接数worker_connection 10240worker_process 3 3 * 10240 但是大于65535 就没用了用于调试,定位问题:--with-debug,编译的时候要编译进去1、daemon (off|on);是否以守护进程方式运行nginx,可以看到日志等信息,调试时 off2、master_process (off| on);是否以master-worker模型类运行nginx,调试时,可以设置为off,便于调试3、error_log /path/to/error_log level;日志记录位置 和 级别  ,可以本地,可以日志服务器等常用:nginx: worker_processesworker_connectionsworker_cpu_affinityworker_priority 新改动配置文件生效:nginx -s reloadstop,quit,reopenNginx作为服务器使用的配置:http {}:由nginx_http_core_module模块引入配置静态服务器配置框架:http {upstream {}server {} # 每个server类似httpd中的一个<VirtualHost ''>; 出现多次server {location URL{root 'path' :本地文件系统if ... {}}# 类似于httpd中的<Location> 用于定义UR与本地文件系统的映射关系,可以有多个}}注:与http相关的指令的配置,仅能在http,server,location,upstream,if 上下文,但有些指令仅能用于这5中的某些中配置指令:1、server{} :定义虚拟主机,基于IP,端口,域名server {listen 8080;server_name www.a.com;root '/vhost';}2、listen:指定监听的地址和端口3、server_name Name1 Name2 ...主机名,可以多个,可以使用正则表达式(~开头,表示使用正则)或通配符;匹配顺序:(1)、先精确匹配  www.a.comserver {server_name www.a.com;}server {server_name *.a.com;}(2)、左侧通配符匹配: *.a.comserver {server_name *.a.com;}server {server_name mail.*;}(3)、右侧通配符匹配;(4)、最后正则表达式匹配: ~^.*\.a\.com$(5)、default_server4、root:除了upstream,都可以使用设置资源路径映射,用于指明请求的url锁对应的资源所在文件系统上的其实路径5、location [=|~|~*|^~] url [...]location @name {...}功能:允许根据用户请求的url来匹配定义的各location;匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制功能。优先级:=, ^~, ~, ~*, 不带任何符号的location=:精确匹配检查location = / {root '/vhost'} 必须从根开始检查~:正则表达式模式检查,区分大小写, ~* :表示不区分字符大小写^~ : url的前半部分匹配,不支持正则,只匹配到url格式的path部分http://www.a.com/bbs/index.html ---> 匹配到第一个,获取的文件就在/vhost下
server {listen 8080;server_name www.a.com;location / {root '/vhost';}location /images/ {root '/vhost/images/';}location ~* \.php$ {fcgipass;}}6、alias path:路径映射,路径别名用于location配置段,注意:root表示路径为对应的location '/' URL;alias表示路径映射,即location指令后定义的URL是相对于alias所指明的路径而言。location /images/ {root '/vhost/web1/';}http://www.a.com/iamges/a.jpg ---> /vhost/web1/images/a.jpg
location /images/ {alias '/www/pictures/';}http://www.a.com/iamges/a.jpg ---> /www/pictures/a.jpg7、index file;默认主页面index index.html index.php; 从左往右。8、error_page code ...[=code] URL | @name根据http响应状态吗 来指明特用的错误页面。error_page    404 /404_customed.html (对应于location而言)[= code]:以指定的响应吗响应,而不是默认原来的响应,可以指定响应页面---- error_page 404 =200 /404_customed.html测试:/vhost/web1/404_customed.htmlserver {listen 8080;server_name www.a.com;location / {root '/vhost/web';error_page 404 =200 /404_customed.html}}9、基于IP的访问控制:http,server,location中allow all:deny :server {listen 8080;server_name www.a.com;location / {root '/vhost/web';error_page 404 =200 /404_customed.html;deny 192.168.112.111;}}10、基于用户的访问控制;    basic,digestauth_basic 'Only For Vip' # 一段说明auth_basic_user_file:账号密码文件 使用 htpasswd生成server {listen 8080;server_name www.a.com;location / {root '/vhost/web';error_page 404 =200 /404_customed.html;auth_basic 'Only For Vip' ;auth_basic_user_file /etc/nginx/.htpwsswd;}}11、ssl--实现https# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}12、stub_status {on|off}仅能用于location上下文中server {listen 8080;server_name www.a.com;location /status {stub_status onallow from 172.16.0.0/16deny all} }结果:Active connectionas:6    当前所有处于打开的链接数server acceptcs handled requests241 241 431--- 接受进来的链接--- 已经处理的链接--- 已经处理的请求(注意:持久连接)Reading:0 writing:1 Waiting 5reading :正在处于链接请求状态的链接数writing:请求已经接收完成,正处于请求或发送响应的过程中的链接数waiting:保持链接模式,且处于活动状态的链接数13、URL rewrite:URL重写,重定向url regex例如:rewrite ^/image/(.*\.jpg)$ /imgs/$1 breaak;www.a.com/iamges/a/b/1.jpg ---> www.a.com/imgs/a/b/1.jpgseo?flag:last:(多条规则的时候)此rewrite规则完成后,就不在被后面的write规则处理,由useragent重新对重写后的url发起新请求break:一旦此rewrit规则重写完成之后,发起新请求,且不会再被当前location中的热河rewrite规则检查redirect:以302响应吗返回新的url(临时重定向)permanent:以301响应吗,永久重定向location / {rewrite ^/bbs(.*)$  /forum/$1 break}14、if语法:if (conditon) {....}应用环境:server,locationcondition:1、变量名变量值为空串,或者以‘0’ 开始,则为false2、以变量为操作数构成的比较表达式可用 =, !=类似的比较操作符进行测试3、正则表达式的模式匹配操作~:区分大小写的模式匹配检查~*:不区分大小写!~和!~*:不进行正则匹配4、测试文件是否存在: -f, !-f5、测试指定的路径为目录的可能性 -d   !-d6、测试文件的存在性: -e  !-e7、检查文件是否有执行权限: -x  !-x例如:if ($http_user_agent ~* MSIE) {rewrite ^(.*)$  /msie/$1 break}15、防盗链:location ~*  \.(jpg|gif)$ {valid_referer none  blocked www.a.com  合法的引用者if ($invalid_referer) {rewrite ^/ http://www.a.con/403.html
}}16、定制访问日志格式;log_formatlog_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access.log  main;main是格式名17、网络连接相关的配置:1、keepalive_timeout  #;长连接的超时时长,默认75s2、keepalive_requeste #;在一个长连接上锁能够允许请求的最大资源数3、keepalive_disable  [msie6|safar1|none]对指定的useragent 禁用长连接4、tcp_modelay on|off是否对长连接使用tcp_modelay,响应延迟5、client_header_timeout #;读取http请求报文首部的超时时长、6、client_body_timeout #读取http请求报文的bdy部分的超时时长7、send_timeout #;发送响应报文的超时时长。18 fastcgi的相关配置:nginx:php启用为fpm模型http :php作为模块#location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}

转载于:https://www.cnblogs.com/JerryZao/p/9843475.html

I/O模型+Nginx基本配置相关推荐

  1. nginx模型概念和配置文件结构

    一. nginx模型概念: Nginx会按需同时运行多个进程: 一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程( ...

  2. Linux九阴真经之大伏魔拳残卷4 nginx(模型,安装配置,模块)

    I/O模型 1  .同步/异步:关注的是消息通信机制 (既被调用用者是否返回消息) 同步:synchronous,调用者等待被调用者返回消息,才能继续执行 (被调用者完成任务也不通知调用者,调用者需 ...

  3. Nginx架构模型及常用配置

    文章目录 一.Nginx简介 二.Nginx架构设计 2.1 Nginx模块化设计 2.2 Nginx多进程模型 2.3 Nginx的epoll模式 三. Nginx配置文件 四.Nginx日志 4. ...

  4. nginx技术(2)nginx的配置详解

    nginx的配置 1,启动nginx 1 2 3 4 5 6 7 [root@centos6 nginx-1.2.9]# /usr/sbin/nginx -c /etc/nginx/nginx.con ...

  5. Nginx在windows上安装 及 Nginx的配置及优化

    前言 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru 站 ...

  6. Nginx+tomcat配置集群

    2019独角兽企业重金招聘Python工程师标准>>> 开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供w ...

  7. 图文解说:Nginx+tomcat配置集群负载均衡

    图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用  作者:niumd Blog:http://ari.iteye ...

  8. Nginx基础配置实例配置实现

    配置的内容如下: ##全局块 begin## #配置允许运行Nginx工作进程的用户和用户组 user www; #配置运行Nginx进程生成的worker进程数 worker_processes 2 ...

  9. nginx 注释配置及详解

    前言 DMZ(Demilitarized Zone) 非军事区,生产环境 WEB 服务部署的区域,公司的架构为一台nginx 充当 load balance 服务,负载到两台 nginx 上面,反向代 ...

  10. nginx的工作原理与nginx的配置

    1.nginx的工作原理 nginx的模块直接被编译进nginx,因此属于静态编译方式. 启动nginx后,nginx的模块被自动加载,与Apache不一样,首先将模块编译为一个so文件,然后在配置文 ...

最新文章

  1. [软件工程]技术规格说明书
  2. VMWare不能安装64位操作系统原因探析
  3. activiti主要API对象
  4. 云计算开发技术,Python自动化运维开发实战三部分
  5. 前、中、后缀表达式概述及转换+栈的计算器原理及代码分析(含完整源码)
  6. matlab the installer cannot read,MATLAB安装 The installer cannot read the mwinstall.dll… | 学步园...
  7. LeetCode MySQL 1225. 报告系统状态的连续日期(date_sub + over)
  8. 大数据之-Hadoop3.x_MapReduce_Combiner案例---大数据之hadoop3.x工作笔记0119
  9. AD20更改PCB 2D视图的背景环境颜色
  10. 斯坦福发布最新NLP处理工具stanfordnlp体验
  11. javaweb零食商城系统设计与实现(ssm项目)(含论文和源码)
  12. 人人开源-后台前后端快速开发
  13. oracle 体系架构图
  14. K8S Pod配置进阶1 containers字段解释
  15. 操作系统P/V操作(V操作中的典型理解偏差)
  16. 高级数据结构——海量数据(位图,布隆过滤器)
  17. 网络空间安全未来就业前景和就业方向,看着六点
  18. 贝叶斯公式——假阳性问题
  19. tomcat--catalina
  20. 有什么免费软件可以替代几何画板?

热门文章

  1. Unity 工具 之 XChart UGUI 表格工具,轻松简单的帮你实现需要的数据图表形式,建议 Mark 一下
  2. 计算机网络原理(04741)课后习题答案
  3. (转)GB2312简体中文编码表
  4. 2022年电气试验考试试题模拟考试平台操作
  5. java在线编译器手机版_java编译器app_java编译器手机版_java编程-多特软件站安卓网...
  6. 基于布谷鸟搜索算法的无线传感器网络覆盖优化
  7. %3c大自然的语言%3e竺可桢题目,大自然的语言竺可桢阅读答案
  8. 王码86五笔使用技巧
  9. Gantt - attachEvent事件监听
  10. MATLAB曲线拟合函数