推荐答案
在 Nginx 中,server_name 用于指定服务器块(server block)处理的请求域名。可以通过以下方式配置 server_name:
// www.javascriptcn.com code example
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/example;
index index.html;
}
}在这个配置中,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 参数指定:
// www.javascriptcn.com code example
server {
listen 80 default_server;
server_name _;
location / {
root /var/www/default;
index index.html;
}
}在这个配置中,default_server 参数表示该服务器块是默认的,server_name _; 表示匹配所有未指定的域名。
5. 优先级
当多个服务器块匹配同一个域名时,Nginx 会按照以下优先级顺序选择服务器块:
- 完全匹配的域名。
- 最长的通配符匹配。
- 最长的正则表达式匹配。
- 默认服务器块。
6. 示例
以下是一个完整的示例,展示了如何使用 server_name 配置多个域名、通配符和正则表达式:
// www.javascriptcn.com code example
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/example;
index index.html;
}
}
server {
listen 80;
server_name *.example.com;
location / {
root /var/www/wildcard;
index index.html;
}
}
server {
listen 80;
server_name ~^www\d+\.example\.com$;
location / {
root /var/www/regex;
index index.html;
}
}
server {
listen 80 default_server;
server_name _;
location / {
root /var/www/default;
index index.html;
}
}在这个示例中,Nginx 会根据请求的域名选择相应的服务器块进行处理。