低头凝望镜中月

不如关注木丘白

一步两步向前走

共同学习一起来

开篇先附上Nginx中文文档地址:https://www.nginx.cn/doc/index.html

文档包含了Nginx的很多内容介绍,包括各系统如何安装配置等。本篇主要讲解nginx.conf配置文件项管内容。

nginx 配置 return nginx 配置详解_nginx代理配置详解

nginx 配置 return nginx 配置详解_nginx 配置 return_02

nginx 配置 return nginx 配置详解_nginx配置_03

nginx.conf

#使用的用户和用户组
user www www;

#指定工作衍生进程数,建议设置为等于CPU总核心数。
worker_processes 8;

#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /usr/local/nginx/logs/error.log info;

#指定进程pid存放路径
pid /usr/local/nginx/logs/nginx.pid;

#进程最大打开文件数,如果太小就可能会有too many open files问题
worker_rlimit_nofile 65535;

这里注意worker_rlimit_nofile的设置,在服务器上使用命令ulimit -n可以查看linux服务器自身的最大打开文件数,如果worker_rlimit_nofile值超过了服务器本身的最大值是没用的,所以这里如果没有必要的限制,就可以设置成和ulimit -n 值一样。

附带说明一下ulimit命令的几个参数以及含义

参数:
-a  显示目前资源限制的设定。
-c   设定core文件的最大值,单位为区块。
-d   程序数据节区的最大值,单位为KB。
-f   shell所能建立的最大文件,单位为区块。
-H  设定资源的硬性限制,也就是管理员所设下的限制。
-m   指定可使用内存的上限,单位为KB。
-n   指定同一时间最多可开启的文件数。
-p   指定管道缓冲区的大小,单位512字节。
-s   指定堆叠的上限,单位为KB。
-S  设定资源的弹性限制。
-t   指定CPU使用时间的上限,单位为秒。
-u   用户最多可开启的程序数目。
-v   指定可使用的虚拟内存上限,单位为KB。

nginx 配置 return nginx 配置详解_nginx配置_03

events

events有以下这些配置

events{
    use epoll;
    #单个进程最大连接数(最大连接数=连接数*进程数)
    worker_connections 65535;
    #keepalive超时时间。
    keepalive_timeout 60;
    #客户端请求头部的缓冲区大小,这里可以设置为系统分页大小
    #系统分页大小可以通过getconf PAGESIZE获取
    client_header_buffer_size 4k;
    #这个将为打开文件指定缓存,默认是没有启用的
    #max指定缓存数量,建议和打开文件数worker_rlimit_nofile一致
    #inactive是指经过多长时间文件没被请求后删除缓存
    open_file_cache max=65535 inactive=60s;
    #这个是指多长时间检查一次缓存的有效信息
    #如果有一个文件在inactive时间内一次没被使用,它将被移除
    open_file_cache_valid 60s;
    #open_file_cache指令中的inactive参数时间内文件的最少使用次数
    #如果超过这个数字,文件描述符一直是在缓存中打开的
    #如果有一个文件在inactive时间内一次没被使用,它将被移除
    open_file_cache_min_uses 1;
}

首先查看一下服务器版本信息

cat /proc/version
Linux version 2.6.32-642.el6.x86_64 (mockbuild@x86-033.build.eng.bos.redhat.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) ) #1 SMP Wed Apr 13 00:51:26 EDT 2016

#参考事件模型

use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]

与Apache相似,Nginx针对不同的系统,有不同的事件模型,这里主要分两种事件模型,标准事件模型和高效事件模型。

nginx 配置 return nginx 配置详解_nginx配置_05

为什么要看服务器版本信息,就是因为与事件模型的选用有关,这里我使用的是epoll。

nginx 配置 return nginx 配置详解_nginx配置_03

http

http {

    #文件扩展名与文件类型映射表
    include       mime.types;
    #默认文件类型
    default_type  application/octet-stream;
    #默认编码
    #charset utf-8;
    #是否允许在header的字段中带下划线
    underscores_in_headers on;
    #服务器名字的hash表大小
    server_names_hash_bucket_size 128;
    #客户请求头缓冲大小,默认使用client_header_buffer_size
    #如果header值过大,则会使用large_client_header_buffers
    large_client_header_buffers 464k;
    #设定通过nginx上传文件的大小
    client_max_body_size 8m;
    #开启高效文件传输模式
    sendfile on;
    #此选项允许或禁止使用socke的TCP_CORK的选项
    #此选项仅在使用sendfile的时候使用
    tcp_nopush on;
    #是否开启延迟发送,与tcp_nopush互斥使用
    tcp_nodelay on;
    #开启目录列表访问,合适下载服务器,默认关闭。
    autoindex on;
    #长连接超时时间,单位是秒
    keepalive_timeout 120;
    #客户端向服务端发送一个完整的 request header 的超时时间
    client_header_timeout  3m;
    #指定客户端与服务端建立连接后发送 request body 的超时时间
    client_body_timeout    3m;
    #服务端向客户端传输数据的超时时间
    send_timeout           3m;
    #隐藏Nginx版本号,防止通过版本找到漏洞攻击
    server_tokens off;
}

nginx 配置 return nginx 配置详解_nginx配置_03

server

server {

    #监听端口
    listen 80;
    #服务器名,可以根据IP、域名、正则表达式配置
    server_name  localhost;
    #定义网站的字符集,一般不设置,通过代码设置
    #charset koi8-r;
    #定义访问日志,可以针对每一个server(即每一个站点)设置它们自己的访问日志
    #access_log  logs/host.access.log  main;
    #当状态码为500、502、503、504时,则访问50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
          #定义50x.html所在路径
          root   html;
    }
}

nginx 配置 return nginx 配置详解_nginx配置_03

location

location   =   /uri        =开头表示精确前缀匹配,只有完全匹配才能生效。
location   ^~   /uri       ^~开头表示普通字符串匹配上以后不再进行正则匹配。
location   ~   pattern     ~开头表示区分大小写的正则匹配。
location   ~*   pattern    ~*开头表示不区分大小写的正则匹配。
location   /uri            不带任何修饰符,表示前缀匹配。
location   /               通用匹配,任何未匹配到其他location的请求都会匹配到。
location / {
      #代理转发
      proxy_pass http://127.0.0.1:100;
      proxy_set_header  X-Real-IP  $remote_addr;
      #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
      proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header  Host  $http_host;
      proxy_set_header Request-Url $request_uri;
      proxy_redirect http:// $scheme://;
}

nginx 配置 return nginx 配置详解_nginx配置_03

upstream

upstream这里有5种配置分配方式,逐一讲解

①轮询         
        轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。

upstream qbnever.com.cn {
            server 192.168.110.101:8088;
            server 192.168.110.102:8088;
            server 192.168.110.103:8088;
        }

②weight

         加权轮询,weight值越高,被访问的几率越大,同样服务器down掉后自动剔除。

upstream qbnever.com.cn {
            server 192.168.110.101:8088 weight=1;
            server 192.168.110.102:8088 weight=2;
            server 192.168.110.103:8088 weight=3;
        }

③ip_hash

        每个请求按照访问ip的hash值进行分配,由于同一算法的hash值不会变,所以每个ip会固定访问某台服务器,这样可以解决session一致问题。

upstream qbnever.com.cn {
            ip_hash;
            server 192.168.110.101:8088;
            server 192.168.110.102:8088;
            server 192.168.110.103:8088;
        }

④fair

        fair公平模式,根据服务端的响应时间分配,响应时间越短被分配的概率越高。

upstream qbnever.com.cn {
            server 192.168.110.101:8088;
            server 192.168.110.102:8088;
            server 192.168.110.103:8088;
            fair;
        }

⑤url_hash

        url_hash与ip_hash类似,根据url计算的hash值分配,这样每个url会固定访问到对应的服务器,这种配置更适用于缓存服务器。hash_method用来指定使用的hash算法。

upstream qbnever.com.cn {
            server 192.168.110.101:8088;
            server 192.168.110.102:8088;
            server 192.168.110.103:8088;
            hash $request_uri;
            hash_method crc32;
        }

nginx 配置 return nginx 配置详解_nginx配置_03

服务状态

服务状态有以下几种

down:表示服务停用

weight:权重,在上面upstream中已经提到

fail_timeout:与max_fail关联使用,默认是10s,表示在10秒内如果失败次数已达max_fail值,则在fail_timeout时间内部在访问此服务器。

max_fail:默认值1

back_up:备用服务,只有当其他非备用服务全部挂掉之后才会请求到此服务。