nginx的实践手册

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangjianno2/article/details/75201065
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应用之间可以约定用任何自定义头来传递这个信息。

学习资料参考于:

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/
}


猜你喜欢

转载自blog.csdn.net/wangjianno2/article/details/75201065