nginx学习笔记2
nginx基础配置
一、nginx常用命令
nginx -s reload:在nginx已经启动的情况下重新加载配置文件(平滑重启)
nginx -s reopen:重新打开日志文件
nginx -c /特定目录/nginx.conf:以特定目录下的配置文件启动nginx
nginx -t:检测当前配置文件是否正确
nginx -t -c /特定目录/nginx.conf:检测特定目录下的nginx配置文件是否正确
nginx -v:显示版本信息
nginx -V:显示版本信息和编译选项
二、nginx文件结构
... #main块
events { #events块
...
}
http #http块
{
server #server块
{
location [PATTERN] #location块
{
...
}
}
}
main块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
server块:配置虚拟主机的相关参数,一个http中可以有多个server。
location块:配置请求的路由,以及各种页面的处理情况。
三、常用配置指令
1.默认配置指令
worker_processes:配置nginx的工作进程数,一般设为CPU总核数或者总核数的两倍
worker_connections:配置nginx允许单个进程并发连接的最大请求数
include:用于引入配置文件
default_type:设置默认文件类型
sendfile:默认值为on,表示开启高效文件传输模式
keepalive_timeout:设置长连接超时时间,单位:秒
listen:监听端口,默认监听80端口
server_name:设置主机域名
root:设置主机站点根目录地址
index:指定默认索引文件
error_page:自定义错误页面
2.location的前缀配置
=:根据其后的指定模式进行精准匹配
~:使用正则表达式完成location的匹配,区分大小写
~*:使用正则表达式完成location的匹配,不区分大小写
^~:不使用正则表达式,完成以指定模式开头的location匹配
@:用于定义一个location块,且该块不能被外部客户端所访问,只能被nginx内部配置指令所访问
3.nginx内置变量
$args 请求中的参数;
$binary_remote_addr 远程地址的二进制表示
$body_bytes_sent 已发送的消息体字节数
$content_length HTTP请求信息里的"Content-Length"
$content_type 请求信息里的"Content-Type"
$document_root 针对当前请求的根路径设置值
$document_uri 与$uri相同
$host 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
$http_cookie cookie 信息
$http_referer 来源地址
$http_user_agent 客户端代理信息
$http_via 最后一个访问服务器的Ip地址
$http_x_forwarded_for 相当于网络访问路径。
$limit_rate 对连接速率的限制
$remote_addr 客户端地址
$remote_port 客户端端口号
$remote_user 客户端用户名,认证用
$request 用户请求信息
$request_body 用户请求主体
$request_body_file 发往后端的本地文件名称
$request_filename 当前请求的文件路径名
$request_method 请求的方法,比如"GET"、"POST"等
$request_uri 请求的URI,带参数
$server_addr 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费)
$server_name 请求到达的服务器名
$server_port 请求到达的服务器端口号
$server_protocol 请求的协议版本,"HTTP/1.0"或"HTTP/1.1"
$uri 请求的URI,可能和最初的值有不同,比如经过重定向之类的
四、权限控制指令
nginx中提供了两个用于配置访问权限控制的指令allow和deny。allow用于设置允许访问的权限;deny用于设置禁止访问的权限。在使用时,权限指令后只需跟上允许或禁止的IP、IP段或者all即可,其中all表示所有。
需要注意一下几点:
1.单个IP指定作用范围最小,all指定作用范围最大。
2.同一块下,若同时存在多个权限指令,则先出现的访问权限设置生效,并且会对后出现的设置进行覆盖,未覆盖的范围依然生效,否则以先出现的设置为准。
3.当多个块中都出现了权限设置指令,则内层块中的权限级别要比外层块中的设置的权限级别高。
五、nginx反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
在nginx服务器中,反向代理的配置非常简单,最主要的指令是proxy_pass,用于设置后端服务器的地址。该地址中包括传输数据使用的协议、服务器主机名以及可选的URI资源等。
在nginx配置文件中,proxy_pass指令通常在location块中进行设置。
1.常用反向代理指令
proxy_set_header:在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息
proxy_connect_timeout:配置nginx与后端代理服务器尝试建立连接的超时时间
proxy_read_timeout:配置nginx向后端服务器组发出read请求后,等待响应的超时时间
proxy_send_timeout:配置nginx向后端服务器组发出write请求后,等待响应的超时时间
proxy_redirect:用于修改后端服务器返回的响应头中的location和Refresh
六、nginx负载均衡
负载均衡就是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。
1.nginx负载均衡配置方式
轮询方式:负载均衡默认设置方式,每个请求按照时间顺序逐一分配到不同的后端服务器进行处理,如果有服务器宕机,会自动剔除
权重方式:利用weight指定轮询的权重比例,与访问率成正比,用于后端服务器性能不均的情况
ip_hash方式:每个请求按访问IP的hash结果分配,这样就可以使每个访客固定访问一个后端服务器,可以解决session共享的问题
第三方模块:第三方模块采用fair时,按照每天服务器的响应时间来分配请求,响应时间短的优先分配;若第三方模块采用url_hash时,按照访问url的hash值来分配请求
2.常用状态参数
max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream指令定义的错误
fail_timeout:在经历了max_fails次失败后,暂停服务的时间。且在实际应用中max-fails一般与fail_timeout一起使用
backup:预留的备份机器
down:表示当前的server暂时不参与负载均衡
注意:在使用ip_hash方式处理负载均衡时,web服务器在负载均衡列表中的状态不能使用weight和backup设置
七、nginx缓存配置
1.http级别的缓存配置
##cache##
#跟后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_connect_timeout 500;
#连接成功后_等候后端服务器响应的时间_其实已经进入后端的排队之中等候处理
proxy_read_timeout 600;
#后端服务器数据回传时间_就是在规定时间内后端服务器必须传完所有数据
proxy_send_timeout 500;
#代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
proxy_buffer_size 128k;
#同上 告诉Nginx保存单个用的几个Buffer最大用多大空间
proxy_buffers 4 128k;
#如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
proxy_busy_buffers_size 256k;
#proxy缓存临时文件的大小
proxy_temp_file_write_size 128k;
#用于指定本地目录来缓冲较大的代理请求
proxy_temp_path /usr/local/nginx/temp;
#设置web缓存区名为cache_one,内存缓存空间大小为12000M,自动清除超过15天没有被访问过的缓存数据,硬盘缓存空间大小200g;levels=1:2代表缓存的目录结构为2级目录
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
2.在访问静态文件的location上添加缓存
#静态数据保存时效
location ~ \.html$ {
proxy_pass http://source.qingk.cn;
proxy_redirect off;
proxy_cache cache_one;
#此处的cache_one必须于上一步配置的缓存区域名称相同
proxy_cache_valid 200 304 12h;
proxy_cache_valid 301 302 1d;
proxy_cache_valid any 1m;
#不同的请求设置不同的缓存时效
proxy_cache_key $uri$is_args$args;
#生产缓存文件的key,通过4个string变量结合生成
expires 30d;
#其余类型的缓存时效为30天
proxy_set_header X-Forwarded-Proto $scheme;
}
3.清除缓存
该功能可以采用第三方模块ngx_cache_purge实现,需要安装该模块
缓存文件是根据proxy_cache_key这个指令生成的,所以找到对应的缓存文件,删除即可
location ~ /purge(/.*) {
#删除指定缓存区域cache_one的特定缓存文件$1$is_args$args
proxy_cache_purge cache_one $1$is_args$args;
#运行本机和10.0.0.1网段的机器访问,拒绝其它所有
allow 127.0.0.1;
allow 10.0.0.1/24;
deny all;
}