前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx ngx_http_core_module模块详解(三)

Nginx ngx_http_core_module模块详解(三)

作者头像
咻一咻
发布2020-05-29 15:29:30
8900
发布2020-05-29 15:29:30
举报
文章被收录于专栏:咻一咻咻一咻

http协议相关的配置结构

代码语言:javascript
复制
http {
    ...
    ...         #各server的公共配置
    server {    #每个server用于定义一个虚拟主机
        ...
    }
    server {     
        ...
        server_name   #虚拟主机名
        root          #主目录
        alias         #路径别名
        location [OPERATOR] URL {     指定URL的特性
            ...
            if CONDITION {
                ...
            }
        }
    }
}

ngx_http_core_module

模块的功能

模拟反代基于tcp或udp的服务连接,即工作于传输层的反代或调度器。

代码语言:javascript
复制
server { ... }
    配置一个虚拟主机
    server {
        listen address[:PORT]|PORT; 
        server_name SERVER_NAME;
        root /PATH/TO/DOCUMENT_ROOT;
    }
代码语言:javascript
复制
1、listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILElisten address[:port] [default_server] [ssl] [http2 | spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size]
    default_server #设定为默认虚拟主机
    ssl            #限制仅能够通过ssl连接提供服务
    backlog=number #超过并发连接数后,新请求进入后援队列的长度
    rcvbuf=size    #接收缓冲区大小
    sndbuf=size    #发送缓冲区大小
注意:
    (1) 基于port;
        listen PORT;  指令监听在不同的端口
    (2) 基于ip的虚拟主机
        listen IP:PORT; IP 地址不同
    (3) 基于host
        nameserver_name fqdn;  指令指向不同的主机名
    (4) default_server
        不加这个的话默认页面是/etc/nginx/conf.d 文件下排序的第一个配置文件为主

2、server_name name ...;
    虚拟主机的主机名称后可跟多个由空白字符分隔的字符串
    支持*通配任意长度的任意字符
        server_name *.a.com  www.a.*
    支持~起始的字符做正则表达式模式匹配,性能原因慎用
        server_name ~^www\d+\.a\.com$
        \d 表示[0-9]
    匹配优先级机制从高到低:
    (1) 首先是字符串精确匹配 如:www.a.com
    (2) 左侧*通配符 如:*.a.com 
    (3) 右侧*通配符 如:www.a.* 
    (4) 正则表达式  如:~^.*\.a\.com$ 
    (5) default_server

3、tcp_nodelay on | off;
    在keepalived模式下的连接是否启用TCP_NODELAY选项 
    当为off时,延迟发送,合并多个请求后再发送 
    默认On时,不延迟发送 
    可用位置:http, server, location

4、sendfile on | off;
    是否启用sendfile功能,在内核中封装报文直接发送默认Off
    可用位置:http, server, location, if in location

5、server_tokens on | off | build | string 
    是否在响应报文的Server首部显示nginx版本
    可用位置:http, server, location

示例1:虚拟主机

代码语言:javascript
复制
server{
    listen 80;
    server_name  www.a.com;
    root /data/web1/;
} #1、以server_name 定义虚拟主机
server{
    listen 192.168.109.143:98
    root /data/web2/;
} #2、以ip加端口定义虚拟主机

定义路径相关的配置

代码语言:javascript
复制
6、root
    设置web资源的路径映射;用于指明请求的URL所对应的文档的目录路径
    可用位置:http, server, location, if in location 
    server {
        ...
        root  /data/www/vhost1;
    }
    示例:
    http://www.a.com/images/logo.jpg 
        --> /data/www/vhosts/images/logo.jpg

7、location [ = | ~ | ~* | ^~ ] uri{ ... }
    location @name { ... } 
    在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置
    可用位置:server, location
    示例: 
    server {... 
        server_name www.a.com;
        location /images/ {
            root  /data/imgs/;
            } 
        } 
        http://www.a.com/images/logo.jpg  
            --> /data/imgs/images/logo.jpg #访问这个图片真实路径
    =:对URI做精确匹配;
    location = / { 
        ... 
    } 
        http://www.a.com/  匹配 
        http://www.a.com/index.html 不匹配
    ^~:对URI的最左边部分做匹配检查,不区分字符大小写
    ~:对URI做正则表达式模式匹配,区分字符大小写
    ~*:对URI做正则表达式模式匹配,不区分字符大小写
    不带符号:匹配起始于此uri的所有的uri
    匹配优先级从高到低:=, ^~, ~/~*, 不带符号

    location = / {
        [ configuration A ]
    }

    location / {
        [ configuration B ]
    }

    location /documents/ {
        [ configuration C ]
    }

    location ^~ /images/ {
        [ configuration D ]
    }

    location ~* \.(gif|jpg|jpeg)$ {
        [ configuration E ]
    }

    示例:
        root /vhosts/www/htdocs/ 
        http://www.a.com/index.html
             --> /vhosts/www/htdocs/index.html

        server { 
            root  /vhosts/www/htdocs/ 
                location /admin/ { 
                    root /webapps/app1/data/ 
                    } 
            }
        http://www.a.com/admin/index.html 
            --> /webapps/app1/data/admin/index.html

8、alias path; 
    路径别名,文档映射的另一种机制
    仅能用于location上下文
    示例:
        访问: http://www.a.com/bbs/index.php 
        location /bbs/ { 
            alias /web/forum/; 
        }      --> 真实路径 /web/forum/index.html 
        location /bbs/ { 
            root /web/forum/; 
        }      --> 真实路径 /web/forum/bbs/index.html
    注意:location中使用root指令和alias指令的意义不同 
        (a) root, 给定的路径对应于location中的/uri/左侧的/ 
        (b) alias,给定的路径对应于location中的/uri/右侧的/



9、error_page code ... [=[response]]  uri; 
    模块:ngx_http_core_module 
    定义错误页,以指定的响应状态码进行响应 
    可用位置:http, server, location, if in location 
    error_page 404  /404.html 
    error_page 404  =200  /404.html
    示例:
    server{
        listen 80;
        server_name www.b.com;
        error_page  404    /404.html; #页面是404错误换成默认页面
        location /404.html {
            root    /data/error_html/;#默认页面是/data/error_html/404.html页面
        }
      root /data/web2;
    }  

    server{
        listen 80;
        server_name www.b.com;
        error_page  404 =200    /404.html; #=200意思是请求的页面状态码不会出现404 把404 变成200                                                        
    location /404.html {
        root    /data/error_html/;
    }
    root /data/web2;
}

10、try_files file ... uri; 
    try_files file ... =code; 
    可用位置:server, location
    按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误 
    location /images/ {   
        try_files $uri /images/default.gif; #找不到图片 默认图片代替 
    } 
    location / {
        try_files $uri $uri/index.html $uri.html =404;  
    }

定义客户端请求的相关配置

代码语言:javascript
复制
11、keepalive_timeout timeout [header_timeout]; 
    设定保持连接超时时长,0表示禁止长连接,默认为75s
    可用位置:http, server, location

12、keepalive_requests number; 
    在一次长连接上所允许请求的资源的最大数量 默认为100
    可用位置:http, server, location

13、keepalive_disable none | browser ... 
    对哪种浏览器禁用长连接
    可用位置:http, server, location

14、send_timeout time; 
    向客户端发送响应报文的超时时长,此处是指两次写操作之间的间隔时长,而非整个响应过程的传输时长.如果客户端在这段时间内没有收到任何东西,连接将被关闭
    可用位置:http, server, location

15、client_body_buffer_size size; 
    用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置
    可用位置:http, server, location

16、client_body_temp_path path [level1 [level2 [level3]]]; 
    设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量
    可用位置:http, server, location 
    目录名为16进制的数字; 
    client_body_temp_path /var/tmp/client_body 1 2 2
    1 1级目录占1位16进制,即2^4=16个目录0-f 
    2 2级目录占2位16进制,即2^8=256个目录00-ff 
    2 3级目录占2位16进制,即2^8=256个目录00-ff

对客户端进行限制的相关配置

代码语言:javascript
复制
17、limit_rate rate;
    限制响应给客户端的传输速率,单位是bytes/second 默认值0表示无限制
    可用位置:http, server, location, if in location

18、limit_except method ... { ... },仅用于location 
    限制客户端使用除了指定的请求方法之外的其它方法 
    method:GET, HEAD, POST, PUT, DELETE MKCOL, COPY, MOVE, OPTIONS, PROPFIND,PROPPATCH, LOCK, UNLOCK, PATCH 
    limit_except GET {
        allow 192.168.1.0/24; 
        deny  all; 
    } 除了GET和HEAD之外其它方法仅允许192.168.1.0/24网段主机使用 

文件操作优化的配置

代码语言:javascript
复制
19、aio on | off | threads[=pool]; 
    是否启用aio功能 该指令出现在0.8.11版本中。
    可用位置:http, server, location

20、directio size | off; 
    是否同步(直接)写磁盘,而非写缓存,在Linux主机启用O_DIRECT标记,则文件大于等于给定大小时使用,例如:directio 4m 大于4M直接写磁盘
    可用位置:http, server, location

21、open_file_cache off; 
    open_file_cachemax=N [inactive=time]; 
    可用位置:http, server, location
    nginx可以缓存以下三种信息: 
    (1) 文件元数据:文件的描述符、文件大小和最近一次的修改时间 
    (2) 打开的目录结构 
    (3) 没有找到的或者没有权限访问的文件的相关信息 
        max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现管理
        LRU算法参考:http://blog.csdn.net/xiao_mrs_li/article/details/69257694
        inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项,将被删除

22、open_file_cache_errors on | off; 
    是否缓存查找时发生错误的文件一类的信息默认值为off
    可用位置:http, server, location

23、open_file_cache_min_uses number; 
    open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项 默认值为1 
    可用位置:http, server, location

24、open_file_cache_validtime; 
    缓存项有效性的检查频率默认值为60s
    可用位置:http, server, location

这里只写了几个ngx_http_core_module 模块参数更多请参考官网 地址链接

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • http协议相关的配置结构
    • ngx_http_core_module
    相关产品与服务
    轻量应用服务器
    轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档