推荐答案
在 Nginx 中,server_name
用于指定服务器块(server block)处理的请求域名。可以通过以下方式配置 server_name
:
-- -------------------- ---- ------- ------ - ------ --- ----------- ----------- ---------------- -------- - - ---- ----------------- ----- ----------- - -
在这个配置中,server_name
指定了该服务器块将处理 example.com
和 www.example.com
的请求。
本题详细解读
1. server_name
的基本用法
server_name
指令用于定义服务器块(server block)处理的域名。它可以包含一个或多个域名,多个域名之间用空格分隔。例如:
server_name example.com www.example.com;
这个配置表示 Nginx 将处理来自 example.com
和 www.example.com
的请求。
2. 通配符的使用
server_name
支持通配符 *
,可以匹配任意数量的字符。例如:
server_name *.example.com;
这个配置表示 Nginx 将处理所有以 .example.com
结尾的域名请求,如 a.example.com
、b.example.com
等。
3. 正则表达式的使用
server_name
还支持正则表达式,以 ~
开头表示正则匹配。例如:
server_name ~^www\d+\.example\.com$;
这个配置表示 Nginx 将处理所有符合 www
后跟一个或多个数字,并以 .example.com
结尾的域名请求,如 www1.example.com
、www123.example.com
等。
4. 默认服务器
如果请求的域名没有匹配到任何 server_name
,Nginx 会使用默认的服务器块。默认服务器块可以通过 default_server
参数指定:
-- -------------------- ---- ------- ------ - ------ -- --------------- ----------- -- -------- - - ---- ----------------- ----- ----------- - -
在这个配置中,default_server
参数表示该服务器块是默认的,server_name _;
表示匹配所有未指定的域名。
5. 优先级
当多个服务器块匹配同一个域名时,Nginx 会按照以下优先级顺序选择服务器块:
- 完全匹配的域名。
- 最长的通配符匹配。
- 最长的正则表达式匹配。
- 默认服务器块。
6. 示例
以下是一个完整的示例,展示了如何使用 server_name
配置多个域名、通配符和正则表达式:
-- -------------------- ---- ------- ------ - ------ --- ----------- ----------- ---------------- -------- - - ---- ----------------- ----- ----------- - - ------ - ------ --- ----------- -------------- -------- - - ---- ------------------ ----- ----------- - - ------ - ------ --- ----------- ------------------------ -------- - - ---- --------------- ----- ----------- - - ------ - ------ -- --------------- ----------- -- -------- - - ---- ----------------- ----- ----------- - -
在这个示例中,Nginx 会根据请求的域名选择相应的服务器块进行处理。