1、Nginx 指令和上下文

本内容来源于菜鸟:https://www.cainiaojc.com/nginx/nginx-directive-and-context.html

1.1 Directive:

nginx中的配置选项称为指令。该选项有名称和参数,必须以分号(;)结尾,否则nginx将无法加载配置并产生错误。

例子:

gzip on;

1.2 context:

当我们在文本编辑器中打开核心nginx配置文件时,首先我们会注意到配置被组织成树状结构,并且被花括号包围,即“{ }”,这些被花括号包围的位置成为放置配置指令的上下文,此外,配置指令及其参数以分号结尾。

这是我们可以声明指令的部分,它类似于编程语言中的作用域。

上下文可以嵌套在其他上下文中,从而创建上下文层次结构。

例子:

worker_processes 2;      # 全局上下文中的指令
http {                 # http上下文gzip on;           # http上下文中的指令server {           # 服务器上下文listen 80;      # 服务器上下文中的指令}
}

用 # 填充的行是注释,nginx 不会解释。

1.3 指令类型

由于不同指令的继承模型不同,因此在多个上下文中使用同一个指令时要注意,共有三种类型的指令,每种类型都有其继承模型。

1.3.1 普通的:

每个上下文中有一个值,我们只能在上下文中定义它一次,子上下文可以覆盖掉父指令,但此覆盖仅在给定的子上下文中有效。

gzip on;
gzip off;# 在同一个上下文中有两个普通指令是非法的
server {location /downloads {gzip off;}location /assets {# gzip 在这里有效}
}

1.3.2 array

在同一上下文中添加多条指令会增加值而不是完全覆盖他们,在子上下文中定义指令将覆盖给定子撒谎给你下问中父级的所有值。

error_log /var/log/nginx/error.log;
error_log /var/log/nginx/error_notive.log notice;
error_log /var/log/nginx/error_debug.log debug;server {location /downloads {# 这将覆盖所有的父级指令error_log /var/log/nginx/error_downloads.log;}
}

1.3.3 action directive

动作是用于改变事务的指令,他们的继承行行为将取决于模块。

例如:在rewrite 指令情况下,每个匹配的指令都会被执行。

server {rewrite ^ /foobar;location /foobar {rewrite ^ /foo;rewrite ^ /bar;}
}

如果我们尝试访问 /sample:

执行服务器重写,重写从 /sample 到 /foobar。
然后匹配位置 /foobar
location 里的第一个重写被执行,从重写 /foobar 到 /foo
location 里的第二个重写被执行,从重写 /foo 到 /bar

1.4 上下文类型

1.4.1 全局上下文

全局上下文设置nginx的设置,并且是唯一没有被花括号包围的上下文。

全局上下文位于核心nginx配置文件的开头,此上下文的指令不能在任何其他上下文中继承,因此不能被覆盖。

全局上下文用于配置在基本级别上影响整个应用程序的详细信息,在主上下文中配置的一些常见详细信息是运行工作进程的用户和组,工作进程总数以及保存主进程ID的文件,可以在主上下文级别设置整个应用程序的默认错误文件。

user nginx;
worker_processes auto;
pid /run/nginx.pid;
...
...

1.4.2 事件上下文

事件上下文为连接处理设置全局选项,事件上下文包含在全局上下文中。nginx 配置中只能定义一个事件上下文。

nginx 使用基于事件的连接处理模型,因此在此上下文中定义的指令决定了工作进程应如何处理连接。

# main context
events {# events contextworker_connection 768;multi_accept on;
}

1.4.3 http上下文

http上下文用于保存处理 http 或 https 流量的指令

http上下文是事件上下文的兄弟,因此他们必须并排列出,而不是嵌套。他们都是全局上下文的孩子。

较低的上下文处理请求,此级别的指令控制每个虚拟服务器的定义默认值。

user nginx;
worker_processes auto;
pid /run/nginx.pid;
events {# events contextworker_connection 768;multi_accept on;
}
http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;
}

1.4.4 服务器上下文

服务器上下文在http上下文中声明。服务器上下文用于定义nginx虚拟主机设置。http上下文中可以有多个服务器上下文。服务器上下文中的指令处理的是对与特定域名或IP地址关联的资源的请求。

此上下文中的指令可以覆盖许多可能在http上下文中定义的指令,包括文档位置,日志记录,压缩等。除了从http上下文中获取的指令之外,我们还可以配置文件以尝试响应请求、发出重定向和重写,并设置任意变量。

user nginx;
worker_processes auto;
pid /run/nginx.pid;
events {# events contextworker_connection 768;multi_accept on;
}
http {sendfile on;tcp nopush on;tcp nodelay on;keepalive_timeout 65;server {listen 80;server_name domain1.com;root /var/www/html/wordpress}server {listen 80;server_name domain2.com;root /var/www/html/drupal;}
}

1.4.5 location 上下文

location 上下文定义指令来处理客户端的请求。当任何 对资源的请求到达nginx时,它会尝试将URI(统一资源标识符)与其中一个location 匹配并响应地处理它。

可以在服务器块内定义多个location上下文。此外,一个location上下文也可以嵌套在另一个location中。

http {server {listen 80;server_name domain1.com;root /var/www/html/wordpress;location /some_url {# configuration for processing URIs starting with /some_url}location /another_url {# configuration for processing URIs starting with /another_url}}server {listen 80;server_name domain2.com;root /var/www/html/drupal;location /some_url {# configuration for processing URIs starting with /some_url}location /another_url {# configuration for processing URIs starting with /another_url}}
}

1.4.6 upstream 上下文

upstream 上下文用于配置和定义上游服务器。允许此上下文定义后端服务器池,nginx可以代理请求时使用的后端服务器。这个上下文通常是我们正在配置的各种类型的代理。

upstream 上下文使nginx 能够在代理请求的同时执行负载均衡。此上下文在http上下文内部和任何服务器上下文外部定义。

upstream 上下文在服务器或块中将按名称引用。然后将某种类型的请求传递给定义好的服务器池。然后upstream将使用算法(默认为轮询)来确定需要使用那个特定服务器来处理请求。

http {upstream backend_servers {server host1.example.com;server host2.example.com;server host3.example.com;}server {listen 80;server_name example.com;location / {proxy_pass http://backend_servers;}}
}

1.4.7 邮件上下文

尽管nginx最常用作web或反向代理服务器,但它也可以用作高性能邮件代理服务器,用于此类指令的上下文称为邮件上下文。邮件上下文定义为在全局上下文内或http上下文外。

邮件上下文的主要目的是为在服务器上配置邮件代理解决方案提供一个区域。

nginx可以将身份验证请求重定向到外部身份验证服务器。然后,它可以提供对POP3/SMTP/IMAP邮件服务器的访问,以提供实时邮件数据。

通常,邮件上下文如下所示:

# main context
mail {server_name mail.example.com;auth_http localhost:9000/cgi-bin/nginxauth.cgi;proxy_pass_error_message on;
}
http {}

1.4.8 if上下文

if 上下文用于允许有条件地执行其中定义的指令。if上下文就像任何其他编程语言的 if 语句,如果给定条件返回true,则if上下文将执行包含的指令。

由于某些限制,应尽可能避免使用if上下文。

http {server {location /some_url {if (test_condition) {# do some stuff here}}}
}

1.4.9 limit_except 上下文

limit_except 上下文用于防止在 location 上下文中使用除我们明确允许的方法之外的所有 HTTP 方法。例如,如果某些客户端应该有权访问POST 内容并且每个人都应该有能力阅读内容,那么我们可以为此使用limit_except上下文。

location /wp-admin/ {limit_except GET {allow 127.0.0.1;deny all;}
}

1.2.10 杂项上下文

除了上述上下文之外,Nginx 中可用的上下文很少,如下所述。这些上下文依赖于可选模块并且很少使用。

1、split_clients: split_client 上下文将客户端的请求拆分为两个或多个类别。该上下文定义在 HTTP 上下文中,主要用于 A/B 测试。
2、geo: geo 上下文对客户端 IP 地址进行分类。它用于根据连接的 IP 地址映射变量的值。
3、charset_map:此上下文用于将特定字符集添加到“Content-Type”响应头字段。此外,使用上下文,可以将数据从一个字符集转换为另一个字符集,但有一些限制。
4、map: map上下文用于创建变量,其值依赖于其他变量的值,并在http上下文中定义。
5、perl/perl_set:用于在 Perl 中实现位置和变量处理程序,并将 Perl 调用插入 SSI。此外,在 perl_set 上下文的帮助下,我们可以为特定变量安装 Perl 处理程序。
6、类型:类型上下文用正确的文件扩展名映射 MIME 类型。此上下文可能出现在 http 上下文、服务器上下文或位置上下文中。

nginx笔记1:nginx指令与上下文相关推荐

  1. Nginx笔记(一)Nginx

    Nginx 1. Nginx的简介 下载地址 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶 ...

  2. nginx笔记 安装nginx 配置 反向代理 多虚拟主机

    1,检测linux上是否 通过yum安装了nginx rpm   -qi  nginx 2.安装nginx之前的依赖包 yum install gcc patch libffi-devel pytho ...

  3. Nginx笔记-关于nginx.conf中proxy_pass中末尾不加/的坑

    目录 此坑带来的影响 解决方法 此坑带来的影响 这里在前后端分离开发过程中会遇到,使用Nginx,向前端服务发请求! 前端服务通过axios向后端发请求,如下: 这里会出现404的结果如下: 此处的解 ...

  4. Nginx笔记-使用Nginx给vue应用设置一个代理

    目录 注意点 演示 注意点 首先是vue的修改,用脚手架搭建的vue只能是localhost进行访问.修改config下的index.js让其都能访问,修改host为0.0.0.0 第二个要注意的地方 ...

  5. nginx 学习笔记(2) nginx新手入门

    这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...

  6. nginx 学习笔记(3) nginx管理

    nginx可以通过向其发送信号来进行管理.默认情况下主进程的进程ID写到文件/usr/local/nginx/logs/nginx.pid中.当然也可以在配置文件中自定义该pid文件,自定义使用pid ...

  7. Nginx的SSL相关指令

    Nginx的SSL相关指令 因为刚才我们介绍过该模块的指令都是通过ngx_http_ssl_module模块来解析的. >ssl:该指令用来在指定的服务器开启HTTPS,可以使用 listen ...

  8. Nginx 笔记与总结(13)Nginx 的 gzip 压缩

    使用 FireFox(40.0)访问博客园(http://www.cnblogs.com/),观察 http 头信息 请求头信息: Accept-Encoding gzip, deflate 表示浏览 ...

  9. Nginx 笔记与总结(14)expires 缓存设置

    设置缓存,可以提高网站性能. 当网站的部分内容,比如新闻站的图片,一旦发布就不太可能发生更改,此时需要用户在访问一次页面之后,把该页面的图片缓存在用户的浏览器端一段时间,就可以用到 nginx 的 e ...

最新文章

  1. asp.net控件本质
  2. python不简单_不简单的python- 01基础
  3. Pandas列小数转化为百分数
  4. CNCC2017中的深度学习与跨媒体智能
  5. 双十一京东PLUS会员 VS 阿里88VIP,谁的羊毛多?
  6. cherokee php,CentOS安装最快Web服务器Cherokee+MySQL+PHP
  7. (转载)Vim入门图解说明
  8. 对于谷歌应用传统的自动语音识别(ASR)系统的解析
  9. weka矿产分布文件_石材人注意!北方暴雪将至,货车停运,石材停止发货!(附北方石材分布介绍)...
  10. bmc控制卡_BMC IPMI 管理远程服务器
  11. vSphere Client 鼠标不能用的问题
  12. 计算机本地网络如何共享,本地网络共享如何实现?
  13. 职业四象限,分分钟定位你的方向
  14. Java图形界面文字乱码
  15. 基于SDN的访问控制模块实现
  16. Android保存图片和视频到相册
  17. DiskGenius 复制磁盘 提示 设备未就绪
  18. 1998年11月11日,马化腾和同学张志东正式注册——腾讯
  19. ID card No.
  20. 从响应式编程到 Combine 实践

热门文章

  1. 教你从零开始用WebSocket打造一个IM聊天室
  2. 搜索引擎检索的一点经验
  3. 【近几天电脑经常蓝屏后重启,蓝屏时提供错误代码,本文是解决电脑蓝屏问题的记录,看到最后希望对大家有用。】
  4. 日本用计算机模拟核试验,法国:将用超级计算机模拟核试验
  5. 数据结构之你没见过的排序算法!
  6. 【文本差异对比工具网页版】
  7. win10 可以复制但无法粘贴的问题
  8. Android实现键盘弹出界面上移
  9. 利用aether api实现从指定maven仓库下载jar包
  10. 3d稀疏卷积——spconv源码剖析(三)