
通用插件为 BunkerWeb 提供了核心配置框架,允许您定义控制 Web 服务如何受保护和交付的基本设置。这个基础插件管理着整个 BunkerWeb 生态系统的基本方面,如安全模式、服务器默认值、日志记录行为和关键操作参数。
工作原理:
当 MULTISITE 设置为 yes 时,BunkerWeb 可以托管和保护多个网站,每个网站都有其独特的配置。此功能在以下场景中特别有用:
在多站点模式下,每个站点都由一个唯一的 SERVER_NAME 标识。要应用特定于站点的设置,请将主 SERVER_NAME 作为前缀添加到设置名称中。例如:
www.example.com_USE_ANTIBOT=captcha 为 www.example.com 启用验证码。myapp.example.com_USE_GZIP=yes 为 myapp.example.com 启用 GZIP 压缩。这种方法可确保在多站点环境中将设置应用于正确的站点。
BunkerWeb 中的某些设置支持同一功能的多个配置。要定义多组设置,请在设置名称后附加一个数字后缀。例如:
REVERSE_PROXY_URL_1=/subdir 和 REVERSE_PROXY_HOST_1=http://myhost1 配置第一个反向代理。REVERSE_PROXY_URL_2=/anotherdir 和 REVERSE_PROXY_HOST_2=http://myhost2 配置第二个反向代理。这种模式允许您为需要不同用例的不同值的功能(如反向代理、端口或其他设置)管理多个配置。
可以使用空格分隔的列表调整顺序:
PLUGINS_ORDER_INIT、PLUGINS_ORDER_INIT_WORKER、PLUGINS_ORDER_TIMER。PLUGINS_ORDER_SET、PLUGINS_ORDER_ACCESS、PLUGINS_ORDER_SSL_CERTIFICATE、PLUGINS_ORDER_HEADER、PLUGINS_ORDER_LOG、PLUGINS_ORDER_PREREAD、PLUGINS_ORDER_LOG_STREAM、PLUGINS_ORDER_LOG_DEFAULT。SECURITY_MODE 设置决定了 BunkerWeb 如何处理检测到的威胁。这个灵活的功能允许您根据具体需求在监控或主动阻止可疑活动之间进行选择:
detect:记录潜在威胁而不阻止访问。此模式对于以安全、无干扰的方式识别和分析误报非常有用。block(默认):主动阻止检测到的威胁,同时记录事件以防止未经授权的访问并保护您的应用程序。切换到 detect 模式可以帮助您识别和解决潜在的误报,而不会干扰合法客户端。一旦这些问题得到解决,您就可以自信地切换回 block 模式以获得全面保护。
=== "核心设置"
| 设置 | 默认值 | 上下文 | 多个 | 描述 |
| --------------------- | ----------------- | --------- | ---- | ------------------------------------------------------------------ |
| `SERVER_NAME` | `www.example.com` | multisite | 否 | **主域名:** 此站点的主域名。在多站点模式下为必需。 |
| `BUNKERWEB_INSTANCES` | `127.0.0.1` | global | 否 | **BunkerWeb 实例:** 以空格分隔的 BunkerWeb 实例列表。 |
| `MULTISITE` | `no` | global | 否 | **多站点:** 设置为 `yes` 以启用托管具有不同配置的多个网站。 |
| `SECURITY_MODE` | `block` | multisite | 否 | **安全级别:** 控制安全强制执行的级别。选项:`detect` 或 `block`。 |
| `SERVER_TYPE` | `http` | multisite | 否 | **服务器类型:** 定义服务器是 `http` 还是 `stream` 类型。 |
=== "API 设置"
| 设置 | 默认值 | 上下文 | 多个 | 描述 |
| ------------------ | ------------- | ------ | ---- | ---------------------------------------------------------------------------------------------- |
| `USE_API` | `yes` | global | 否 | **激活 API:** 激活 API 以控制 BunkerWeb。 |
| `API_HTTP_PORT` | `5000` | global | 否 | **API 端口:** API 的监听端口号。 |
| `API_HTTPS_PORT` | `5443` | global | 否 | **API HTTPS 端口:** API 的监听端口号 (TLS)。 |
| `API_LISTEN_HTTP` | `yes` | global | 否 | **API 监听 HTTP:** 启用 API 的 HTTP 监听器。 |
| `API_LISTEN_HTTPS` | `no` | global | 否 | **API 监听 HTTPS:** 启用 API 的 HTTPS (TLS) 监听器。 |
| `API_LISTEN_IP` | `0.0.0.0` | global | 否 | **API 监听 IP:** API 的监听 IP 地址。 |
| `API_SERVER_NAME` | `bwapi` | global | 否 | **API 服务器名称:** API 的服务器名称(虚拟主机)。 |
| `API_WHITELIST_IP` | `127.0.0.0/8` | global | 否 | **API 白名单 IP:** 允许联系 API 的 IP/网络列表。 |
| `API_TOKEN` | | global | 否 | **API 访问令牌(可选):** 如果设置,所有 API 请求都必须包含 `Authorization: Bearer <token>`。 |
注意:出于引导原因,如果您启用 `API_TOKEN`,您必须在 BunkerWeb 实例和调度程序的**两个**环境中都设置它。当 `API_TOKEN` 存在于其环境中时,调度程序会自动包含 `Authorization` 标头。如果未设置,则不发送标头,BunkerWeb 将不强制执行令牌身份验证。您可以通过设置 `API_LISTEN_HTTPS=yes`(端口:`API_HTTPS_PORT`,默认 `5443`)通过 HTTPS 公开 API。
使用 curl 的测试示例(替换令牌和主机):
```bash
curl -H "Host: bwapi" \
-H "Authorization: Bearer $API_TOKEN" \
http://<bunkerweb-host>:5000/ping
curl -H "Host: bwapi" \
-H "Authorization: Bearer $API_TOKEN" \
--insecure \
https://<bunkerweb-host>:5443/ping
```
=== "网络和端口设置"
| 设置 | 默认值 | 上下文 | 多个 | 描述 |
| ----------------------- | ------------ | ------ | ---- | ---------------------------------------------------------- |
| `HTTP_PORT` | `8080` | global | 是 | **HTTP 端口:** HTTP 流量的端口号。留空以禁用HTTP监听。 |
| `HTTPS_PORT` | `8443` | global | 是 | **HTTPS 端口:** HTTPS 流量的端口号。留空以禁用HTTPS监听。 |
| `USE_IPV6` | `no` | global | 否 | **IPv6 支持:** 启用 IPv6 连接。 |
| `DNS_RESOLVERS` | `127.0.0.11` | global | 否 | **DNS 解析器:** 要使用的解析器的 DNS 地址。 |
| `CLIENT_BODY_TIMEOUT` | `10s` | global | 否 | **客户端请求体超时:** 读取客户端请求体的超时时间。 |
| `CLIENT_HEADER_TIMEOUT` | `10s` | global | 否 | **客户端请求头超时:** 读取客户端请求头的超时时间。 |
| `KEEPALIVE_TIMEOUT` | `15s` | global | 否 | **Keepalive 超时:** 客户端 Keepalive 连接的超时时间。 |
| `SEND_TIMEOUT` | `10s` | global | 否 | **发送超时:** 向客户端传输响应的超时时间。 |
=== "流服务器设置"
| 设置 | 默认值 | 上下文 | 多个 | 描述 |
| ------------------------ | ------ | --------- | ---- | -------------------------------------------------------------- |
| `LISTEN_STREAM` | `yes` | multisite | 否 | **监听流:** 启用对非 SSL(直通)的监听。 |
| `LISTEN_STREAM_PORT` | `1337` | multisite | 是 | **流端口:** 非 SSL(直通)的监听端口。留空以禁用非SSL流监听。 |
| `LISTEN_STREAM_PORT_SSL` | `4242` | multisite | 是 | **流 SSL 端口:** SSL(直通)的监听端口。留空以禁用SSL流监听。 |
| `USE_TCP` | `yes` | multisite | 否 | **TCP 监听:** 启用 TCP 监听(流)。 |
| `USE_UDP` | `no` | multisite | 否 | **UDP 监听:** 启用 UDP 监听(流)。 |
=== "工作进程设置"
| 设置 | 默认值 | 上下文 | 多个 | 描述 |
| ------------------------- | ------ | ------ | ---- | ----------------------------------------------------------------------------------------------------- |
| `WORKER_PROCESSES` | `auto` | global | 否 | **工作进程数:** 工作进程的数量。设置为 `auto` 以使用可用核心数。 |
| `WORKER_CONNECTIONS` | `1024` | global | 否 | **工作连接数:** 每个工作进程的最大连接数。 |
| `WORKER_RLIMIT_NOFILE` | `2048` | global | 否 | **文件描述符限制:** 每个工作进程的最大打开文件数。 |
| `WORKER_SHUTDOWN_TIMEOUT` | `30s` | global | 否 | **工作进程关闭超时:** 工作进程优雅关闭的超时时间。在重新加载期间,旧工作进程在此超时后将被强制终止。 |
=== "内存设置"