企业网站建设及前期准备,网站服务器配置,远近互联网站建设,佳木斯建设局网站Nginx学习#xff1a;HTTP核心模块#xff08;十一#xff09;其它配置 剩下的一些配置指令没有大的归属#xff0c;不过也有一些是比较常见的#xff0c;这部分内容学习完成之后#xff0c;整个 http 模块相关的核心基础配置指令就全部学习完成了。今晚可以举杯庆祝一下… Nginx学习HTTP核心模块十一其它配置 剩下的一些配置指令没有大的归属不过也有一些是比较常见的这部分内容学习完成之后整个 http 模块相关的核心基础配置指令就全部学习完成了。今晚可以举杯庆祝一下了咱们远程干杯。但是还是要泼个冷水哦咱们的学习还有很长的路要走。如果你看过 Nginx 的官方文档就会知道仅仅是 HTTP 模块本身就还有一大堆核心模块之外的模块。 不过幸运的是这些模块的内容单个来看都不复杂因此咱们还要继续加油哦。先不想那么多赶紧进入今天的学习吧。 output_buffers 设置用于从磁盘读取响应的缓冲区的数量和大小。 output_buffers number size; 默认值是 2 32k1.9.5 版本之后是 1 32k。如果可能客户端数据的传输将被推迟直到 Nginx 至少具有要发送的数据的字节数的集合大小。零值禁止推迟数据传输。可能是读取大文件时关闭 sendfile 调整这个配置的参数从而提升服务器的吞吐率。一般很少用保持默认好了。 postpone_output 如果可能到客户端的数据将被推迟发送直到nginx需要发送的数据至少有size字节。 postpone_output size; 默认值是 1460 设置为0将关闭推迟发送的功能。它是在 Nginx 层面所作的与 TCP_CORK 类似的一个优化。一般很少用保持默认好了。 read_ahead 设置内核参数控制文件预读的数量。 read_ahead size; 默认 0 在 Linux 系统上因为使用的是 posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL) 系统调用所以 size 无用。在FreeBSD上访问的是 fcntl(O_READAHEAD,size) 系统调用。该系统调用在 FreeBSD 9.0-CURRENT 才被支持在 FreeBSD 7 上则需要打补丁。FreeBSD 也从来都没用过所以这个配置也就是了解一下就好了。 recursive_error_pages 允许或禁止 error_page 指令进行多次重定向。 recursive_error_pages on | off; 默认 off 允许的话重定向次数也有限制。而禁止此功能时当访问 error_page 指令重定向的错误页面出现任何问题时Nginx 将直接输出默认错误页面。 我们将 php 的 location 中的 500 错误指向的页面再次定义为 /err.php 这个 php 文件中抛出了一个异常这样的话它还是会报 500 错误。也就是说第一次访问 /err.php 之后error_page 会持续不断地继续再次跳到 /err.php 。如果保持默认的配置也就是 recursive_error_pages 为 off 那么直接就会出现默认的 Nginx 500 错误页面并且错误日志中没有特别的日志信息。而如果开启了这个配置那么错误日志中会显示 rewrite or internal redirection cycle while internally redirecting to /err.php while sending to client 这样的错误信息。 request_pool_size 默认值 4k 允许对每个请求的内存分配进行细调主要是影响内存池的存储情况。 request_pool_size size; 这条指令对性能影响很小通常情况下不应使用。 reset_timedout_connection 开启或关闭重置超时连接的功能。 reset_timedout_connection on | off; 默认值是 off 重置连接是这样执行的关闭套接字以前设置 SO_LINGER 选项的超时值为 0 那么当关闭套接字时 Nginx 向客户端发送 TCP RST并且释放此套接字占用的所有内存。这样可以避免某个已关闭的套接字长时间处于FIN_WAIT1状态并占用内存缓冲区。应该注意的是超时的长连接仍然是正常关闭。 说人话就是告诉 Nginx 关闭不响应的客户端连接这将会释放那个客户端所占有的内存空间。这个配置应该是和 send_timeout 有关个人猜测。不过不知道咋测试有用过的小伙伴可以评论区留言一起学习哈。 resolver resolver address ... [validtime] [ipv4on|off] [ipv6on|off] [status_zonezone]; 配置将后端服务器的名字解析成 ip 地址的名字服务器。啥意思呀其实就是指定一个 DNS 服务器地址比如我们常用的 114.114.114.114 或者是 8.8.8.8 。这个配置其实用得比较少它主要用于代理模块使用域名的时候指定域名的 DNS 解析服务器。但通常来说我们会直接 /etc/hosts 或者直接使用 ip 很少会使用这个配置。当然还有两种情况可能会用到它一是使用变量来配置反向代理或负载均衡时二是正向代理。 # resolver 8.8.8.8;
location /resolver_test {set $zy www.zyblog.com.cn;proxy_pass http://$zy/;
} 自定义变量的内容我们还没有学但是这里也可以看出我们自定义了一个 $zy 变量然后让 proxy_pass 指向这个 $zy 。变量里面是一个外网的域名也是可以打开的但是在 resolver 没有配置的情况下你直接测试会发现报 500 错误了。错误日志的内容是 no resolver defined to resolve www.zyblog.com.cn 。 现在打开上面测试代码中的注释再次访问就会发现可以正常访问了。正向代理的内容我们后面会学习到。 resolver 可以配置多个以轮询的方式发送请求到多台 DNS 服务器。valid 参数指定缓存时间status_zone 允许收集指定区域中请求和响应的 DNS 服务器统计信息不过这个参数是商业版的 Nginx 才支持的。 resolver_timeout 为名字解析设置超时。 resolver_timeout time; 和 resolver 一起的默认值是 30s 。 satisfy Nginx 进行访问限制的有 ngx_http_access_module 模块和 ngx_http_auth_basic_module 模块。 satisfy all | any; 默认值是 all 表示只有当两个模块的所有限制条件(写入配置的)都授权访问时允许请求访问。设置成 any 时表示如果当任意模块的任意限制条件授权访问时允许请求访问。具体的内容我们将在后面学习访问及权限控制模块时再进行详细的测试。与后续的 access、 auth_basic、auth_request 有关。 send_timeout 设置向客户端传输响应的超时。 send_timeout time; 超时仅指两次相邻写操作之间的时间间隔而非整个响应的传输时间。如果客户端在这段时间中没有收到任何数据连接将关闭。 subrequest_output_buffer_size 设置用于存储子请求的响应体的缓冲区大小。 subrequest_output_buffer_size size; 默认值是 4k 或 8k 默认情况下缓冲区大小等于一个内存页。这是 4K 或 8K 取决于平台。然而它可以变得更小。该指令仅适用于响应体保存到内存中的子请求。例如此类子请求由 SSI 创建。 tcp_nodelay 开启或关闭 Nginx 使用 TCP_NODELAY 选项的功能。 tcp_nodelay on | off; 默认 on 这个选项仅在将连接转变为长连接的时候才被启用在upstream发送响应到客户端时也会启用。 tcp_nopush 开启或者关闭 Nginx 在 FreeBSD 上使用 TCP_NOPUSH 套接字选项 在 Linux 上使用 TCP_CORK 套接字选项。 tcp_nopush on | off; 默认值是 off 选项仅在使用 sendfile 的时候才开启。开启此选项允许 在 Linux 和 FreeBSD 4.* 上将响应头和正文的开始部分一起发送一次性发送整个文件 TCP 相关的知识小伙伴们可以自行查阅相关的资料。和 sendfile 配合使用类似外卖小哥不开启拿一个送一单。开启的话拿到全部的外卖放到外卖箱一起送。 variables_hash_bucket_size 设置变量哈希桶大小其默认值取决于处理器的缓存线长度。 variables_hash_bucket_size size; 默认 64 啥是哈希表为了快速处理静态的数据集合诸如虚拟主机名、 map指令的值、 MIME类型和请求头的字段名nginx使用了哈希表。后面我们学习相关的哈希表模块的时候再进行详细的学习。 variables_hash_max_size 设置变量哈希表的最大size(容量)。 variables_hash_max_size size; 默认值是 512 。同样在将来学习哈希表相关模块的时候再进行深入了解。 disable_symlinks 决定 Nginx 打开文件时如何处理符号链接。 disable_symlinks off; 啥是符号链接其实就是我们常说的软链接在 Linux 下使用 ln 命令在 Windows 底下的快捷方式。这个配置可以决定 Nginx 打开文件时如何处理符号链接包括以下几种方式 off 默认行为允许路径中出现符号链接不做检查。on 如果文件路径中任何组成部分中含有符号链接拒绝访问该文件。if_not_owner 如果文件路径中任何组成部分中含有符号链接且符号链接和链接目标的所有者不同拒绝访问该文件。frompart 当 Nginx 进行符号链接检查时(参数 on 和参数 if_not_owner )路径中所有部分默认都会被检查。而使用frompart 参数可以避免对路径开始部分进行符号链接检查而只检查后面的部分路径。如果某路径不是以指定值开始整个路径将被检查就如同没有指定这个参数一样。如果某路径与指定值完全匹配将不做检查。这个参数的值可以包含变量。 首先我们创建软连接的文件。 # /usr/local/nginx/html
mkdir llink
cd llink
ln -s /usr/local/nginx/html/aaa.html 1.html 正常情况下访问 /llink/1.html 是没有问题的那么我们先加一个 location 并将 disable_symlinks 打开。 location /llink/ {disable_symlinks on;
} 现在访问 /llink/1.html 将返回 403 错误不管怎么样只要是软连接都会无法访问。所以现在我们换成 if_not_owner 直接访问还是 403 别着急把目录和文件都改成 www 用户和用户组的也就是和 Nginx 相同的用户。 chown www.www -R llink/ 又可以访问了吧。最后我们再看看 frompart 参数的作用。将路径文件改回 root 用户查看访问返回 403 了接下来增加配置。 location /llink/ {disable_symlinks if_not_owner from$document_root$uri;
} 这样配置其实就是路径与指定值完全匹配了这样也不会做任何检查同样可以打开页面了。 disable_symlinks 配置的参数 on 和 if_not_owner 会带来处理开销。只在那些不支持打开目录查找文件的系统中使用这些参数需要工作进程有这些被检查目录的读权限。ngx_http_autoindex_module 模块ngx_http_random_index_module 模块和 ngx_http_dav_module 模块目前会忽略这条指令。 disable_symlinks on from$document_root; 这条指令只在有openat()和fstatat()接口的系统上可用。当然现在的FreeBSD、Linux和Solaris都支持这些接口。 总结 一口气又学了这么多配置指令。这篇文章可能是到目前为止关于配置指令介绍的最多的一篇文章了。而且有很多指令我还不知道咋测试这就要麻烦各位小伙伴如果有了解的同学随时评论哦。如果身边有大佬可以请教的也可以问问然后来教教我哈欢迎大家随时找我交流。 HTTP 核心部分的配置项完成了但是还有一块非常大的内容那就是 HTTP 核心模块中自带的那些变量。之前我们在学习的过程中就接触过一些也了解过一点。下篇文章我们就着重地看一下在 Nginx 中提供的那些变量都有什么用。 参考文档 http://nginx.org/en/docs/http/ngx_http_core_module.html