当前位置 : 主页 > 网络编程 > 其它编程 >

nginx的实践手册

来源:互联网 收集:自由互联 发布时间:2023-07-02
1.nginx的常用的配置指令nginx的配置是由简单指令和块指令组成。简单指令如Listen、server_name等,块指令如events、http、stream等。 1.nginx的常用的配置指令 nginx的配置是由简单指令和块指令组
1.nginx的常用的配置指令nginx的配置是由简单指令和块指令组成。简单指令如Listen、server_name等,块指令如events、http、stream等。 1.nginx的常用的配置指令 nginx的配置是由简单指令和块指令组成。简单指令如Listen、server_name等,块指令如events、http、stream等。 (1)access_log与error_log access_log可以定义日志输出的格式,而error_log不可以定义日志的输出格式。 (2)include指令 可以把其他配置文件中的内容引入到nginx的主配置文件nginx.conf中。 (3)keepalive_timeout 5 表示nginx这边保持与客户端连接的时长. (4)check interval=10000 rise=2 fall=3 timeout=3000 type=tcp default_down=false upstream的健康检查,健康检查的周期为10000ms,健康检查超时时间为3000ms,即认为3000ms下游还未返回,那么任务本次健康检查是失败的。rise=2表示,如果两次健康检查都是正常的,那么对应的下游被标记为up,fall=3表示连续三次健康健康失败,对应的下游被标记为down,也就是会被剔除。 (5)proxy_pass URL 设置Nginx作为Proxy将请求转发到的目的地址。proxy_pass指令后可以是具体url,也可以是upstream哦 (6)proxy_set_header Nginx作为Proxy将请求转发出去前,设置HTTP header。 (7)resolver address 设置DNS服务器的地址,用来解析域名的IP地址 (8)add_header name value 用来设置http response的响应头给浏览器 (9)proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for 将$proxy_add_x_forwarded_for的值,设置到X-Forwarded-For请求头中。 (10)location的特殊用法 使用格式为: location @name { ... } location @name { ... }不是用来匹配的请求的路径的,而是用来Nginx内部重定向的。例如在某个location中处理请求时,没有找到资源,那么需要向客户端返回一个提示页面。那么可以使用error_page 404 @name,则请求会直接到location @name { ... }中处理了。 2.Nginx中常见的内置变量 nginx中有一些内置的变量,可以在nginx的配置文件中直接使用,如下列举出一些常用的内置变量: $http_user_agent #客户端代理信息$request_method #请求的方法,比如get/post等;$scheme #所用的协议,比如http/https等$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1$host #优先级如下:HTTP请求行的主机名>请求头HOST字段>符合请求的服务器名 server_name$remote_addr #客户端的IP,如果用nginx做了多层代理了,那么remote_addr就是上一层代理的IP$remote_port #客户端的端口$request #原始请求url$http_COOKIE #客户端COOKIE信息$args #这个变量等于请求行中的参数,同$query_string$remote_user #已经经过Auth Basic Module验证的用户名。$request_uri #包含请求参数的原始URI,不包含主机名,如:"/foo/bar.php?arg=baz"$uri #不带请求参数的当前URI,$uri不包含主机名,如"/foo/bar.html"$document_uri #与$uri相同$server_name #就是虚机的server_name$proxy_add_x_forwarded_for #该变量等于nginx收到的请求的X-Forwarded-For请求头内容,加上$remote_addr。也就是将请求来源的IP追加到X-Forwarded-For请求头的尾部,并用逗号分开 3.HTTP协议的一些扩展头部 (1)X-Forwarded-For X-Forwarded-For是一个HTTP扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由Squid这个缓存代理软件引入,用来表示HTTP请求端真实 IP。如今它已经成为事实上的标准,被各大HTTP代理、负载均衡等转发服务广泛使用,并被写入RFC 7239(Forwarded HTTP Extension)标准之中。说白了,对于有多层代理的架构来说,X-Forwarded-For能够将浏览器IP以及各层代理的IP记录到X-Forwarded-For请求头中,供WEB应用来获取。 X-Forwarded-For 请求头格式非常简单,如下: X-Forwarded-For: client, proxy1, proxy2 (2)X-Real-IP X-Real-IP也是一个HTTP扩展头部字段。X-Real-IP通常被HTTP代理用来表示与它产生TCP连接的设备IP,这个设备可能是其他代理,也可能是真正的请求端。需要注意的是,X-Real-IP目前并不属于任何标准,代理和Web应用之间可以约定用任何自定义头来传递这个信息。 学习资料参考于: https://imququ.com/post/x-forwarded-for-header-in-http.html 4.nginx的最佳实践 (1)在实际安装部署Nginx时,要遵循按需安装模块的原则。需要某一个模块则安装,不需要则不要安装。因为每一个被安装的模块都可能会消耗资源,影响Nginx的性能。 (2)Nginx和Apache都是模块化的设计,但是二者的模块化管理有所有不用。Apache支持模块的“热插拔”,即Apache添加模块,只需要引入模块,然后重启Apache就行了。而Nginx添加模块需要重新编译。 (3)nginx的worker数量最好要与CPU的核数保持一致,并设置CPU亲和力。 (4)在生产环境中,当我们修改完nginx的配置后,可以使用/sbin/nginx -t来测试nginx的配置文件格式是否正确。 (5)nginx的中server内location的推荐配置 所以实际使用中,个人觉得至少有三个匹配规则定义,如下: #直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。#这里是直接转发给后端应用服务器了,也可以是一个静态首页# 第一个必选规则location = / { proxy_pass http://tomcat:8080/index}# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用location ^~ /static/ { root /webroot/static/;}location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/;}#第三个规则就是通用规则,用来转发动态请求到后端应用服务器#非静态文件请求就默认是动态请求,自己根据实际把握#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了location / { proxy_pass http://tomcat:8080/}
网友评论