编程技术分享平台

网站首页 > 技术教程 正文

Nginx 备忘录 - 02. 配置文件与虚拟主机

xnh888 2024-10-07 17:35:40 技术教程 16 ℃ 0 评论

一、配置文件初识

Nginx 主配置文件:/opt/nginx/conf/nginx.conf

# 允许进程数量,
# 建议设置为 cpu 核心数或者 auto 自动检测
worker_processes 1;

# 事件模块
events {
  # 单个进程最大连接数
  # 最大连接数 = 连接数 * 进程数
  worker_connections 1024;
}

http {
  # 文件扩展名与文件类型映射表(在conf目录)
  include mime.types;
  # 默认文件类型,
  # 如果 mime.types 预先定义的类型没匹配上,
  # 默认使用二进制流的方式传输
  default_type application/octet-stream;

  # 是否开启零拷贝
  # 即直接从磁盘读取文件并发送到网络接口,
  # 减少了从磁盘向内存拷贝的过程。
  sendfile on;

  # 长连接超时时间,单位是秒
  keepalive_timeout 65;

  # 虚拟主机的配置
  server {
    # 监听端口
    listen 80;
    # 域名,可以有多个,用空格隔开
    server_name localhost;

    # 要匹配的 URI 及对应配置
    location / {
      # 根目录
      root html;
      # 默认页
      index index.html index.htm;
    }

    # 错误页配置,错误码与 location 映射
    error_page 500 502 503 504 /50x.html;

    # /50x.html 文件所在位置
    location = /50x.html {
      root html;
    }
  }

  # 引入其他配置文件
  include /opt/nginx/conf/conf.d/*.conf;
}

二、虚拟主机

nginx 的虚拟主机就是通过 nginx.conf 中 server 节点指定的,想要设置多个虚拟主机,配置多个 server 节点即可:

http {
  # 第一个虚拟主机的配置
  server {
    listen 80;
    server_name www.liwy-nginx.com;
  
    location / {
      root html;
      index index.html;
    }
  }

  # 第二个虚拟主机的配置
  server {
    listen 80;
    server_name www.liwy-nginx-8081.com;
    # ... ...
  }
}

当有多个虚拟主机时,配置文件都写在 nginx.conf 中,会很臃肿。我们可以为每个虚拟主机建立单独的配置文件,然后在 nginx.conf 中,使用 include 进行导入。

# nginx.conf

http {
  # ... ...
  
  # 引入其他配置文件
  include /opt/nginx/conf/conf.d/*.conf;
}
# /opt/nginx/conf/conf.d/server-8082.conf;

server {
  # 监听端口
  listen 80;
  server_name *.liwy-nginx-8082.com;
  
  # 要匹配的 URI 及对应配置
  location / {
    proxy_pass http://192.168.2.13:8082;
  }
}

三、listen 配置

# 监听IP端口号
Syntax:  listen address[:port]
         listen port
Default: listen *:80 | *:8000;
Context: server

四、server_name 配置

# 设置虚拟主机名称
Syntax:	 server_name name ...;
Default: server_name "";
Context: server

server_name 的配置方式有三种:

# 精确匹配
server_name www.liwy-nginx.com;

# 通配符匹配,
# 通配符不能出现在域名的中间,
# 只能出现在首段或尾段
server_name *liwy-nginx.com www.liwy*;

# 正则表达式匹配
# 使用 ~ 作为正则表达式字符串的开始标记
server_name ~^www\.(\w)+\.com$;

使用正则表达式时,我们还可以将匹配的分组作为参数在后面使用:

# 使用正则的分组作为变量
server {
  server_name ~^(www\.)?(.+)$;

  location / {
    root /sites/$2;
  }
}

# 捕获分组并设置变量名称
server {
  server_name ~^(www\.)?(?<domain>.+)$;

  location / {
    root /sites/$domain;
  }
}

客户发起请求时,会使用请求的域名与我们配置的 server_name 进行匹配,来确定命中的虚拟主机,当请求的域名与多个 server_name 都匹配时,则将按照以下优先级顺序选择第一个匹配的虚拟主机:

  1. 确切名称
  2. 以星号开头的最长通配符名称
  3. 以星号结尾的最长通配符名称
  4. 第一个匹配的正则表达式(按配置中的顺序)

五、默认 server

当请求没有匹配到 server_name 时,会使用默认的 server 进行处理,我们可以通过 default_server 指定默认的 server:

server {
  listen 80 default_server;
  server_name _;
  return 403;
}

如果没有明确指定默认的 server,则将监听该端口的第一个 server 设置为默认 server。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表