Nginx - 请求处理

Nginx - 请求处理 首页 / Nginx入门教程 / Nginx - 请求处理

我们可以指定多个虚拟服务器,每个服务器由 server {} 上下文描述。

server {
  listen      *:80 default_server;
  server_name javatpoint.co;

  return 200 "Hello from javatpoint.co";
}

server {
  listen      *:80;
  server_name nikita.co;

  return 200 "Hello from nikita.co";
}

server {
  listen      *:81;
  server_name deep.co;

  return 200 "Hello from deep.co";
}

上面的示例将使nginx了解如何处理传入的请求。首先,nginx将检查listen指令以测试哪个虚拟服务器在给定的IP:端口组合上进行监听。然后针对存储服务器域名的Host标头测试 server_name指令中的值。

Nginx按以下顺序选择虚拟服务器:

  • IP:port  带有匹配的指令,即 server_name
  • IP:port  服务器列表,带有 default_server 标志;
  • IP:port 第一个已定义。
  • 如果没有匹配项,请拒绝连接。

在上面的示例中,输出将是:

Request to nikita.co:80     => "Hello from nikita.co"
Request to www.nikita.co:80 => "Hello from javatpoint.co"
Request to deep.co:80     => "Hello from javatpoint.co"
Request to deep.co:81     => "Hello from nikita.co"
Request to nikita.co:81     => "Hello from deep.co"

server_name指令

server_name指令用于接受多个值。它也用于处理通配符匹配和正则表达式。

server_name javatpoint.co www.javatpoint.co; # exact match
server_name *.javatpoint.co;              # wildcard matching
server_name javatpoint.*;                 # wildcard matching
server_name  ~^[0-9]*\.javatpoint\.co$;   # regexp matching

如果有任何歧义,则nginx使用以下顺序:

  • 全称检索;
  • 以星号开头的最长通配符名称,例如" * examples.org",
  • 以星号结尾的最长通配符名称,例如" mail.*";
  • 首先匹配正则表达式。

Nginx将存储三个哈希表:确切名称,以星号开头的通配符和以星号结尾的通配符。如果结果不在上述表中,则将按顺序测试正则表达式。

链接:https://www.learnfk.comhttps://www.learnfk.com/nginx/nginx-processing-requests.html

来源:LearnFk无涯教程网

server_name .javatpoint.co;

它是以下内容的缩写:

server_name  javatpoint.co  www.javatpoint.co  *.javatpoint.co;

仅有一个区别:.javatpoint.co存储在第二个表中,这意味着它比显式声明要慢一些。

无涯教程网

Listen指令

在大多数情况下,我们将看到listen指令接受IP:port值。

listen 127.0.0.1:80;
listen 127.0.0.1;    # port :80 is used by default

listen *:81;
listen 81;           # all ips are used by default

listen [::]:80;      # IPv6 addresses
listen [::1];        # IPv6 addresses

但是,也可以指定UNIX域的套接字:

listen unix:/var/run/nginx.sock;

甚至我们都可以使用主机名:

listen localhost:80;
listen netguru.co:80;

如果该指令不存在,则使用 *:80

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

推荐系统三十六式 -〔刑无刀〕

iOS开发高手课 -〔戴铭〕

正则表达式入门课 -〔涂伟忠〕

Django快速开发实战 -〔吕召刚〕

Spark性能调优实战 -〔吴磊〕

高楼的性能工程实战课 -〔高楼〕

人人都用得上的数字化思维课 -〔付晓岩〕

结构执行力 -〔李忠秋〕

结构思考力 · 透过结构看表达 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)