• Linux:Day28(下) Nginx web服务配置


    主配置段的指令:  # 标红的为常需要调整的参数

      正常运行的必备配置:

        1、user USERNAME [GROUPNAME]

          指定运行worker进程的用户和组;

          user nginx nginx;

        2、pid /path/to/pid_file;

          指定nginx守护进程的pid文件;

          pid /var/run/nginx/nginx.pid;

        3、worker_rlimit_nofile #;  number of file

          指定所有worker进程所能够打开的最大文件句柄数;

      性能优化相关的配置:

        1、worker_processes #;

          worker进程的个数:通常应该略少于CPU物理核心数;

        2、worker_cpu_affinity cpumask ...;

          优点:提升缓存的命令率;

          但无法避免context switch

          context switch:进程切换会产生CPU的不必要的消耗;

          cpumask:

            0000 0001  # 一共4颗CPU,如果后面掩码是1,表示该CPU被选中。

            0000 0010      

            0000 0100

            0000 1000

          worker_cpu_affinity 00000001 00000010 00000100;

        3、timer_resolution

          计时器解析度:降低此值,可减少gettimeofday()系统调用的次数;gettimeofday()用来获取时间,记录日志的时候能用到。

        4、worker_priority number;

          指明worker进程的nice值;

            nice取值范围:-20,19  # 默认情况下,每一个进程的nice值都是0

            对应优先级范围:100,139  # 数字越小,优先级越高,优先级越高越优先调度到CPU上运行。

      事件相关的配置:

        1、accept_mutex {off|on}

          mater调试用户请求至各worker进程时使用的负载均衡锁;on表示能让多个worker轮流地、序列化地去响应新请求;

        2、lock_file file;

          accept_mutex用到的锁文件

        3、use [epoll|rtsig|select|poll];

          指明使用的事件模型;建议让Nginx自行选择;

        4、worker_connections #;

          设定单个worker进程所能够处理的最大并发连接数量;

          worker_connetcions 10240;

      用于调试、定位问题:必须在编译的时候加上--with-debug,不然即使设置了下面指令也没用。

        1、daemon {on|off};

          是否以守护进程方式运行nginx;调试时应该设置为off,其它时间应为on。

        2、master_process {on|off};

          是否以mater/worker模型来运行nginx;调试时可以设置为off;

        3、error_log file [level]

            若要使用debug级别,需要在编译nginx时使用了--with-debug选项;

      总结:常需要进行调整的参数

        worker_process,worker_connetcions,worker_cpu_affinity,worker_priority

      新改动配置生效的方式:

        /usr/local/nginx/sbin/nginx -s reload  # nginx重新读取配置

          stop,quit,reopen

    Nginx作为web服务器时使用的配置:

      http { }:由ngx_http_core_module模块所引入;

      配置框架:

        http {

          upstream{

            location URL{

              root "/path/to/somedir";

              ....

            }  #类似于httpd中的<Locations>,用于定义URL与本地文件系统的映射关系;

            location URL{

              if...{...}

            }

          }

          server{...}  # 每个server类似于httpd中的一个<VirtualHost>

        }

        注意:与http相关的指令仅能够放置于http、server、location、upstream、if上下文,但有些指令仅应用于这5种上下文中的某些种;

       配置指令:

        1、server { }

          定义一个虚拟主机;

          server {
            listen 8080;
            server_name www.magedu.com;
            root "/vhosts/web1";
          }

        2、listen

          指定监听的地址和端口;

            listen address[:port];  #默认监听80端口

            listen port;

        3、server_name NAME [...];

          后可跟多个主机;名称还可以使用正则表达式(需要用~开头)或通配符;

            (1) 先做精确匹配检查;

            (2) 左侧通配符匹配检查;

            (3) 右侧通配符匹配检查;

            (4) 正则表达式匹配检查;

            (5) default_server;  #如果默认server没定义的话,将自上而下找第一个server

        4、root path;

          设置资源路径映射:用于指明请求的URL所对应的资源所在的文件系统上的起始路径;

        5、location [ = | ~ | ~* | ^~ ] uri { ... }

          location @name { ... }

          功能:允许根据用户请求的URI来匹配定义的各location;匹配到时,此请求将相应的location配置块中的配置所处理,例如做访问控制等功能;

          =:精确匹配检查;

          ~:正则表达式模式匹配检查,区分字符大小写;

          ~*:正则表达式模块匹配检查,不区分字符大小写;

          ^~:URI的前半部分匹配,不支持正则表达式;

          匹配的优先级:=、^~、~、~*、不带任何符号的location

        6、alias path;

          用于location配置段,定义路径别名

          注意:root指定的路径为对应location的根,即location的最左面“/"对应root路径的最右面。

          alias表示路径映射,即location最右面的"/”对应alias指定路径最右面的"/"

         7、index file;

          默认主页面;

            index index.php index.html; 

        8、error_page code [...] [=code] URI | @name

          根据http响应状态码来指明特用的错误页面;

          error_page 404 /404_customed.html

          [=code]:以指定的响应码进行响应,而不是默认的原来的响应码(error_page后面跟的那个响应码);

           error_page 404 =200 /404_custom.html;

        9、基于IP的访问控制(执行顺序自上而下)

          allow IP/Netowork;

          deny IP/Network;

        10、基于用户的访问控制

          auth_basic "STRING"   # 一般用来说明为什么要做认证,内容没有要求

          auth_basic_user_file  /PATH/TO/PASSWORD_FILE  # 指明用户名密码文件位置

            账号密码文件建议使用htpasswd来创建;

        11、https服务

          生成私钥,生成证书签署请求,并获得证书;

        12、stub_status {on|off}

          仅能用于location上下文

          location /status {    # /status并不是固定的,可以填写任何路径,如/manage

            stub_status on;    # 只要启用了stub_status就需要指定root了,这个页面估计在特定位置

          }

          结果示例:

          Active connections: 2   # 当前所有处于打开状态的连接数;

          server accepts handled requests

           40 40 43             # 已经接受的连接、已经处理过的连接、已经处理过的请求;在保持连接下,请求数可能多于连接数;

          Reading: 0 Writing: 1 Waiting: 1  

            Reading表示正处理接收请求状态的连接数;

            Writing:请求已经接收完成,正处于处理请求或发送响应的过程中的连接数;

            Waiting:保持连接模式,且处于活动状态的连接数;

        13、rewrite regex replacement flag;

          例如:rewrite ^/images/(.*.jpg)$ /imgs/$1 break;

          flag:

            last:一旦被此rewrite规则重写完成后,不再被后面其它的rewrite规则进行处理;而是由user Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程;

            break:一旦此rewrite重写完成后,由User Agent对新的URL重新发起请求,且不再会被当前location内的任何rewrite规则所检查;

            redirect:以302响应码(临时重定向)返回新的URL;

            permanent:以301响应码(永久重定向)返回新的URL;

  • 相关阅读:
    命名空间 和 class_exist() 问题
    浏览器中打开文件
    memcach 安装
    MySQL事务机制
    Xcode10更新报错:library not found for -lstdc++.6.0.9
    appium-chromedriver@3.0.1 npm ERR! code ELIFECYCLE npm ERR! errno 1
    npm audit fix
    使用WebStorm/IDEA上传本地项目到GitHub
    vue-cli(vue脚手架)超详细教程
    [Swift 开发] 使用闭包传值(typealias)
  • 原文地址:https://www.cnblogs.com/sq5288/p/10920397.html
Copyright © 2020-2023  润新知