Nginx - server、listen、server_name和多服务请求处理(三)

server 上下文

server {
}

server指令用于配置一个虚拟服务。listen指令描述了本服务可接受链接的所有地址和端口,server_name指令列举了所有服务的名字,例如

server {
    listen      80;
    server_name example.org www.example.org;
}

listen 指令

Syntax:	
listen address[:port] [default_server] [ssl] [http2 | quic] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen port [default_server] [ssl] [http2 | quic] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen unix:path [default_server] [ssl] [http2 | quic] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

Default:	listen *:80 | *:8000;
Context:	server

例如一些常见的用法,listen指令指定了该服务监听的地址和端口

listen 127.0.0.1:8000;
listen 127.0.0.1;	# 不加端口,默认80
listen 8000;
listen *:8000;
listen localhost:8000;

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

server_name 指令

Syntax:	server_name name ...;
Default:	
server_name "";
Context:	server

设置虚拟服务的名字,可以使用通配符和正则表达式

server_name example.com www.example.com;
 server_name example.com *.example.com www.example.*;
 server_name www.example.com ~^www\d+\.example\.com$;

多服务请求处理

当有多个服务时,nginx如何决定使用哪个server进行处理呢?例如在*:80端口监听了多个服务:

server {
	listen 80 default_server;
	server_name test.com;

	default_type text/html;

	location / {
		return 200 'Default Main Server\n';
	}
}

server {
	listen 80;
	server_name zh.test.com;

	default_type text/html;

	location / {
		return 200 'Chinese Server\n';
	}
}

server {
	listen 80;
	server_name en.test.com;

	default_type text/html;

	location / {
		return 200 'English Server\n';
	}
}

nginx 将通过测试请求头中的Host字段来决定使用哪个服务。如果没有server name 被匹配到,或者请求中不包含请求头,则使用该端口的默认服务。listen指令中的default_server可以用来显式配置默认服务,如果没有该字段,那么默认使用该端口的第一个服务。

使用curl请求测试,分别得到

$ curl -H ‘Host: test.com' -v localhost 
Default Main Server
$ curl -H ‘Host: zh.test.com' -v localhost 
Chinese Server
$ curl -H ‘Host: en.test.com' -v localhost 
English Server

name-based 和 IP-based混合虚拟服务

服务器可以有多个公网IP以及解析多个域名,如下配置:

server {
	listen 127.0.0.2:80;
	server_name test.com;

	default_type text/html;

	location / {
		return 200 'Default Main Server\n';
	}
}

server {
	listen 127.0.0.1:80;
	server_name zh.test.com;

	default_type text/html;

	location / {
		return 200 'Chinese Server\n';
	}
}

server {
	listen 127.0.0.1:80;
	server_name en.test.com;

	default_type text/html;

	location / {
		return 200 'English Server\n';
	}
}

访问测试:

$ curl -H 'Host: test.com' -v 127.0.0.1
Chinese Server
$ curl -H 'Host: test.com' -v 127.0.0.2
Default Main Server
$ curl -H 'Host: zh.test.com' -v 127.0.0.1
Chinese Server
$ curl -H 'Host: zh.test.com' -v 127.0.0.2
Default Main Server

相关推荐

  1. nginx配置服务

    2024-05-11 05:56:06       190 阅读
  2. nginx 配置服务

    2024-05-11 05:56:06       24 阅读
  3. 服务器不支持PUTDELETE请求处理

    2024-05-11 05:56:06       40 阅读
  4. 处理HTTP请求服务器

    2024-05-11 05:56:06       26 阅读
  5. nginx docker 日志打印请求响应

    2024-05-11 05:56:06       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 05:56:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 05:56:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 05:56:06       87 阅读
  4. Python语言-面向对象

    2024-05-11 05:56:06       96 阅读

热门阅读

  1. C++(动态规划之拆分整数)

    2024-05-11 05:56:06       32 阅读
  2. 代码随想录算法训练营 总结篇

    2024-05-11 05:56:06       25 阅读
  3. Linux-解压缩文件命令(gzip、zip、unzip、tar、jar)

    2024-05-11 05:56:06       34 阅读
  4. 设计模式——享元模式(Flyweight)

    2024-05-11 05:56:06       35 阅读
  5. C 标准库 - <stdlib.h>

    2024-05-11 05:56:06       30 阅读
  6. ~MAY~

    2024-05-11 05:56:06       31 阅读
  7. Python注释

    2024-05-11 05:56:06       29 阅读
  8. 006 springCloudAlibaba seata

    2024-05-11 05:56:06       24 阅读