nginx系列-02-常用配置和优化选项

[TOC]

本文章是查找多方资料(马哥教育、极客学院等)整合而来。
在此处先感谢下 马哥教育 http://www.magedu.com/

1 nginx配置文件结构

默认情况下,nginx的配置文件位置为:/etc/nginx/目录
其中的nginx.conf为主配置文件

这篇文章先来看看主配置文件nginx.conf的配置

nginx.conf中的配置大概可以分为main、server、location这几个作用域或者叫“段”。
所以,可以将这配置文件nginx.conf的内容分为main段、server段和location段。

  • main段的配置一般来讲在main、server、location中都有效
  • server段的配置一般来讲在server和location中生效
  • location段的配置一般来讲只在location段中生效
......
events{
    ......
}
http{
    ......
    server{
        ......
    }
    server{
        ......
    }
    ......
}

2 http段常用指令

# 包含了同一目录下的mime.types文件内容,MIME类型映射相关配置
include       mime.types;
# 默认的MIME类型
default_type  application/octet-stream;

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

# 访问日志
#access_log  logs/access.log  main;
# 错误日志
#error_log logs/error.log crit;

# 内核复制模式,启用可达到最大IO效率
sendfile        on;
#tcp_nopush     on;

# 和HTTP/1.1长连接相对应的配置
#keepalive_timeout  0;
keepalive_timeout  65;



# 内容压缩相关配置
# 内容压缩,可提高网络IO效率
gzip  on;
# 内容长度大于gizp_min_length才启用压缩
gzip_min_length 1000;
# 压缩级别1~9,级别越高,压缩率越高,同时系统开销越大。
gzip_comp_level 4;
# 可用于压缩的MIME类型
gzip_types text/plain text/xml text/css application/json application/x-javascript;   



# 静态文件缓存的相关配置
# 最大缓存数量
open_file_cache max=655350 inactive=20s;
# 验证缓存有效期时间间隔
open_file_cache_valid 30s;
# 有效期内文件最少使用次数
open_file_cache_min_uses 2;

3 location段

一般情况下一个请求到达后对其对应的url,nginx会将它解析到某一个location来处理。这个解析的过程实际上根据location的配置基本可以分为字符串匹配和正则表达式匹配这2种。

3.1 一般语法

location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
  • =:精确匹配
  • ~:正则匹配,区分大小写
  • ~*:正则匹配,不区分大小写
  • ^~:关闭正则查找功能

可以大致分为两类,普通匹配和正则匹配。

3.2 匹配过程

  • (1) 精确匹配

  • (2) ^~

  • (3) ~ 或 ~*

  • (4) 不带任何符号的URL

注意

  • 当两个location的优先级一样,以最长前缀为准
  • 当优先级一样,最长前缀一样,以定义顺序为准

4 nginx.conf常用优化选项

4.1 配置示例


# 用户
#user  nobody;

# worker进程数
# 通常应该小于等于CPU核心的数目
worker_processes  1;

# 错误日志路径
# 错误日志级别可以为:debug|info|notice|warn|error|crit
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# pid文件路径
# 默认为/var/run/nginx/nginx.pid
#pid        logs/nginx.pid;

# 每进程最大可用文件描述符数,文件描述符用完会拒绝新的连接产生502类错误
worker_rlimit_nofile 655350;

# 事件模型相关的配置

events {

    # 每进程最大的同时连接数
    # 服务器最大连接数 maxConnections = worker_connections * worker_processes

    # 当今浏览器一般会同时打开两个连接到服务器,
    # 所以,做静态服务器时,最大客户端数 maxClient = maxConnections / 2

    # 做反向代理时 maxClient =  maxConnections / 4
    worker_connections  1024;

    # 指定网络模型 epoll或者kquene
    # Linux推荐采用epoll,FreeBSD推荐采用kquene
    use epoll;
}


# http相关配置

http {

    # 包含了同一目录下的mime.types文件内容,MIME类型映射相关配置
    include       mime.types;
    # 默认的MIME类型
    default_type  application/octet-stream;

    # 该项一般由HTML代码中的meta来设置
    #charset utf-8;


    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffer_size 4 32k;
    # 客户端能够提交的最大数据大小
    client_max_body_size 32m;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    # 访问日志
    #access_log  logs/access.log  main;
    # 错误日志
    #error_log logs/error.log crit;

    # 内核复制模式,启用可达到最大IO效率
    sendfile        on;
    #tcp_nopush     on;

    # 和HTTP/1.1长连接相对应的配置
    #keepalive_timeout  0;
    keepalive_timeout  65;



    # 内容压缩相关配置
    # 内容压缩,可提高网络IO效率
    gzip  on;
    # 内容长度大于gizp_min_length才启用压缩
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    # 压缩级别1~9,级别越高,压缩率越高,同时系统开销越大。
    gzip_comp_level 4;
    # 可用于压缩的MIME类型
    gzip_types text/plain text/xml text/css application/json application/x-javascript;
    # gzip_vary on;  



    # 静态文件缓存的相关配置
    # 最大缓存数量
    open_file_cache max=655350 inactive=20s;
    # 验证缓存有效期时间间隔
    open_file_cache_valid 30s;
    # 有效期内文件最少使用次数
    open_file_cache_min_uses 2;
    




    # server表示一个虚拟主机,可以配置多个虚拟主机
    server {
        # 监听的端口
        listen       80;
        # 匹配的域名
        server_name  localhost;

        # 字符集设置
        #charset utf-8;

        # 访问日志文件路径
        #access_log  logs/host.access.log  main;

        location / {
            # 根目录
            root   html;
            # 默认主页
            index  index.html index.htm;
            expires 2h;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

}

4.2 常见选项说明

  • tcp_nodelay on|off
在keepalive模式下时,多个小报文合并为一个报文发送,提供带宽利用率。
一般为off。
  • sendfile on|off
这个和内核空间与用户空间,以及nginx的工作原理相关,还牵扯到操作系统。一两句话说不清。
  • tcp_nopush on|off
在sendfile 为on的时候才生效。表示是否启用tcp_nopush(freeBSD)或tcp_cork(linux)。
一般为off。
  • aio on | off
是否启用异步IO
  • directio off | size
是否启用直接IO,不在内存中缓存。
  • open_file_cache
open_file_cache off;
    max=number
        超过max设置的值时,会采用一定的算法(比如LRU)淘汰缓存。
    inactive=time
        在指定的时长time内没有被访问过的缓存条目被视为无效缓存条目,
        淘汰策略对于此类缓存条目直接删除

该指令可以影响以下属性:
    缓存的文件信息:
        文件描述符,文件大小,文件最近一次修改时间
    缓存的目录信息:
        打开的目录结构
    缓存的以前操作失败的文件:
        文件不存在
        没权限操作的文件等

  • open_file_cache_errors on | off
表示是否缓存访问出错的文件的相关信息,比如文件不存在、文件操作权限不足等
  • open_file_cache_valid time
每隔多久检测缓存条目的有效性
open_file_cache_valid 60s;
  • open_file_cache_min_uses count
open_file_cache_min_uses 1;
  • alias
只能用于location段。注意和root指令的区别:
location /test1/ {
    # root可以出现于location、server段
    root /web/resources/;
}

location /test2/ {
    # alias只能出现于location段
    alias /web/resources/;
}

对于以上配置:

http://xxx.com/test1/1.html
    ===> /web/resources/test1/1.html文件
http://xxx.com/test2/1.html
    ===> /web/resources/1.html文件
  • error_page err_code... [=respCode] path/to/page
error_page 404 /404.html;

# 将404的返回码改成200回送给客户端
error_page 404 =200 /404.html;

  • try_files

指定一系列资源路径(n个),当某个资源访问不到时,依次尝试该系列资源路径(1到n-1),最后一个往往是一个URL,当前面n-1个资源都找不到时将跳转至该URL。
并且,为了避免循环重定向等异常情况,最后一个URL应该是可靠的。

location =/favicon.icon {
    # 当favicon.icon找不到时会依次尝试f.ico,f1.ico,f2.ico
    try_files /f.ico /f1.ico /f2.ico;
}
# 最后一个URL应该确保它是可靠的(但不是必须的V_V)
location =/f2.ico {
    # ......
    # expire 30s;
}
  • keepalive_timeout time
time为0表示禁用keepalive功能

keepalive_timeout 20s;
  • keepalive_requests count
在持久连接上所允许请求的最大资源数量
keepalive_requests 100;
  • keepalive_disable none | browser1 browser2...
禁止特定类型浏览器的浏览器的keepalive功能。
  • send_timeout time
回送响应报文的超时时长
send_timeout 60s;
  • client_body_buffer_size size
# 客户端请求报文body的最大缓存大小,超出此值,将存储到磁盘
client_body_buffer_size 16k;
  • client_body_temp_path path [l1 [l2 [l3]]]
客户端请求body超出client_body_buffer_size(比如文件上传),
将存储到该值指定的磁盘位置

# 16进制字符命名的目录,数字表示目录名里面十六进制字符的个数
client_body_temp_path /tmp/nginx/client_body 1 2 3;
# 表示16个一级目录
# 每个一级目录下有16^2个二级目录
# 每个二级目录下有16^3个三级目录
  • limit_except httpMethod {...}
对指定范围之外的请求方法进行额外限制

# GET 方法只允许127.0.0.1访问
limit except GET {
    allow 127.0.0.1;
    deny all;
}
  • limit_rate speed
限制客户端每秒钟所能传输的字节数
0表示无限制

limit_rate 256k;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 1,984评论 0 9
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,858评论 0 3
  • I/O模型Nginx介绍Nginx的安装和目录结构Nginx的配置Nginx的编译安装 一、I/O模型 (一)I/...
    哈喽别样阅读 888评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • Page 1:nginx 服务器安装及配置文件详解 CentOS 6.2 x86_64 安装 nginx 1.1 ...
    xiaojianxu阅读 8,524评论 1 41