• 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;
    }

  • 相关阅读:
    对《软件工程》这门课的总结
    结对编程项目---四则运算
    PSP记录个人项目耗时情况
    代码复审
    是否需要有代码规范
    四则运算的实现(C++)重做
    四则运算器的实现
    学习进度总结
    通过阅读教材,所得的不懂的问题
    自我介绍
  • 原文地址:https://www.cnblogs.com/web424/p/11055246.html
Copyright © 2020-2023  润新知