欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx相关参数配置及实列

程序员文章站 2022-07-13 21:42:01
...

一:Nginx配置文件的整体结构:
Nginx相关参数配置及实列
二:全局块相关参数设置:全局块影响nginx全局模式

(1)user nobody; 这表示我一那个用户来运行nginx,在自己没有创建特定的用户时,默认nobody用户。

(2)worker_processes参数配置; 格式: worker_processes number | auto

number:nginx进程最多可以产生的worker process数
auto:Nginx进程将自动检测。

 实列:worker_processes  4 :我们将产生的worke调成4
 [aaa@qq.com ~]# ps -aux | grep nginx
root     13965  0.0  0.0  46452  2052 ?        Ss   Dec12   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx    18012  0.0  0.0  54944 10420 ?        S    Dec13   0:00 nginx: worker process
nginx    18013  0.0  0.0  54944 10164 ?        S    Dec13   0:16 nginx: worker process
nginx    18014  0.0  0.0  54944 10164 ?        S    Dec13   0:16 nginx: worker process
nginx    18015  0.0  0.0  54944 10164 ?        S    Dec13   0:16 nginx: worker process
   

(3)worker_cpu_affinity; 格式:worker_cpu_affinity cpumask

  这一参数跟Nginx产生的worker进程数相关联一般大于worker进程数。为了提高cpu的缓存率
  实列:worker_cpu_affinity  0001  0010  0100  1000   这表示将worker进程绑定在特定的cpu上
  提高缓率

(4)worker_flimit_nofile: 格式:worker_flimit_nofile number

   指定所有worker进程所能够打开的最大文件句丙数。
   worker_rlimit_nofile 65535;

(5)worker_priority; 格式:worker_priority number

     指定worker进程的nice值   -20(100)   19(139)
     worker_priority  -20

三:events相关配置参数:

1)accept_mutex on | off;设置网络连接的序列化

这一参数默认为on状态,表示当用户请求时多个nginx进程接受连接进行序列化,防止多个进程对链接的争抢 这个参数衍生的名词:惊群现象。
惊群现象:指的是一个网路连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能
所以在这里,如果accept_mutexon,那么多个worker将是以串行方式来处理,其中有一个worker会被唤醒;反之若
accept_mutex off,那么所有的worker都会被唤醒,不过只有一个worker能获取新连接,其它的worker会重新进入休眠状态

(2)multi_accept on | off;受否允许同时接受多个网络连接

该指令默认为off状态,意指每个worker process 一次只能接收一个新到达的网络连接。
若想让每个Nginx的workerprocess都有能力同时接收多个网络连接,则需要开启此配置

(3)use model;事件驱动模型的选择

model模型可选择项包括:select、poll、kqueue、epoll、rtsig等
nginx模式使用epoll事件驱动模型

(4)worker_connections number;最大连接数的配置

表示每一个worker进程数能够同时开启的最大连接数,默认是512

http相关配置参数:
(1)include mime.types;指的是网络资源的媒体类型,也是前端请求的资源类型。

include指令是将mime.type文件包含起来。
default_type application/octet-stream;默认文件类型,默认为text/plain

[aaa@qq.com nginx]# cat mime.types  types结构,包含了各种浏览器能够识别的mime类型以及对应类型的文件后缀名

types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/javascript                js;
    application/atom+xml                  atom;
    application/rss+xml                   rss;

    text/mathml                           mml;
    text/plain                            txt;
    text/vnd.sun.j2me.app-descriptor      jad;
    text/vnd.wap.wml                      wml;
    text/x-component                      htc;

(2)sendfile on|off;是否允许sendfile方式传输文件,默认为off,可以在http块,server块,location块

(3)sendfile_max_chunk size;每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
如果size>0则表示nginx进程的每个worker进程每次调用sendefile()传输的数据最大不能超出此值。

(4) keepalive_timeout size;连接超时时间,默认为75s,可以在http,server,location块。

(5)keepalive_requests number; 这个参数限制用户通过某一个连接向nginx服务器发起请求的次数。

server全局块的相关配置:
(1)监听连接的三种方式:

   listen 10.5.100.183:8080;   # 监听具体IP和具体端口上的连接
   listen 10.5.100.183 ;       # 监听IP上所有端口上的连接
   listen 8080;                # 监听具体端口上的所有IP的连接   

(2)主机名称和IP虚拟主机;

   server_name  www.node1.com;   主机名称支持正则表达式书写,可以跟多个主机
   server_name ~^www\.node1\.com$ 
   正侧表达式的匹配方式:
   (1)先做精确匹配检查
   (2)左侧通配符匹配检查:*.yanyurun.com
   (3)右侧通配符匹配检查:如  mail.*
   (4)正侧表达式匹配检查:如   ~*.*\.node1\.com$
   server {
    listen              8080;
    server_name         image.node3.com;

    location / {
       root "/www/shuo/";          root path:设置资源路径映射;用于指明请求的URL所对应的资源所在文件系统的起始路径
}

   
}

 
server {
    listen              8080;
    server_name         *.node3.com;           这表示左侧通配符匹配

    location / {
       root "/yan/yurun/";
}

}
配置之前我们要在/etc/hosts文件中填写相关域名解析。

三:location块的定义配置:

location  [  =  |  ~   |   ~*   |   ^~   ]   uri   {}
          location  @name  {}
            功能:允许根据用户请求的url来匹配定义的各location;匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能。
         
         =:精确匹配检查;
         ~:正则表达式莫式匹配检查,区分字符大小写;
         ~*:正则表达式模块匹配检查,不区分字符大小写;
         ^~:URL的前半部分匹配,不支持正则表达式;
         匹配的优先级:精确匹配(=),^~~~*,不带任何符号的location;

实列:

listen 8080;
       server_name www.yan.com;
       location / {
       root "/www/8080/";
       }

       location /images/ {
       root "/www/image/";
       }

       location ~* \.(txt|text)$ {
       root "/www/text/";
       }
   }

 mkdir  /www/8080
 mkdir /www/{image,text}
 vim /www/8080/a.txt
 vim /www/text/a.txt
 vim /www/image/a.txt 
 假设:访问10.5.100.2088080/a.txt    
 那么第一个匹配,第三个匹配,显示第三个location中的信息,因为第  三个符号优先级高
 假设:访问10.5.100.2088080/image/a.txt   三个location都匹配,还是显示第三个,第三个优先级高,但是会  报错,因为他会去找www/text下找image目录下a.txt
报错因为www/text下没有image这个目录

(2)设置http响应状态码来指定特用的错误页面;

server {
        listen              8080;
        server_name         image.node3.com;

        location / {
           root "/www/shuo/";
    }
   
        error_page  404 =200 /40.html;  表示当客户访问的是一个错误页面时,显示/www/40.html的内容
        显示的404状态码,但我们让客户看到的是200请求成功的状态码
        location =/40.html {
          root /www;
    }

    }

Nginx相关参数配置及实列

Nginx访问控制机制:

(1)基于IP地址的访问控制;

 server {
        listen              8080;
        server_name         image.node3.com;

        location / {
           root "/www/shuo/";
           allow 10.5.0.0/16; 表示仅这个网段的用户能够访问本内容资源。
           deny all;    表示禁止所有用户对这个资源内容的访问。
    }
   
        error_page  404 =200 /40.html;
        location =/40.html {
          root /www;
    }

    }

(2)基于用户的访问控制;两种认证方式:basic,digest。

[aaa@qq.com ~]# mkdir -pv /www/8080/
[aaa@qq.com 8080]# vim index.html 
[aaa@qq.com ~]# htpasswd -c -m /etc/nginx/users/.htpasswd tom  添加可以访问的用户
New password: 
Re-type new password: 
Adding password for user tom


       server {
       listen 8080;
       server_name www.yan.com;
       location / {
       root "/www/8080/";
       allow 10.5.0.0/16;
       deny all;
       auth_basic "only for vip";
       auth_basic_user_file /etc/nginx/users/.htpasswd;
       }
}

(3)检查用户的请求状态;

 location /status {    仅能用于location上下文
       stub_status on;
       allow 10.5.0.0/16;
       deny all;
       }
Active connections: 1   当前所有处于打开状态的连接数
server accepts handled requests
 199 已经接受过的连接数
 199 已经处理过的连接数
 351 已经处理过的请求数;在保持连接的状态模式下,请求数量可能多于连接数量
Reading 0: 正处于接受请求状态的连接数
Writing:1  请求已经接受完成,正处于处理请求或发送相应的过程中的连接数 
Waiting: 0 保持连接模式,且处于活动状态的连接数  
      

(4)Nginx中的重写机制;

 rewrite  regex replacement  flag;
  例如:rewrite  ^/images/(.*\.jpg)$  /imgs/$1  break;
   http://www.magedu.com/images/a/b/c/1.jpg   --->/imgs/a/b/c/1.jpg

  flag:
    last:一旦此rewrite规则重写完成后,就不再被后面其他的rewrite规则进行处理;而是由user agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程
    break:一旦此rewrite规则重写完成后,由user agent对新的URL重新发起请求,且不再会被当前locatrion内的任何rewrite规则检查;
    redirect:以302响应码(临时重定向)返回新的URL
    permanent:以301响应码(永久重定向)返回新的  

    例如:
 location / {
       root "/www/8080/";
       #allow 10.5.0.0/16;
       #deny all;
       #auth_basic "only for vip";
       #auth_basic_user_file /etc/nginx/users/.htpasswd;
       rewrite ^/bbs/(.*)$ /form/$1 break;   这是将bbs/目录下的重写到form/目录下
       }

(5)Nginx基于浏览器访问的重写机制;

 if($http_user_agent  ~* MSIE)  {         //这表示客户端使用IE浏览器访问,
     
     }
    
     
 if($http_user_agent  ~* Chrome)  {
    

     }
      

 if($http_user_agent  ~* Firefox)  {
     
     }
基于谷歌浏览器的相关配置;
 location / {
            root   "/www/web/";
            index  index.html index.htm;
            if ($http_user_agent ~* Chrome) {   表示当以谷歌浏览器访问资源时,重写到from/目录下的资源
            rewrite ^(.*\.html)$ /from/$1 break;
        }
        }
        
Nginx的常用参数配置;

1.$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
2.$remote_user : 用来记录客户端用户名称;
3.$time_local  : 用来记录访问时间与时区;
4.$request :     用来记录请求的url与http协议;
5.$status :      用来记录请求状态;成功是2006.$body_bytes_sent :记录发送给客户端文件主体内容大小;
7.$http_referer :    用来记录从那个页面链接访问过来的;
8.$http_user_agent : 记录客户端浏览器的相关信息;

总结:Nginx的参数有很多,这里只是基本总结了几个。

相关标签: Linux服务