前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Nginx结构全解析(21)

Nginx结构全解析(21)

原创
作者头像
陈不成i
修改2021-05-12 18:03:57
修改2021-05-12 18:03:57
6070
举报
文章被收录于专栏:ops技术分享ops技术分享

一.配置

配置文件结构

1.全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2.events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3.http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4.server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5.location块:配置请求的路由,以及各种页面的处理情况。

配置参数

  1. #使用nginx这个用户运行,更加安全,默认nobody
  2. user nginx;
  3. #pid文件位置
  4. pid logs/nginx.pid;
  5. #指定全局日志输出位置,notice是日志级别
  6. error_log logs/nginx.log notice;
  7. #开启的工作进程数量,和cpu核心数相同即可
  8. worker_processes auto;
  9. #工作进程绑定哪个cpu,或单个工作进程绑定到多个cpu,通常不用配置
  10. #worker_cpu_affinity 01 10;
  11. #这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)一样。
  12. #现在在linux 2.6内核下开启文件打开数为65535
  13. #最好根据测试数据来限定,超过承受能力会导致其它访问很卡,但若限定后,其它访问正常,多出的会禁止访问。
  14. worker_rlimit_nofile 65535;
  15. #每个work进程可以建立的最大的链接数
  16. # 并发限定总数是 worker_processes 和 worker_connections 的乘积
  17. # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 2 因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
  18. worker_connections 65535;
  19. #将日志加载到内存,一起写入日志文件。
  20. #max:最大条目数的,如果缓存被占满,采用 LRU 算法将描述符关闭。
  21. #inactive:设置存活时间,默认10s
  22. #min_uses:设置在 inactive 时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是 1 次
  23. #valid:设置检查频率,默认 60s
  24. open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
  25. events {
  26. epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
  27. use epoll;
  28. }
  29. http {
  30. #[日志格式]
  31. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  32. '$status $body_bytes_sent "$http_referer" "$request_time" '
  33. '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$content_type"'
  34. '" $request_body"';
  35. access_log /var/log/nginx/access.log main;
  36. error_log /var/log/nginx/error.log info;
  37. #由 ngx_http_rewrite_module 模块提供的。用来记录重写日志的。对于调试重写规则建议开启。
  38. #rewrite_log on;
  39. #[limit限制]
  40. #设置用于保存各种 key(比如当前连接数)的共享内存的参数。 5m 就是 5兆字节,这个值应该被设置的足够大以存储(32K*5) 32byte 状态或者(16K*5) 64byte 状态。
  41. limit_conn_zone $binary_remote_addr zone=addr:5m;
  42. #我们设置的值是 100,也就是说我们允许每一个 IP 地址最多同时打开有 100 个连接。
  43. limit_conn addr 50;
  44. #限速模块,前3M下载时不限速
  45. limit_rate_after 3m;
  46. #限速模块
  47. limit_rate 512k;
  48. #[基础设置]
  49. #禁用ssi
  50. ssi off;
  51. #禁用autoindex 模块
  52. autoindex off;
  53. #媒体类型,标准
  54. include mime.types;
  55. #默认文件类型,默认为text/plain
  56. default_type application/octet-stream;
  57. #隐藏版本号
  58. server_tokens off;
  59. #编码格式
  60. charset UTF-8;
  61. #[信息传输]
  62. #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。如果图片显示不正常把这个改成off。
  63. sendfile on;
  64. #必须在sendfile开启模式才有效,告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。
  65. tcp_nopush on;
  66. #必须在sendfile开启模式才有效告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
  67. tcp_nodelay on;
  68. #[超时设置,单位均为秒]
  69. #客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接,对于后端是php,可以低一些,因为php解析快,java的话要长一些,java解析慢
  70. keepalive_timeout 30;
  71. #设置请求头的超时时间。我们也可以把这个设置低些,如果超过这个时间没有发送任何数据,nginx将返回request time out的错误
  72. client_header_timeout 10;
  73. #设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没有发送任何数据,和上面一样的错误提示
  74. client_body_timeout 10;
  75. #响应客户端超时时间,服务端给客户端发送数据,如果客户端迟迟不接受没超过以下时间将断开连接
  76. send_timeout 10;
  77. #告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。
  78. reset_timedout_connection on;
  79. #[server_name控制]
  80. #保存服务器名字(server_name www.xx.com这种)的hash表,如果名字太长,就需要将如下值变大为64
  81. server_names_hash_bucket_size 64;
  82. #存储服务器名字的值大小,默认512kb,如果一个server对应多个域名,就要加大此值
  83. server_names_hash_max_size 512;
  84. #[提交缓存]
  85. #nginx 会将整个请求头都放在一个 buffer 里面,这个buffer 的大小通过配置项 client_header_buffer_size 来设置,如果用户的请求头太大,这个 buffer 装不下,那 nginx 就会重新分配一个新的更大的 buffer来装请求头,这个大 buffer 可以通过 large_client_header_buffers 来设置,这个 large_buffer 这一组 buffer,比如配置 4 8k,就是表示有四个 8k 大小的buffer 可以用。
  86. client_header_buffer_size 32k;
  87. #此指令规定了用于读取大型客户端请求头的缓冲区的最大数量和大小。 这些缓冲区仅在缺省缓冲区不足时按需分配。 当处理请求或连接转换到保持活动状态时,释放缓冲区。如下例子:
  88. large_client_header_buffers 4 32k;
  89. #此指令设置NGINX能处理的最大请求主体大小。 如果请求大于指定的大小,则NGINX发回HTTP 413(Request Entity too large)错误。如果在上传大文件,可以将此值设置大一些
  90. client_max_body_size 8m;
  91. #这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
  92. open_file_cache max=100000 inactive=20s;
  93. #这个是指多长时间检查一次缓存的有效信息。
  94. open_file_cache_valid 30s;
  95. #open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。
  96. open_file_cache_min_uses 2;
  97. #指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置
  98. open_file_cache_errors off;
  99. #[压缩方面]
  100. #开启页面压缩
  101. gzip on;
  102. #gzip压缩是要申请临时内存空间的,假设前提是压缩后大小是小于等于压缩前的。例如,如果原始文件大小为10K,那么它超过了8K,所以分配的内存是8 * 2 = 16K;再例如,原始文件大小为18K,很明显16K也是不够的,那么按照 8 * 2 * 2 = 32K的大小申请内存。如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
  103. gzip_buffers 2 8k;
  104. #进行压缩的原始文件的最小大小值,也就是说如果原始文件小于1K,那么就不会进行压缩了
  105. gzip_min_length 1K;
  106. # 默认值: gzip_http_version 1.1(就是说对HTTP/1.1协议的请求才会进行gzip压缩)
  107. # 识别http的协议版本。由于早期的一些浏览器或者http客户端,可能不支持gzip自解压,用户就会看到乱码,所以做一些判断还是有必要的。
  108. # 注:99.99%的浏览器基本上都支持gzip解压了,所以可以不用设这个值,保持系统默认即可。
  109. # 假设我们使用的是默认值1.1,如果我们使用了proxy_pass进行反向代理,那么nginx和后端的upstream server之间是用HTTP/1.0协议通信的,如果我们使用nginx通过反向代理做Cache Server,而且前端的nginx没有开启gzip,同时,我们后端的nginx上没有设置gzip_http_version为1.0,那么Cache的url将不会进行gzip压缩
  110. gzip_http_version 1.1;
  111. # 默认值:1(建议选择为4)
  112. # gzip压缩比/压缩级别,压缩级别 1-9,级别越高压缩率越大,当然压缩时间也就越长(传输快但比较消耗cpu)。
  113. gzip_comp_level 5;
  114. #需要进行gzip压缩的Content-Type的Header的类型。建议js、text、css、xml、json都要进行压缩;图片就没必要了,gif、jpge文件已经压缩得很好了,就算再压,效果也不好,而且还耗费cpu。
  115. gzip_types text/HTML text/plain application/x-javascript text/css application/xml;
  116. # 禁用IE6的gzip压缩,又是因为杯具的IE6。当然,IE6目前依然广泛的存在,所以这里你也可以设置为“MSIE [1-5].”
  117. # IE6的某些版本对gzip的压缩支持很不好,会造成页面的假死,今天产品的同学就测试出了这个问题后来调试后,发现是对img进行gzip后造成IE6的假死,把对img的gzip压缩去掉后就正常了为了确保其它的IE6版本不出问题,所以建议加上gzip_disable的设置
  118. gzip_disable "msie6";
  119. #[--压缩--]
  120. # 默认值:off
  121. # Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含"Via"的 header头。
  122. #off - 关闭所有的代理结果数据的压缩
  123. #expired - 启用压缩,如果header头中包含 "Expires" 头信息
  124. #no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
  125. #no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
  126. #private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息
  127. #no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息
  128. #no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息
  129. #auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息
  130. #any - 无条件启用压缩
  131. gzip_proxied any;
  132. #尽量发送压缩过的静态文件
  133. gzip_static on;
  134. server { #主机字段
  135. listen 80; #监听端口
  136. server_name www.zjswdlt.cn; #域名
  137. location / {
  138. root html; #页面所在目录
  139. index index.html index.htm index.php; #首页文件
  140. }
  141. #error_page 404 /404.html; #404页面
  142. # redirect server error pages to the static page /50x.html
  143. #
  144. error_page 500 502 503 504 /50x.html;
  145. location = /50x.html {
  146. root html;
  147. }
  148. location ~ /\.ht { #禁止访问htxx文件
  149. deny all;
  150. }
  151. }
  152. }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.配置
    • 配置文件结构
    • 配置参数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档