Nginx R31 doc-08-NGINX 和 NGINX Plus 作为 Web 服务器

配置 NGINX 和 NGINX Plus 作为 Web 服务器

设置虚拟服务器

在 NGINX Plus 配置文件中,必须包含至少一个 server 指令来定义一个虚拟服务器。

当 NGINX Plus 处理请求时,首先选择将服务于该请求的虚拟服务器。

nginx 复制代码
http {
    server {
        # 服务器配置
    }
}

可以在 http 上下文中添加多个 server 指令来定义多个虚拟服务器。

服务器配置块通常包括一个 listen 指令,用于指定服务器监听请求的 IP 地址和端口(或 Unix 域套接字和路径)。接受 IPv4 和 IPv6 地址;将 IPv6 地址括在方括号中。

下面的示例显示了一个服务器配置,该服务器监听 IP 地址 127.0.0.1 和端口 8080:

nginx 复制代码
server {
    listen 127.0.0.1:8080;
    # 其他服务器配置
}

如果省略了端口,则使用标准端口。同样,如果省略了地址,则服务器将监听所有地址。如果完全不包含 listen 指令,则使用"标准"端口为 80/tcp,而"默认"端口为 8000/tcp,这取决于超级用户权限。

如果有多个服务器匹配请求的 IP 地址和端口,NGINX Plus 将请求的 Host 标头字段与 server 块中的 server_name 指令进行比较。server_name 的参数可以是完整(精确)名称、通配符或正则表达式。通配符是一个以星号 (*) 开头、结尾或两者兼有的字符字符串;星号匹配任何字符序列。NGINX Plus 使用 Perl 语法进行正则表达式;在配置文件中出现的顺序决定了它们的优先级。

nginx 复制代码
server {
    listen      80;
    server_name example.org www.example.org;
    #...
}

如果 Host 标头字段匹配了多个名称,则 NGINX Plus 会按以下顺序搜索名称,并使用找到的第一个匹配项:

  • 精确名称
  • 最长的以星号开头的通配符,例如 *.example.org
  • 最长的以星号结尾的通配符,例如 mail.*
  • 第一个匹配的正则表达式(按照配置文件中出现的顺序)

如果 Host 标头字段与任何服务器名称都不匹配,则 NGINX Plus 会将请求路由到该请求到达的端口的默认服务器。默认服务器是 nginx.conf 文件中列出的第一个服务器,除非您使用 listen 指令的 default_server 参数来显式地指定服务器为默认服务器。

nginx 复制代码
server {
    listen 80 default_server;
    #...
}

配置位置

NGINX Plus 可以根据请求 URI 将流量发送到不同的代理或为不同的文件提供服务。这些块使用位于 server 指令中的 location 指令定义。

例如,您可以定义三个 location 块来指示虚拟服务器将一些请求发送到一个代理服务器,将其他请求发送到不同的代理服务器,并通过从本地文件系统提供文件来为其余的请求提供服务。

NGINX Plus 将请求 URI 与所有 location 指令的参数进行比较,并应用匹配位置中定义的指令。在每个 location 块内部,通常可以(有少数例外)放置更多的 location 指令,以进一步细化特定组的请求的处理方式。

在 location 指令中,有两种类型的参数:前缀字符串(路径名)和正则表达式。对于请求 URI 要与前缀字符串匹配,必须以前缀字符串开头。

下面的示例 location 使用路径名参数,匹配以 /some/path/ 开头的请求 URI,例如 /some/path/document.html。(它不会匹配 /my-site/some/path,因为 /some/path 不是该 URI 的开头。)

nginx 复制代码
location /some/path/ {
    #...
}

正则表达式前面带有波浪号()用于区分大小写匹配,或者带有波浪号-星号(*)用于不区分大小写匹配。下面的示例匹配任何位置包含字符串 .html 或 .htm 的 URI。

nginx 复制代码
location ~ \.html? {
    #...
}

NGINX 位置优先级

为了找到最匹配 URI 的位置,NGINX Plus 首先将 URI 与具有前缀字符串的位置进行比较。然后搜索具有正则表达式的位置。

对于正则表达式,会给予更高的优先级,除非使用 ^~ 修饰符。在前缀字符串中,NGINX Plus 选择最具体的一个(即最长且最完整的字符串)。选择用于处理请求的位置的确切逻辑如下所示:

  • 将 URI 与所有前缀字符串进行比较。
  • =(等号)修饰符定义 URI 和前缀字符串的精确匹配。如果找到了精确匹配,则搜索停止。
  • 如果 ^~(插入波浪号)修饰符在最长匹配的前缀字符串之前,则不检查正则表达式。
  • 存储最长匹配的前缀字符串。
  • 将 URI 与正则表达式进行比较。
  • 当找到第一个匹配的正则表达式时停止处理,并使用相应的位置。
  • 如果没有正则表达式匹配,则使用对应于存储的前缀字符串的位置。

对于 = 修饰符的典型用例是请求 /(斜杠)。如果请求 / 频繁,则将 = / 指定为 location 指令

的参数可以加快处理速度,因为在第一次比较后搜索匹配项就会停止。

nginx 复制代码
location = / {
    #...
}

位置上下文可以包含指令,定义如何解析请求 - 服务静态文件或将请求传递到代理服务器。

在下面的示例中,匹配第一个位置上下文的请求将从 /data 目录提供文件,而匹配第二个位置上下文的请求将被传递到托管 <www.example.com> 域的代理服务器。

nginx 复制代码
server {
    location /images/ {
        root /data;
    }

    location / {
        proxy_pass http://www.example.com;
    }
}

root 指令指定文件系统路径,用于搜索要提供的静态文件。与位置相关联的请求 URI 附加到路径以获取要提供的静态文件的完整名称。在上面的示例中,对于 /images/example.png 的请求,NGINX Plus 会提供文件 /data/images/example.png。

proxy_pass 指令将请求传递到使用配置的 URL 访问的代理服务器。然后将来自代理服务器的响应传递回客户端。在上面的示例中,所有 URI 不以 /images/ 开头的请求都将传递到代理服务器。

使用变量

您可以在配置文件中使用变量,使 NGINX Plus 根据定义的情况处理请求。变量是在运行时计算的命名值,用作指令的参数。变量以其名称的开头为 $(美元)符号表示。变量根据 NGINX 的状态定义信息,例如当前正在处理的请求的属性。

有许多预定义的变量,例如核心 HTTP 变量,并且您可以使用 set、map 和 geo 指令定义自定义变量。大多数变量在运行时计算,并包含与特定请求相关的信息。例如,remote_addr 包含客户端 IP 地址,uri 包含当前 URI 值。

nginx 系列

Nginx-01-聊一聊 nginx

Nginx-01-Nginx 是什么

Nginx-02-为什么使用 Nginx

Nginx-02-Nginx Ubuntu 安装 + windows10 + WSL ubuntu 安装 nginx 实战笔记

Nginx-02-基本使用

Nginx-03-Nginx 项目架构

Nginx-04-Docker Nginx

Nginx-05-nginx 反向代理是什么?windows 下如何配置使用 nginx

Nginx-06-nginx 汇总入门介绍

Nginx R31 doc 官方文档-01-nginx 如何安装

Nginx R31 doc-02-nginx 基本功能

Nginx R31 doc-03-HTTP Load Balancing HTTP 负载均衡

Nginx R31 doc-04-HTTP Health Checks

Nginx R31 doc-05-Dynamic Configuration of Upstreams with the NGINX Plus API 使用 NGINX Plus API 动态配置上游服务器

Nginx R31 doc-06-Accepting the PROXY Protocol

Nginx R31 doc-07-内容缓存

Nginx R31 doc-08-Configuring NGINX and NGINX Plus as a Web Server 配置 NGINX 和 NGINX Plus 作为 Web 服务器

Nginx R31 doc-09-Serving Static Content 静态内容

Nginx R31 doc-10-NGINX Reverse Proxy 反向代理

Nginx R31 doc-11-Compression and Decompression 压缩与解压缩

Nginx R31 doc-12-NGINX SSL Termination 安全加密

Nginx R31 doc-13-Limiting Access to Proxied HTTP Resources 访问限流

Nginx R31 doc-14-Dynamic Denylisting of IP Addresses 动态拒绝IP地址

Nginx R31 doc-15-Live Activity Monitoring 实时活动监控

Nginx R31 doc-16-logging 配置日志

Nginx R31 doc-17-debugging 调试

Nginx R31 doc-18-High Availability Support for NGINX Plus in On-Premises Deployments

Nginx 实战-01-nginx ubuntu 安装笔记

Nginx 实战-01-nginx windows 安装笔记

Nginx 实战-02-nginx proxy_pass 服务代理访问 使用笔记 ubuntu nodejs

Nginx 实战-03-nginx 负载均衡

Nginx 实战-04-nginx 不同的地址访问不同的服务

Nginx 实战-05-nginx 反向代理实现域名到指定的 ip

相关推荐
救救孩子把4 分钟前
深入理解 Java 对象的内存布局
java
落落落sss7 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
万物皆字节13 分钟前
maven指定模块快速打包idea插件Quick Maven Package
java
夜雨翦春韭19 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
我行我素,向往自由26 分钟前
速成java记录(上)
java·速成
一直学习永不止步32 分钟前
LeetCode题练习与总结:H 指数--274
java·数据结构·算法·leetcode·数组·排序·计数排序
邵泽明32 分钟前
面试知识储备-多线程
java·面试·职场和发展
程序员是干活的1 小时前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节
煸橙干儿~~1 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
2401_854391081 小时前
Spring Boot大学生就业招聘系统的开发与部署
java·spring boot·后端