Nginx 之 http配置段介绍

1  概述

本文将介绍nginx里http配置段的相关配置,主要介绍ngx_http_core_module这个模块的相关功能和命令。由于主配置文件的http配置段里有 include /etc/nginx/conf.d/*.conf; 这个配置,因此可以单独在路径/etc/nginx/conf.d/下面单独编写配置文件

2  HTTP配置段

2.1  http协议相关的配置结构

http {

...

...各server的公共配置

server {每个server用于定义一个虚拟主机

...

}

server {

...

server_name 虚拟主机名

root 主目录

alias 路径别名

location [OPERATOR] URL { 指定URL的特性

...

if CONDITION {

...

}

}

}

}

2.2  与套接字相关的配置

.1、server

server { ... }

在ngnix里,实际是没有virtualhost的概念,都是主机,监听端口号,要放在server里,不能所有的机器只用一个监听端口配置。要分别配置监听端口

配置一个虚拟主机

server {

listen  address[:PORT]|PORT;

server_name  SERVER_NAME;

root  /PATH/TO/DOCUMENT_ROOT;

}

注意:listen  address[:PORT]|PORT;是两种写法

写法一:listen  172.18.50.73:8080

写法二:listen  8080

例子

server {

listen 17

2.18.50.73:8088;

server_name www.sunny.com;

root /usr/share/nginx/html/diysrv;

}

.2、listen

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发送缓冲区大小

虚拟主机的创建,三个方法

(1)基于port;

listen PORT;指令监听在不同的端口

(2)基于ip的虚拟主机

listen IP:PORT; IP地址不同

(3)基于hostname

server_name  fqdn;指令指向不同的主机名

例子如下

注意:基于ip 和FQDN要把默认主站点的server配置去除,否则主页面会出错

#基于ip

server {

listen 80;

server_name 172.18.50.199;

root /usr/share/nginx/html/baseip;

}

#基于FQDN

server {

listen 80;

server_name www.tracy.com;

location / {

root /usr/share/nginx/html/basefqdn;

index index.html;

}

}

#基于端口

server {

listen 9090;

server_name www.sunny.com;

root /usr/share/nginx/html/baseport;

}

.3、server_name

server_name name...;

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

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

dns先解析成名字,才和以下的配置做对比生效

server_name  *.magedu.com   www.magedu.*

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

server_name  ~^www\d+\.magedu\.com$

以上语句\d表示[0-9],命令表示匹配www开头的,www[0-9].magedu.com结尾的

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

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

(2)左侧*通配符如:*.magedu.com

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

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

(5) default_server

.4、tcp_nodelay

tcp_nodelay  on | off;

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

当为off时,延迟发送,合并多个请求后再发送,凑齐多个请求后在发送给后台处理,但是这个情况可能会导致客户端等待,会比较慢,所以一般是不延迟发送

默认on时,不延迟发送

可用于:http,server, location

.5、sendfile

sendfile  on | off;

是否启用sendfile功能,在内核中封装报文直接发送,速度更快,默认Off

.6、server_tokens

server_tokens  on | off | build | string

是否在响应报文的Server首部显示nginx版本,默认是on,建议设置为off

2.3定义路径相关的配置

.7、root

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

server {

...

root  /data/www/vhost1;

}

.8、location

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

=:对URI做精确匹配;

^~:对URI的最左边部分做匹配检查,不区分字符大小写

~:对URI做正则表达式模式匹配,区分字符大小写

~*:对URI做正则表达式模式匹配,不区分字符大小写

不带符号:匹配起始于此uri的所有的uri

匹配优先级从高到低:=, ^~,~/~*,不带符号

location @name { ... }

location是重点,可以定义复杂的逻辑关系,或者实现身份验证,重定向等, 后面跟URL,根据URL做相应的控制,匹配到相应的url后做什么操作, 这个相当于条件判断

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

.示例一:

server {

server_name  www.sunny.com;

location  /images/  {

root  /data/imgs/;

}

}

测试:当访问http:// www.sunny.com/images/aa.jpg将会被转到访问/data/imgs/images/aa.jpg

.9、alias

alias  path;

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

例子

server {

listen 8080;

server_name www.sunny.com;

root /usr/share/nginx/html/diysrv;

location  /images {

alias  /app/test;

}

}

表示当访问http://www.sunny.com:8080/images/将都会被转换到路径/app/test下的对应资源

如访问http://www.sunny.com:8080/images/相当于是访问了/app/test/index.html

如访问http://www.sunny.com:8080/images/aa相当于是访问了/app/test/aa

区分alias和root例子:

location /bbs/ {

alias  /web/forum/;

}

当访问http://172.18.50.73/bbs相当于访问该机器下的/web/forum/index.html资源

location /bbs/ {

root /web/forum/;

} --> /web/forum/bbs/index.html

当访问http://172.18.50.73/bbs相当于访问该机器下的/web/forum/bbs/index.html资源

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

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

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

.10、index

index  file ...;

指定默认网页资源,注意:ngx_http_index_module模块

.11、error_page

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

例子

例一,用alias

error_page 404  /404.html;

location  /404.html {

alias  /app/error_pages/404.html;

}

#表示当访问网站出现404报错的时候,就跳转到/app/error_pages/404.html这个页面

例二,用root

error_page 404  /404.html;

location  /404.html {

alias  /app/error_pages/;

}

#表示当访问网站出现404报错的时候,就跳转到/app/error_pages/404.html这个页面

例三

error_page 404=200  /404.html;

location /404.html {

alias /app/error_pages/404.html;

}

#注意等号的位置,404后面有空格,然后跟=200,等号和200之间没有空格,错误页面返回200的代码,而不返回404代码,防止客户端访问该网页发生错误代码的时候被劫持

.12、try_files

try_files  file ... uri;

try_files  file ... =code;

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

例子

location  /images/  { try_files  $uri   /images/default.gif; }

默认先找$uri这个资源,如果没有,就访问/images/default.gif

注意这里的$uri是变量,假设家目录是/usr/share/nginx/html,那么上例表示访问http://172.18.50.73/images时尝试访问/usr/share/nginx/html/images/index.html和/usr/share/nginx/html/ default.gif的资源

location / { try_files $uri  $uri /index.html $uri.html =404; }

表示依次先找$uri  $uri /index.html$uri.html,如果都不存在,就返回报错代码是404报错

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

.13、keepalive_timeout

keepalive_timeout   timeout  [header_timeout];

设定保持连接超时时长,0表示禁止长连接,默认为75s,可以调整短点。

.14、keepalive_requests

keepalive_requests  number;

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

.15、keepalive_disable

keepalive_disable   none | browser ...

对哪种浏览器禁用长连接

.16、send_timeout

send_timeout   time;

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

.17、client_body_buffer_size

client_body_buffer_size  size;

用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置。注意,这里是接收,不是下发数据,上传文件到该网站,才看得到效果

.18、client_body_temp_path

client_body_temp_path  path [level1 [level2 [level3]]];

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

这里指定的路径下存放文件,目录名为16进制的数字,是经过hash运算后,利用hash的值的最后几位数,依次分层,如三层目录进行存放文件

例子

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

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

.19、limit_rate

limit_rate   rate;

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

.20、limit_except

limit_except  method ... { ... },仅用于location

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

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

location {

limit_except   GET {

allow 192.168.1.0/24;

deny all;

}

}

除了GET和HEAD之外其它方法仅允许192.168.1.0/24网段主机使用

2.6文件操作优化的配置

.21、aio

aio   on | off | threads[=pool];是否启用aio功能,默认是on

.22、directio

directio  size | off;一般是异步

是否同步(直接)写磁盘,而非写缓存,在Linux主机启用O_DIRECT标记,则文件大于等于给定大小时使用,例如directio  4m

.23、open_file_cache

open_file_cache  off;

open_file_cache  max=N  [inactive=time];

nginx可以缓存以下三种信息:缓存的是元数据,不是数据本身

(1)文件元数据:文件的描述符、文件大小和最近一次的修改时间

(2)打开的目录结构

(3)没有找到的或者没有权限访问的文件的相关信息

max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现管理

inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项,将被删除

inactive=time为10分钟;open_file_cache_min_uses为3,表示在10分钟内访问低于3次表示非活动的,该文件就不会被缓存,会被清空

.24、open_file_cache_errors

open_file_cache_errors on | off;

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

.25、open_file_cache_min_uses

open_file_cache_min_uses  number;

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

.26、open_file_cache_valid

open_file_cache_valid  time;

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

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 配置运行Nginx服务器用户(组) 用于配置运行Nginx服务器用户(组)的指令是user,其语法格式为: use...
    吃瓜的东阅读 4,471评论 0 41
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 1,985评论 0 9
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,858评论 0 3
  • 1.ngnix介绍 ngnix www服务软件 俄罗斯人开发 开源 性能很高 本身是一款静态WWW软件 静态小文件...
    逗比punk阅读 2,075评论 1 6