nginx配置

一、重要配置项

如下是一个完整的nginx配置信息。html

  1.  
    #================================如下是全局配置项
  2.  
    #指定运行nginx的用户和用户组,默认状况下该选项关闭(关闭的状况就是nobody)
  3.  
    #user nobody nobody;
  4.  
    #运行nginx的进程数量,后文详细讲解
  5.  
    worker_processes 1;
  6.  
    #nginx运行错误的日志存放位置。固然您还能够指定错误级别
  7.  
    #error_log logs/error.log;
  8.  
    #error_log logs/error.log notice;
  9.  
    #error_log logs/error.log info;
  10.  
    #指定主进程id文件的存放位置,虽然worker_processes != 1的状况下,会有不少进程,管理进程只有一个
  11.  
    #pid logs/nginx.pid;
  12.  
     
  13.  
    events {
  14.  
    #每个进程可同时创建的链接数量,后问详细讲解
  15.  
    worker_connections 1024;
  16.  
    #链接规则,能够采用[kqueue rtsig epoll select poll eventport ],后文详细讲解
  17.  
    use epoll;
  18.  
    }
  19.  
    #================================以上是全局配置项
  20.  
     
  21.  
    http {
  22.  
    #================================如下是Nginx后端服务配置项
  23.  
    upstream backendserver1 {
  24.  
    #nginx向后端服务器分配请求任务的方式,默认为轮询;若是指定了ip_hash,就是hash算法(上文介绍的算法内容)
  25.  
    #ip_hash
  26.  
    #后端服务器 ip:port ,若是有多个服务节点,这里就配置多个
  27.  
    server 192.168.220.131:8080;
  28.  
    server 192.168.220.132:8080;
  29.  
    #backup表示,这个是一个备份节点,只有当全部节点失效后,nginx才会往这个节点分配请求任务
  30.  
    #server 192.168.220.133:8080 backup;
  31.  
    #weight,固定权重,还记得咱们上文提到的加权轮询方式吧。
  32.  
    #server 192.168.220.134:8080 weight=100;
  33.  
    }
  34.  
    #================================以上是Nginx后端服务配置项
  35.  
     
  36.  
    #=================================================如下是 http 协议主配置
  37.  
    #安装nginx后,在conf目录下除了nginx.conf主配置文件之外,有不少模板配置文件,这里就是导入这些模板文件
  38.  
    include mime.types;
  39.  
    #HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式
  40.  
    default_type application/octet-stream;
  41.  
    #日志格式
  42.  
    #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  43.  
    '$status $body_bytes_sent "$http_referer" '
  44.  
    '"$http_user_agent" "$http_x_forwarded_for"';
  45.  
     
  46.  
    #日志文件存放的位置
  47.  
    #access_log logs/access.log main;
  48.  
     
  49.  
    #sendfile 规则开启
  50.  
    sendfile on;
  51.  
    #指定一个链接的等待时间(单位秒),若是超过等待时间,链接就会断掉。注意必定要设置,不然高并发状况下会产生性能问题。
  52.  
    keepalive_timeout 65;
  53.  
     
  54.  
    #开启数据压缩,后文详细介绍
  55.  
    gzip on;
  56.  
    #=================================================以上是 http 协议主配置
  57.  
     
  58.  
    #=================================================如下是一个服务实例的配置
  59.  
    server {
  60.  
    #这个代理实例的监听端口
  61.  
    listen 80;
  62.  
    #server_name 取个惟一的实例名都要想半天?
  63.  
    server_name localhost;
  64.  
    #文字格式
  65.  
    charset utf -8;
  66.  
    #access_log logs/host.access.log main;
  67.  
     
  68.  
    #location将按照规则分流知足条件的URL。"location /"您能够理解为“默认分流位置”。
  69.  
    location / {
  70.  
    #root目录,这个html表示nginx主安装目录下的“html”目录。
  71.  
    root html;
  72.  
    #目录中的默认展现页面
  73.  
    index index.html index.htm;
  74.  
    }
  75.  
     
  76.  
    #location支持正则表达式,“~” 表示匹配正则表达式。
  77.  
    location ~ ^/business/ {
  78.  
    #方向代理。后文详细讲解。
  79.  
    proxy_pass http: //backendserver1;
  80.  
    }
  81.  
     
  82.  
    #redirect server error pages to the static page /50x.html
  83.  
    #error_page 404 /404.html;
  84.  
    error_page 500 502 503 504 /50x.html;
  85.  
    location = / 50x.html {
  86.  
    root html;
  87.  
    }
  88.  
    }
  89.  
    #=================================================以上是一个服务实例的配置
  90.  
    }

 

二、use [ kqueue | rtsig | epoll | select | poll ]

依靠event loop机制,单个线程能够同时处理多个request请求,并在处理完产生response的时候,回调相关的远程事件。根据NIO实现机制的不一样,技术名称也就不一样了。linux

epoll、kqueue 等这些组件都是对多路复用网络I/O模型的实现,其中epoll是poll的升级版本,在linux环境下可使用但限于linux2.6及以上版本。kqueue用在bsd上使用。nginx

三、worker_processes和worker_connections

worker_processes:操做系统启动多少个工做进程运行Nginx。注意是工做进程,不是有多少个nginx工程。在Nginx运行的时候,会启动两种进程,一种是主进程master process;一种是工做进程worker process。例如我在配置文件中将worker_processes设置为4,启动Nginx后,使用进程查看命令观察名字叫作nginx的进程信息,我会看到以下结果:正则表达式

这里写图片描述

图中能够看到1个nginx主进程,master process;还有四个工做进程,worker process。主进程负责监控端口,协调工做进程的工做状态,分配工做任务,工做进程负责进行任务处理。通常这个参数要和操做系统的CPU内核数成倍数。算法

worker_connections:这个属性是指单个工做进程能够容许同时创建外部链接的数量。不管这个链接是外部主动创建的,仍是内部创建的。这里须要注意的是,一个工做进程创建一个链接后,进程将打开一个文件副本。因此这个数量还受操做系统设定的,进程最大可打开的文件数有关。shell

    • 更改操做系统级别的“进程最大可打开文件数”的设置:vim

      修改limits.conf主配置文件后端

      vim /etc/security/limits.conf服务器

      在主配置文件最后加入下面两句:网络

      * soft nofile 65535
      * hard nofile 65535

      这两句话的含义是soft(应用软件)级别限制的最大可打开文件数的限制,hard表示操做系统级别限制的最大可打开文件数的限制

      保存这个文件后,配置是不会立刻生效的,为了保证本次shell会话中的配置立刻有效,咱们须要经过ulimit命令更改本次的shell会话设置。

      ulimit -n 65535

      执行命令后,配置立刻生效。您能够用ulimit -a 查看目前会话中的全部核心配置:

      ulimit -a
      core file size (blocks, -c) 0
      data seg size (kbytes, -d) unlimited
      scheduling priority (-e) 0
      file size (blocks, -f) unlimited
      pending signals (-i) 7746
      max locked memory (kbytes, -l) 64
      max memory size (kbytes, -m) unlimited
      open files (-n) 65535
      pipe size (512 bytes, -p) 8
      POSIX message queues (bytes, -q) 819200
      real-time priority (-r) 0
      stack size (kbytes, -s) 10240
      cpu time (seconds, -t) unlimited
      max user processes (-u) 7746
      virtual memory (kbytes, -v) unlimited
      file locks (-x) unlimited

      请注意open files这一项。

    • 更改Nginx软件级别的“进程最大可打开文件数”的设置:
      刚才更改的只是操做系统级别的“进程最大可打开文件”的限制,做为Nginx来讲,咱们还要对这个软件进行更改。打开nginx.conf主陪文件。您须要配合worker_rlimit_nofile属性。以下:

      user root root;
      worker_processes 4;
      worker_rlimit_nofile 65535;

      #error_log logs/error.log;
      #error_log logs/error.log notice;
      #error_log logs/error.log info;

      #pid logs/nginx.pid;
      events {
      use epoll;
      worker_connections 65535;
      }

      这里只粘贴了部分代码,其余的配置代码和主题无关,也就不须要粘贴了。请注意代码行中加粗的两个配置项,请必定两个属性所有配置。配置完成后,请经过nginx -s reload命令从新启动Nginx。

    • 验证Nginx的“进程最大可打开文件数”是否起做用:

      在linux系统中,全部的进程都会有一个临时的核心配置文件描述,存放路径在/pro/进程号/limit。

      首先咱们来看一下,没有进行参数优化前的进程配置信息:

      ps -elf | grep nginx
      1 S root 1594 1 0 80 0 - 6070 rt_sig 05:06 ? 00:00:00 nginx: master process /usr/nginx-1.8.0/sbin/nginx
      5 S root 1596 1594 0 80 0 - 6176 ep_pol 05:06 ? 00:00:00 nginx: worker process
      5 S root 1597 1594 0 80 0 - 6176 ep_pol 05:06 ? 00:00:00 nginx: worker process
      5 S root 1598 1594 0 80 0 - 6176 ep_pol 05:06 ? 00:00:00 nginx: worker process
      5 S root 1599 1594 0 80 0 - 6176 ep_pol 05:06 ? 00:00:00 nginx: worker process

      能够看到,nginx工做进程的进程号是:1596 1597 1598 1599。咱们选择一个进程,查看其核心配置信息:

      cat /proc/1598/limits

      这里写图片描述

      请注意其中的Max open files ,分别是1024和4096。那么更改配置信息,并重启Nginx后,配置信息就是下图所示了:

      这里写图片描述

相关文章
相关标签/搜索