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

2024-05-11 16:12

本文主要是介绍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

这篇关于Nginx - server、listen、server_name和多服务请求处理(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980021

相关文章

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp