Nginx——模块(1)

nginx的模块

nginx高度模块化,但其模块早期不支持DSO机制;1.9.11版本支持动态装载和卸载

核心模块:core module

标准模块:

  • HTTP 模块:ngx_http_*
  • Mail 模块 ngx_mail_*
  • Stream 模块 ngx_stream_*

第三方模块:

ngx_http_core_module 核心模块

1)server { ... }:配置虚拟主机

 # vim /etc/nginx/nginx.conf
 http  {
    server {
        listen 80;
        server_name www.miaosen.tech;
        root /data/www/;
    }
    server {
        listen 80;
        server_name news.miaosen.tech;
        root /data/news/;
    }
}
# nginx  启动服务
# echo news site > /data/news/index.html
# echo www site > /data/www/index.html

  

客户端测试:

# curl www.miaosen.tech
www site
# curl news.miaosen.tech
news site

  

2)listen port|address[:port]|unix:/PATH/TO/SOCKET_FILE

listen address[:port] [default_server] [ssl] [http2 | spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size]

  

  • default_server:设定为默认虚拟主机
  • ssl:限制仅能够通过ssl连接提供服务
  • backlog=number:超过并发连接数后,新请求进入后援队列的长
  • rcvbuf=size:接收缓冲区大小
  • sndbuf=size:发送缓冲区大小

listen PORT; 指令监听在不同的端口,可实现基于端口的虚拟主机

listen IP:PORT; 监听 IP 地址不同,实现基于IP的虚拟主机

3)server_name name ...

虚拟主机的主机名称后可跟多个由空白字符分隔的字符串

支持*通配任意长度的任意字符

    server {
        listen 80;
        server_name *.miaosen.tech;
        root /data/default/;
    }
# echo default > /data/default/index.html
# nginx -s reload
# curl xxx.miaosen.tech
default

  

支持 ~ 起始的字符做正则表达式模式匹配,性能原因慎用

server_name     ~^www\d+\.miaosen\.tech$  #说明:\d 表示 [0-9]

  

匹配优先级机制从高到低:

(1) 首先是字符串精确匹配 如:www.miaosen.com

(2) 左侧*通配符 如:*.miaosen.tech

(3) 右侧*通配符 如:www.miaosen.*

(4) 正则表达式 如: ~^.*\.miaosen\.tech$

(5) default_server

4)tcp_nodelay on|off

在keepalived模式下的连接是否启用TCP_NODELAY选项

当为off时,延迟发送,合并多个请求后再发送

默认on时,不延迟发送

可用于:http, server, location

如果为了节约服务器性能可以打开,如果为了用户体验更好选择关闭

5)sendfile on|off

是否启用sendfile功能,在内核中封装报文直接发送,默认关闭

6)server_tokens on|off|build|string

是否在响应报文的Server首部显示nginx版本,建议关闭

7)root

设置web资源的路径映射;用于指明请求的URL所对应的文档的目录路径,可用于http, server, location, if in location

8)location [ = | ~ | ~* | ^~ ] uri { ... }

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置

# mkdir /data/www/blog/
# echo blog > /data/www/blog/index.html
# vim /etc/nginx/nginx.conf
    server {
        listen 80;
        server_name www.miaosen.tech;
        root /data/www/;
        location /blog {
            root /data/www/;
        }
    }
# curl http://www.miaosen.tech/blog/  #测试
blog

  

=:对URI做精确匹配

^~: 对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 ]
}

  

The “/” request will match configuration A,
the “/index.html” request will match configuration B,
the “/documents/document.html” request will match configuration C,
the “/images/1.gif” request will match configuration D,
and the “/documents/1.jpg” request will match configuration E.

  

9)alias

路径别名,文档映射的另一种机制;仅能用于location上下文

    server {
        listen 80;
        server_name www.miaosen.tech;
        root /data/www/;
        location /blog;
            alias /data/www/blog;  #和root /data/www/;作用相同
        }
    }
# curl http://www.miaosen.tech/blog/
blog

  

注意:location中使用root指令和alias指令的意义不同

(a) root,给定的路径对应于location中的/uri/左侧的/

(b) alias,给定的路径对应于location中的/uri/右侧的/

10)index file ...

指定默认网页文件,注意需要装载 ngx_http_index_module 模块

11)error_page code ... [=[response]] uri

定义错误页,以指定的响应状态码进行响应;可用位置:http, server, location, if in location

# echo "404 not found page" > /data/www/404.html
    server {
        listen 80;
        server_name www.miaosen.tech;
        root /data/www/;
        error_page 404 /404.html;
    }
# curl http://www.miaosen.tech/notfound.html
404 not found page
    server {
        listen 80;
        server_name www.miaosen.tech;
        root /data/www/;
        error_page 404 =200 /404.html;  #将404返回码重定向成200访问码,防止浏览器劫持
    }
# curl -I http://www.miaosen.tech/notfound.html
HTTP/1.1 200 OK  #测试为200正确访问码

  

12)try_files file ... uri | =code

? 按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误

# echo default page > /data/news/default.html
    server {
        listen 80;
        server_name news.miaosen.tech;
        root /data/news/;
        location / {
            try_files $uri /default.html;  #如果用户访问的URI不存在则放回默认页面
        }
    }
# curl http://news.miaosen.tech/index.html
news site
# curl http://news.miaosen.tech/noindex.html
default page
    server {
        listen 80;
        server_name news.miaosen.tech;
        root /data/news/;
        location / {
            try_files $uri $uri/index.html $uri.html =404;
        }
    }
# curl http://news.miaosen.tech/index.html
news site
# curl http://news.miaosen.tech/noindex.html
404 Not Found

  

13)keepalive_timeout timeout [header_timeout]

设定保持连接超时时长,0表示禁止长连接,默认为75s,可用于http, server, location

14)keepalive_requests number

在一次长连接上所允许请求的资源的最大数量,默认为100

15)keepalive_disable none | browser ...

对哪类型的浏览器禁用长连接

16)send_timeout time

向客户端发送响应报文的超时时长,此处是指两次写操作之间的间隔时长,而非整个响应过程的传输时长

17)client_body_buffer_size size

用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;

超出此大小时,其将被暂存到磁盘上的由下面 client_body_temp_path 指令所定义的位置

18)client_body_temp_path path [level1 [level2 [level3]]]

设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量

19)limit_rate rate

限制响应给客户端的传输速率,单位是bytes/second;默认值0表示无限制

20)limit_except method ... { ... }

限制客户端使用除了指定的请求方法之外的其它方法,仅用于location

method:GET(包括HEAD), HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

location /upload {
    root /date/www/;
    limit_except GAT {
        allow 192.168.0.9/24;
        deny all;
    }
}
# 除了 GET和HEAD 之外其它方法仅允许192.168.0.9/24主机使用

  

21)aio on | off | threads[=pool]

是否启用aio功能

22)directio size | off

当文件大于等于给定大小时,例如directio 4m,同步到磁盘,而非写缓存,以防数据丢失

23)open_file_cache off | max=N [inactive=time]

  • max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现管理
  • inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项将被删除

24)open_file_cache_errors on | off

是否缓存查找时发生错误的文件一类的信息,默认值为off

25)open_file_cache_min_uses number

open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项,默认值为1

26)open_file_cache_valid time

缓存项有效性的检查频率,默认值为60s

原文地址:https://www.cnblogs.com/Gmiaomiao/p/9385861.html

时间: 2024-11-09 00:37:15

Nginx——模块(1)的相关文章

FastDFS的php和nginx模块配置

一.FastDFS和php整合 1.安装php # 安装依赖包 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel cu

【重要】Nginx模块之————Lua-Resty-Redis的参数介绍 (Lua-Nginx-Module 模块的Redis客户端驱动程序)

一.描述 这个Lua库是ngx_lua nginx模块的Redis客户端驱动程序:https://github.com/openresty/lua-nginx-module/#readme,这个Lua库利用ngx_lua的cosocket API,确保100%的非阻塞行为.请注意,至少需要ngx_lua 0.5.14或OpenResty 1.2.1.14. 二.方法介绍 除了所有的小写字母外,所有的Redis命令都有自己的方法.您可以在这里找到完整的Redis命令列表:http://redis.

nginx模块开发获取post参数

> 您好!>     我想请问下nginx模块里面怎么获取post参数,能有具体的代码更好!谢谢> 对于 "application/x-www-form-urlencoded" 格式的 POST 参数获取,可以参考 ngx_lua 模块的ngx.req.get_post_args() 函数以及 ngx_form_input 模块的实现: http://wiki.nginx.org/HttpLuaModule#ngx.req.get_post_args https://

nginx 模块nginx_upstream_check_module

我这里用到的nginx为最新版的nginx 所以我使用了最新的插件 nginx_upstream_check_module-master.zip cd nginx-1.7.1 patch -p1 </tmp/nginx_upstream_check_module-master/check_1.5.12+.patch nginx -V ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_s

Nginx模块开发入门(转)

前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并发情况下具有巨大的性能优势. Nginx属于典型的微内核设计,其内核非常简洁和优雅,同时具有非常高的可扩展性.Nginx最初仅仅主要被用于做反向代理,后来随着HTTP核心的成熟和各种HTTP扩展模块的丰富,Nginx越来越多被用来取代Apache而单独承担HTTP Server的责任,例如目前淘宝内

linux下nginx模块开发入门

本文模块编写参考http://blog.codinglabs.org/articles/intro-of-nginx-module-development.html 之前讲了nginx的安装,算是对nginx有了最初步的了解,在配置完之后,我们就可以进行简单的nginx模块开发了. 下面本文展示一个简单的Nginx模块开发全过程,我们开发一个叫echo的handler模块,这个模块功能非常简单,它接收“echo”指令,指令可指定一个字符串参数,模块会输出这个字符串作为HTTP响应.例如,对ngi

Nginx模块开发入门

前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并发情况下具有巨大的性能优势. Nginx属于典型的微内核设计,其内核非常简洁和优雅,同时具有非常高的可扩展性.Nginx最初仅仅主要被用于做反向代理,后来随着HTTP核心的成熟和各种HTTP扩展模块的丰富,Nginx越来越多被用来取代Apache而单独承担HTTP Server的责任,例如目前淘宝内

Nginx模块开发入门(转)

前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并发情况下具有巨大的性能优势. Nginx属于典型的微内核设计,其内核非常简洁和优雅,同时具有非常高的可扩展性.Nginx最初仅仅主要被用于做反向代理,后来随着HTTP核心的成熟和各种HTTP扩展模块的丰富,Nginx越来越多被用来取代Apache而单独承担HTTP Server的责任,例如目前淘宝内

nginx源码分析--nginx模块解析

nginx的模块非常之多,可以认为所有代码都是以模块的形式组织,这包括核心模块和功能模块,针对不同的应用场合,并非所有的功能模块都要被用到,附录A给出的是默认configure(即简单的http服务器应用)下被连接的模块,这里虽说是模块连接,但nginx不会像apache或lighttpd那样在编译时生成so动态库而在程序执行时再进行动态加载,nginx模块源文件会在生成nginx时就直接被编译到其二进制执行文件中,所以如果要选用不同的功能模块,必须对nginx做重新配置和编译.对于功能模块的选

Nginx 模块的工作原理

Nginx 模块的工作原理  Handlers :(处理器模块)此模块直接处理请求 并且进行内容传输以及修改headres信息等操作.Handlers模块只能处理一个. Filters(处理器模块):此类模块只需要对其他服务器模块输出的内容进行修改操做,最后又Nginx操做 proxies(代理模块):此模块是Nginx的htttp upstream之类的模块.这些模块主要与后端一些服务比如fastcgi等进行交互,实现服务代理和负载均衡功能. Nginx工作模式:再工作上,Nginx分为单工进