设为首页 收藏本站
查看: 1334|回复: 0

[经验分享] nginx-linux学习

[复制链接]

尚未签到

发表于 2018-11-15 09:37:41 | 显示全部楼层 |阅读模式
  一、简介
  Nginx (读作"engine X") 由Igor Sysoev(俄罗斯)于2005年编写,是一个免费、开源、高性能的HTTP服务器和反向代理,也可以作为一个IMAP/POP3代理服务器。根据 Netcraft 的 March 2014 WebServer Survey, 现在全世界23%的网站使用Nginx,而Apache占54.68%。Nginx因为稳定,丰富的功能集,配置简单,资源占用低而闻名世界。
  二、Nginx的特性和基础架构
  1、基本功能
  实现与服务静态文件(静态资源的web服务器),能缓存打开的文件标书费
  反向代理服务器,支持缓存、负载均衡、健康状态检测
  支持FastCGI
  模块化机制,非DOS机制,支持多种过滤器,如gzip,ssl和用来完成图形大小调整的图像模块
  支持SSL
  2.扩展功能
  基于名称和IP做虚拟主机
  支持keepalive
  支持平滑配置更新和程序版本升级
  定制访问日志,支持使用日志缓存以提高性能
  支持URL rewrite
  支持路径别名
  支持基于IP和用户的认证
  支持速率限制,并发数限制等
  3.nginx的基本架构
  一个master,生成一个或多个worker
  事件驱动:kqueue,epoll,/dev/poll
  消息通知:select poll rt rignals
  支持sendfile,sendfile64
  支持mmap
  三、nginx的配置文件详解
  配置参数需要以分号结尾,语法格式如下
  参数名  值1 [值2....];
  配置参数中还支持使用变量
  支持使用模块内置变量
  用户自定义变量:set var_name value
  Nginx基本核心配置的类别
  用于调试、定位问题
  正常运行的必备配置
  优化性能的配置
  事件类的配置
  1.正常运行的必备配置
  ①、user username[groupname]
  以那个用户身份运行,可以在配置文件中指定,如果没有指定则以编译时的用户为运行用户
  ②、pid/path/to/pidfile_name
  指定nginx的pid文件
  ③、worker_rlimit_nofile#
  指定一个worker进程所能打开的最大句柄数
  ④、worker_rlimit_sigpending#
  设定每个用户能够发往worker进程的信息的数量
  2.优化性能相关的配置
  ①、worker_procrsses #
  worker进程的个数,通常其数值应该为cpu的物理核心数减1或2
  ②、worker_cpu_affinitycpumask .....
  用来绑定cpu的,比如
  worker_processes    4;
  worker_cpu_affinity 0001 00100100 1000;
  ③、ssl_engine device
  在存在ssl硬件加速器的服务器上,指定所使用的ssl硬件加速设备
  ④、timer_resolution t
  每次内核事件调用返回时,都会使用gettimeday()来更新nginx缓存时钟,timer_resloution用来定义每隔多久才会由gettimeday()更新一次缓存时钟,x86-64系统上,gettimeday()代价已经很小,可以忽略此配置
  ⑤、worker_priority nice
  -20到19之间的整数值,数值越小越优先被调用
  3.跟事件相关的配置
  ①、accept_mutex on|off
  是否打开nginx的负载均衡锁,此锁能够让多个worker轮流地、序列化的与新的客户端请求建立连接;而通常当一个worker进程的负载达到其上限的7/8,master就尽可能不将请求掉地至此worker
  ②、lock_file /path/to/lock_file
  锁文件的位置
  ③、accept_mutex_delay #ms
  使用accept锁以后,只有一个worker能取得锁,一个worker进程为取得accept锁的等待市场,即用户建立等待的时间,如果某worker进程在某次试图取得锁时失败了,则至少要等#ms才能再一次请求锁
  ④、multi_accept on|off
  是否允许一次性地响应多个用户请求,默认为off
  ⑤、use [epoll|rtsig|select|poll]
  指定使用的模型,建议让nginx自动选择
  ⑥、worker_commections #
  每个worker能够并发响应的最大请求数,如果为代理服务器的话,worker_rlimit_nofile=worker_commections*2
  4.用于调试、定位问题:只在调试nginx时使用
  ①、daemon [on|off]
  关闭提供守护进程的模式,是否让nignx运行于后台;调试时应该为off,使得所有信息直接输出在控制台上,默认为on
  ②、master_process on|off
  是否已master/worker模式运行nginx,默认为on,调试时可以设置为off以方便追踪
  ③、error_log /path/to/error_log level
  错误日志文件及其级别,调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能,通常默认为error级别
  5.跟内存及磁盘资源分配相关
  ①、client_body_in_file_only on|clean|off
  是否将请求包体存储在磁盘中,不为off时,即时包体为0,也要存储在硬盘上,如果为on,请求结束后包体文件不会被删除,clean表示删除
  ②、client_body_in_single_buffer on|off
  http的包体是否存储在内存buffer当中,默认为off
  ③、client_body_buffer_size
  nginx接受http包体的内存缓存区大小
  ④、client_body_temp_path dir-path[level1[level2[level3]]]
  定义http包体存放的临时目录,可以使用多级目录,level用来指定某一级目录的文件名的长度
  client_body_temp_path /var/tmp/client 1 2
  表示在/var/tmp/client创建16个一级子目录,在每个一级子目录创建256个二级子目录来存放缓存

  ⑤、client_header_buffer_size>  正常情况下接受用户请求的http报文header部分时分配的buffer大小,默认为1k
  ⑥、large_client_header_buffers numbersize
  存储超大http请求首部的内存buffer大小及个数

  ⑦、connection_pool_size>  nginx对于每个建立成功的tcp连接都会预先分配一个内存池,此处机用于设定此内存池的初始大小,默认为256

  ⑧、request_pool_size>  nginx对于每个处理每个请求时会预先分配一个内存池,此处机用于设定此内存池的初始大小,默认为4K
  四、nginx的http web功能
  必须使用虚拟主机来配置站点,每个虚拟主机使用一个server{}段来定义,非虚拟主机的配置和公共选项,需要定义在server之外,http之内
  1.server{}
  定义一个虚拟主机:nginx支持使用基于主机名或ip的虚拟主机
  2.listen
  liseten address [:port]
  liseten prot
  listen  unix:socket
  default_server:定义此server为http的默认的server,如果所有的server中任意没有任何一个使用此参数,那么第一个server为默认server
  rcvbuf=SIZE:接收缓冲大小
  sndbuf=SIZE:发送缓冲大小
  3.server_name[...]
  server_name可以跟多个主机名,名称可以使用通配符和正则表达式(通常以~开头):当nginx收到一个请求时,会取出去首部的server的值,而后跟众server_name进行比较:比较方式
  (1)先做精确匹配
  (2)左侧通配符匹配
  (3)右侧通配符匹配
  (4)正则表达式匹配
  4.server_name_hash_bucket_size 32|64|128
  为了实现快速主机查找,nginx使用hash表来保存主机名
  5.location [=|~ |~* |^~] uri {  ... }
  location @name { ... }
  功能:允许根据用户请求的URI来匹配指定的各location以进行访问匹配;匹配到时,将被location块中的配置所处理
  == 精确匹配
  ~:正则表达式模式匹配,匹配时区分字符大小写
  ~*:正则表达式模式匹配,匹配时忽略字符大小写
  ^~:只需要前半部分与uri匹配即可,不检查正则表达式
  匹配优先级:
  字符字面量最精确匹配、正则表达式索引(有多个匹配到时,由第一个匹配到的所处理)、安字符字面量
  五、文件路径定义
  1.root path
  设置web资源路径,用于指定请求的根文档目录,从根开始匹配
  root:root/URI
  2.alias path
  指定路径别名,只能用于location中,从最后一个/开始匹配
  alias: alias/
  3. index file ....
  定义默认页面,可以跟多个值,自左向右匹配
  4.error_pagecode ...[=[response]] URI
  当对于某个请求发回错误时,如果匹配上了error_page指令中设定的code,则从定向至新的URI中
  错误重定向
  5.try_filespath1 [path2 ... ] URI
  自左向右尝试读取所有path所指定路径,在第一个找到即停止并返回,如果path均不存在,则返回最后一个URI
  location ~* ^/document/(.*)${
  root /www/htdocs
  try_files $uri/docu/$1 /temp.html
  }
  http://www.wangfeng7399.com/documents/a.html
  http://www.wangfeng7399.com/docu/a.html
  http://www.wangfeng7399.com/temp.html
  六、网络连接相关的设置
  1.keepalive_timeout time
  保持连接的超时时长,默认为75s
  2.keepalive_requests n
  在一次长连接上允许承载的最大请求数
  3.keepalive_disable [msie6|asfari|none]
  对指定的浏览器禁止使用长连接
  4.tcp_nodelayon|off
  对keepalive连接是否使用tcp_nodelay选项
  5.client_header_timeout time
  读取http请求首部的超时时长
  6.client_body_timeout time
  请求http请求包体的超时时长
  7.save_timeout time
  发送响应的超时时长
  七、对客户端请求的限制
  1.limit_except method ... { ... }
  指定范围之外的其他的访问控制,只能用于location中

  2.client_max_body_size>  http请求包体的最大值,常用于限定客户端所能够请求的最大包体,根据请求首部中的Content-Length来检查,以避免无用的传输
  3.limit_ratespeed
  限制客户端每秒传输的字节数,默认为0,表示没有限制
  4.limit_rate_after time
  nginx向客户端发送响应报文时,如果时长超过了此处指定的时长,则后续的发送过程开始限速
  八、文件操作的优化
  1.aendfile on|off
  是否启用sendfile功能
  2.aio on|off
  是否启用aio功能
  3.open_file_cache max=N[incative=time]|off
  是否打开文件缓存功能
  max:用于缓存条目的最大值,允许打开的缓存条目最大数,当满两类以后将根据LRU(最小最少连接数)算法进行置换
  inactive:某缓存条目在指定时长内没有被访问过时,将自动被删除,通常默认为60s
  缓存的信息包括
  文件句柄、文件大小和上次修改的时间
  已经打开的目录结构
  没有找到或没有访问权限的信息
  4.open_file_cache_errorson|off
  是否缓存文件找不到或者没有权限访问等信息
  5.open_file_cache_min_use #
  在inactive指定的时长内被访问超过此处指定的次数时,不会被删除
  6.open_file_cache_valid time
  多长时间检查一次缓存中的额条目是否超出非活动时长,默认为60s
  九、对客户端请求的特殊处理
  1.ignore_invalid_headers on|off
  是否忽略不合法的http首部,默认为on,off意味着请求首部中出现不合规的首部将拒绝响应,只能用于server和http中,建议改为off
  2.log_not_found on|off
  用户访问的文件不存在时,是否将其记录到错误日志中
  3.resolveraddress
  指定nginx使用的dns服务器地址
  4.resolvertimeout
  指定DNS解析超时时长,默认为30s
  5.server_tokens on|off
  是否在错误页面中显示nginx的版本号
  十、http核心模块的内置变量
  1.$uri:当前请求的uri,不带参数
  2.$request_uri:请求的uri,带完整参数
  3.$host:http请求报文中host首部,如果请求中没有host首部,则以处理此请求的主机的著名代替
  4.$hostname:nginx服务运行所在主机的主机名
  5.$remote_addr:客户端ip
  6.$remote_port:客户端port
  7.$remote_user:使用用户认证时客户端用户输入的用户名
  8.$request_filename:用户请求中的URI经过本地root或alias转换后映射的本地的文件路径
  9.$request_method:请求方法
  10.$server_addr:服务器地址
  11.$server_name: 服务器名称
  12.$server_port: 服务器端口
  13.$server_protocol:服务器想客户端发送响应时的协议,如http/1.1 http/1.0
  14.$scheme: 在请求中使用的scheme映射协议本身的协议
  15.$http_HEADER:匹配请求报文中指定的HEADER  例如:$http_host匹配请求报文中的host首部
  16.$sent_http_HEADER:响应报文中指定的HERADER,例如:$http_content_type匹配相应报文中的content-type首部
  17.$document_root:当前请求映射到的root配置


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-635284-1-1.html 上篇帖子: Nginx-TimTech 下篇帖子: nginx-lnmp源码安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表