推荐答案
Nginx 的 server 配置块用于定义虚拟服务器的配置。每个 server 块可以配置一个或多个域名(或 IP 地址)的请求处理规则。通过 server 块,Nginx 可以根据请求的主机名或 IP 地址将流量路由到不同的后端服务或处理逻辑。
本题详细解读
1. server 块的基本结构
一个典型的 server 块配置如下:
// www.javascriptcn.com code example
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/html;
index index.html;
}
}listen:指定服务器监听的端口号,可以是 80(HTTP)或 443(HTTPS)。server_name:指定服务器响应的域名或 IP 地址。可以配置多个域名,用空格分隔。location:定义请求的 URI 路径与后端处理逻辑的映射关系。
2. server 块的作用
- 虚拟主机支持:通过
server_name配置,Nginx 可以支持多个虚拟主机,即在同一台服务器上运行多个网站,每个网站有独立的配置。 - 请求路由:根据请求的主机名或 IP 地址,Nginx 可以将请求路由到不同的
server块进行处理。 - 负载均衡:在
server块中,可以配置反向代理,将请求转发到多个后端服务器,实现负载均衡。 - SSL/TLS 配置:可以在
server块中配置 SSL/TLS 证书,启用 HTTPS 加密通信。
3. server 块的优先级
当多个 server 块匹配同一个请求时,Nginx 会根据以下规则选择最合适的 server 块:
- 精确匹配:如果
server_name与请求的主机名完全匹配,则选择该server块。 - 通配符匹配:如果
server_name包含通配符(如*.example.com),则选择匹配的server块。 - 默认服务器:如果没有匹配的
server块,则选择listen指令中标记为default_server的server块。
4. 示例
以下是一个支持多个虚拟主机的配置示例:
// www.javascriptcn.com code example
server {
listen 80;
server_name example.com;
location / {
root /var/www/example;
index index.html;
}
}
server {
listen 80;
server_name another.com;
location / {
root /var/www/another;
index index.html;
}
}
server {
listen 80 default_server;
server_name _;
location / {
return 404;
}
}- 第一个
server块处理example.com的请求。 - 第二个
server块处理another.com的请求。 - 第三个
server块作为默认服务器,处理所有未匹配的请求,并返回 404 状态码。