Nginx 虚拟主机与请求分发配置详解(listen、server_name、location)

listen

listen address:port [可选参数]

默认listen 80;

配置块:server

注意:不加端口时默认监听 80

eg.

listen localhost:8000;
listen *:8000;

可选参数

default

将所在的 server 块作为整个 Web 服务默认的 server 块,若没有设置 default 会将 nginx.conf 中的第一个 server 块设为默认。

当请求无法匹配到所有主机域名时,就会选择默认虚拟主机

default _server

同 default

backlog = num

默认: -1

TCP 中 backlog 的大小,当阻塞时,设置挂起连接队列的最大长度,列满后建立新连接会失败

rcvbuf = size

默认:8k

socket 接收缓冲的大小,在接收数据比较大的场景中可以适当调整

sndbuf = size

默认:8k

socket 发送缓冲的大小,在发送数据比较大的场景中可以适当调整

accept_filter

为监听套接字设置过滤器,仅支持 FreeBSD 和 NetBSD 5.0+ 系统

deferred

设置后只有用户在真正发送请求数据时才会唤醒 worker 进程处理这个连接,适用于大并发的情况下。

bind

address:port

listen 指令指定了 bind 参数时,它将绑定到指定的 IP 地址上。这意味着 nginx 服务器将只监听指定 IP 地址上的特定端口,并且只接受该 IP 地址上的传入连接,只有同时对一个端口监听多个地址时才会生效

ssl

当前监听端口的连接必须基于 SSL 协议

server_name

server_name name [...]

默认server_name "";

配置块:server

server_name 后可跟多个主机名称

Nginx 在处理请求时会按照配置文件中的顺序进行匹配

  1. 单个域名: 可以直接指定一个单独的域名,例如:

    server_name example.com;

    这表示该虚拟主机配置将用于处理所有针对 example.com 的请求。

  2. 多个域名: 可以在同一 server 块中指定多个域名,使用空格分隔,例如:

    server_name example.com www.example.com;

    这表示该虚拟主机配置将用于处理所有针对 example.comwww.example.com 的请求。

  3. 通配符: 可以使用通配符来匹配多个域名,常见的通配符包括 *~* 用于模糊匹配,~ 用于正则表达式匹配。例如:

    server_name *.example.com;

    这表示该虚拟主机配置将用于处理所有以 example.com 作为后缀的子域名的请求。

  4. 正则表达式: 可以使用正则表达式来进行更灵活的匹配,使用 ~ 开头,例如:

    server_name ~^(www\.)?example\.com$;

    这表示该虚拟主机配置将用于处理所有以 example.com 开头(可选的 www.)的请求,其中 ^ 表示字符串的开始,$ 表示字符串的结束。

  5. 默认服务器: 可以将 server_name 设置为 _,表示默认服务器,用于处理无法匹配到其他虚拟主机的请求,例如:

    server_name _;

    这表示该虚拟主机配置将用于处理所有未被其他虚拟主机匹配到的请求。

location

location [=|~|~*|^~|@]/uri/{...}

配置块:server

location 它可以用于匹配 URL 中的路径,并指定该路径下的配置规则

  1. 精确匹配路径:

    location /path {
        # 针对 /path 的配置规则
    }

    这表示当请求的路径为 /path 时,将应用 location 中指定的配置规则。

  2. 前缀匹配路径:

    location ^~ /prefix {
        # 针对以 /prefix 开头的路径的配置规则
    }

    使用 ^~ 表示前缀匹配,这样会优先匹配该规则。例如,当请求的路径为 /prefix/example 时,将应用 location 中指定的配置规则。

  3. 正则表达式匹配路径:

    location ~* \.(jpg|jpeg|png)$ {
        # 针对以 .jpg、.jpeg 或 .png 结尾的路径的配置规则
    }

    使用 ~* 表示正则表达式匹配,这里的正则表达式 \.(jpg|jpeg|png)$ 匹配以这些文件扩展名结尾的路径。

  4. 正则表达式匹配路径(区分大小写):

    location ~ \.(gif|css)$ {
        # 针对以 .gif 或 .css 结尾的路径的配置规则(区分大小写)
    }

    使用 ~ 表示正则表达式匹配,但是区分大小写。

  5. Exact Match:

    location = /exact_path {
        # 针对精确匹配 /exact_path 的路径的配置规则
    }

    使用 = 表示精确匹配,只有当请求路径完全等于 /exact_path 时才应用该规则。

  6. 通用匹配:

    location / {
        # 针对所有路径的配置规则
    }

    如果没有其他 location 规则匹配,这个通用 location 会匹配任何路径。

  7. 反向代理:

    location /app/ {
        proxy_pass http://backend_server;
        # 反向代理配置
    }

    这个例子配置了一个反向代理,将以 /app/ 开头的请求转发到 backend_server

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值