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;
}
nginx学习笔记2的更多相关文章
- Nginx学习笔记4 源码分析
		Nginx学习笔记(四) 源码分析 源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_ ... 
- Nginx学习笔记~目录索引
		回到占占推荐博客索引 前几天整理了<Docker的学习笔记索引>,受到了很多朋友的关注,今天把Nginx的文章也整理一下,以后将永久更新,像大叔之前的<EF文章系列>,< ... 
- nginx 学习笔记(2) nginx新手入门
		这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ... 
- Nginx学习笔记之加强篇
		在上一篇文章Nginx学习笔记之应用篇中,我们已经可以正式运行自己的网站了.但是在使用Nginx服务器时还需要注意几个问题: 1.Nginx服务器上配置的单个站点的并发量不超过1024 2.Nginx ... 
- Nginx学习笔记之应用篇
		Nginx服务器的安装请参考Nginx学习笔记之安装篇 关于Nginx配置文档的API在这里就不一一列出,现在我们来配置第一个Nginx架构实现负载均衡的网站. 1.打开IIS,配置如下站点 重复上述 ... 
- Nginx 学习笔记之安装篇
		在windows下安装Nginx其实非常简单,只需如下几个步骤: 1. 在Nginx官网下载相应版本的安装程序,上面有最新版.稳定版等各种版本,正式运营的项目建议下载最新的稳定版 2.将下载后的压缩包 ... 
- nginx学习笔记(一)
		agentzh 的 Nginx 教程 学习笔记 nginx的变量 Nginx 变量一旦创建,其变量名的可见范围就是整个 Nginx 配置,甚至可以跨越不同虚拟主机的 server 配置块, 例子如下 ... 
- Nginx学习笔记(六) 源码分析&启动过程
		Nginx的启动过程 主要介绍Nginx的启动过程,可以在/core/nginx.c中找到Nginx的主函数main(),那么就从这里开始分析Nginx的启动过程. 涉及到的基本函数 源码: /* * ... 
- Nginx学习笔记(三) Nginx基本数据结构
		Nginx基本数据结构 话说学习一种编程语言,例如C语言,我们首先学的也是数据结构,这是以后开发程序的关键.为了更好更方便的开发Nginx,Nginx自己实现了很多适合nginx的数据结构. Ngin ... 
- 【转】Nginx 学习笔记(十一)nginx下安装配置naxsi waf防火墙(附完整编译、配置)
		原文地址:http://f2ex.cn/nginx-installed-configuration-naxsi-waf/ Naxsi 是第三方 nginx 模块 ,它和 Modsecurity 都是开 ... 
随机推荐
- Golang Testing单元测试指南
			基础 可以通过 go test -h 查看帮助信息. 其基本形式是: go test [build/test flags] [packages] [build/test flags & tes ... 
- [笔记] Git 冲突处理
			这是一篇关于 git 解冲突的笔记,没有什么干货. TortoiseGit 小乌龟 通常情况下,会比较喜欢使用小乌龟解冲突,详见:git 使用 tortoisegit 解冲突 但部分复杂的场景,反而需 ... 
- 基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例
			Solar Spring Cloud为开发者提供了快速构建分布式系统中的一些常见工具,如分布式配置中心,服务发现与注册中心,智能路由,服务熔断及降级,消息总线,分布式追踪的解决方案等. 本次实战以模拟 ... 
- 使用 docker-compose 运行 MySQL
			使用 docker-compose 运行 MySQL 目录结构 . │ .env │ docker-compose.yml │ └─mysql ├─config │ my.cnf │ └─data m ... 
- SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错
			SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错 BP,试图创建一个新的vendor code, 角色是ZGM001, Grouping是G001, ... 
- swift(二)swift字符串和字符和逻辑运算
			/* 1.swift字符串和字符 2.构造字符串 3.字符串比较 4.数值运算 5.复制运算 6.关系运算 7.逻辑运算 8.区间运算 */ /* //数据 + 数据的处理 //字符信息+ 字符信息的 ... 
- python+openpyxl的excel的相关读写
			def test(): wb2 = openpyxl.Workbook() #创建一个excel对象 wb2.save("a.xlsx") #保存excel并命名为a.xlsx w ... 
- JS高阶---继承模式(借用构造函数继承+组合继承)
			(1)借用构造函数继承 案例如下: 验证: (2)组合继承 案例如下: 验证如下: 结果如右图所示 . . 
- idea快捷键的使用
			IntelliJ IDEA 问题解决:1.乱码,主要是快捷键的字样显示乱码 中文字体显示乱码? 2.菜单项等的字体太小,怎么能设置下? -------------------------------- ... 
- DNS解惑之基本概念(1)
			常见问题 1.域名对应的IP地址修改完要将近一天的时间才能有效果? DNS的数据库通常是在跑在DNS服务器的内存当中的,但是我们如果临时增加一条的话其实是写到了硬盘当中,当数据库服务刷新的时候新增的新 ... 
