Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 92 additions & 56 deletions docs/cn/config.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,35 @@
# 配置

FrankenPHP、Caddy 以及 Mercure 和 Vulcain 模块可以使用 [Caddy 支持的格式](https://caddyserver.com/docs/getting-started#your-first-config) 进行配置。
FrankenPHP、Caddy 以及 [Mercure](mercure.md)[Vulcain](https://vulcain.rocks) 模块可以使用 [Caddy 支持的格式](https://caddyserver.com/docs/getting-started#your-first-config) 进行配置。

在 [Docker 镜像](docker.md) 中,`Caddyfile` 位于 `/etc/frankenphp/Caddyfile`。
静态二进制文件也会在执行 `frankenphp run` 命令的目录中查找 `Caddyfile`。
你可以使用 `-c` 或 `--config` 选项指定自定义路径。
最常见的格式是 `Caddyfile`,它是一种简单、易读的文本格式。默认情况下,FrankenPHP 会在当前目录中查找 `Caddyfile`。你可以使用 `-c` 或 `--config` 选项指定自定义路径。

PHP 本身可以[使用 `php.ini` 文件](https://www.php.net/manual/zh/configuration.file.php)进行配置。
以下是用于服务 PHP 应用程序的最小 `Caddyfile` 示例:

根据你的安装方法,PHP 解释器将在上述位置查找配置文件。
```caddyfile
# 响应的主机名
localhost

# 可选:提供文件的目录,否则默认为当前目录
#root public/
php_server
```

一个更高级的 `Caddyfile`,支持更多功能并提供方便的环境变量,可以在 [FrankenPHP 仓库中](https://github.com/php/frankenphp/blob/main/caddy/frankenphp/Caddyfile)找到,并随 Docker 镜像提供。

PHP 本身可以[使用 `php.ini` 文件](https://www.php.net/manual/en/configuration.file.php)进行配置。

根据你的安装方法,FrankenPHP 和 PHP 解释器将在以下位置查找配置文件。

## Docker

FrankenPHP:

- `/etc/frankenphp/Caddyfile`: 主配置文件
- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: 自动加载的附加配置文件

PHP:

- `php.ini`: `/usr/local/etc/php/php.ini`(默认情况下不提供 `php.ini`)
- 附加配置文件: `/usr/local/etc/php/conf.d/*.ini`
- PHP 扩展: `/usr/local/lib/php/extensions/no-debug-zts-<YYYYMMDD>/`
Expand All @@ -29,12 +47,24 @@ RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini

## RPM 和 Debian 包

- `php.ini`: `/etc/frankenphp/php.ini`(默认情况下提供带有生产预设的 `php.ini` 文件)
- 附加配置文件: `/etc/frankenphp/php.d/*.ini`
- PHP 扩展: `/usr/lib/frankenphp/modules/`
FrankenPHP:

- `/etc/frankenphp/Caddyfile`: 主配置文件
- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: 自动加载的附加配置文件

PHP:

- `php.ini`: `/etc/php-zts/php.ini`(默认情况下提供带有生产预设的 `php.ini` 文件)
- 附加配置文件: `/etc/php-zts/conf.d/*.ini`

## 静态二进制文件

FrankenPHP:

- 在当前工作目录: `Caddyfile`

PHP:

- `php.ini`: 执行 `frankenphp run` 或 `frankenphp php-server` 的目录,然后是 `/etc/frankenphp/php.ini`
- 附加配置文件: `/etc/frankenphp/php.d/*.ini`
- PHP 扩展: 无法加载,将它们打包在二进制文件本身中
Expand All @@ -55,15 +85,15 @@ localhost {
}
```

你还可以使用全局选项显式配置 FrankenPHP:
`frankenphp` [全局选项](https://caddyserver.com/docs/caddyfile/concepts#global-options) 可用于配置 FrankenPHP。
你还可以使用 `frankenphp` [全局选项](https://caddyserver.com/docs/caddyfile/concepts#global-options) 显式配置 FrankenPHP:

```caddyfile
{
frankenphp {
num_threads <num_threads> # 设置要启动的 PHP 线程数量。默认:可用 CPU 数量的 2 倍。
max_threads <max_threads> # 限制可以在运行时启动的额外 PHP 线程的数量。默认值:num_threads。可以设置为 'auto'。
max_threads <num_threads> # 限制可以在运行时启动的额外 PHP 线程的数量。默认值:num_threads。可以设置为 'auto'。
max_wait_time <duration> # 设置请求在超时之前可以等待的最大时间,直到找到一个空闲的 PHP 线程。 默认:禁用。
max_idle_time <duration> # 设置一个自动扩展的线程在被停用之前可以空闲的最长时间。默认:5s。
php_ini <key> <value> # 设置一个 php.ini 指令。可以多次使用以设置多个指令。
worker {
file <path> # 设置工作脚本的路径。
Expand All @@ -79,7 +109,7 @@ localhost {
# ...
```

或者,您可以使用 `worker` 选项的一行简短形式
或者,您可以使用 `worker` 选项的一行简短形式

```caddyfile
{
Expand All @@ -91,7 +121,7 @@ localhost {
# ...
```

如果您在同一服务器上服务多个应用程序,您还可以定义多个工作线程:
如果您在同一服务器上服务多个应用程序,您还可以定义多个工作线程

```caddyfile
app.example.com {
Expand All @@ -113,12 +143,12 @@ other.example.com {
# ...
```

使用 `php_server` 指令通常是您需要的
使用 `php_server` 指令通常是您需要的
但是如果你需要完全控制,你可以使用更低级的 `php` 指令。
`php` 指令将所有输入传递给 PHP,而不是先检查是否
是一个PHP文件。在[性能页面](performance.md#try_files)中了解更多关于它的信息。

使用 `php_server` 指令等同于以下配置:
使用 `php_server` 指令等同于以下配置

```caddyfile
route {
Expand Down Expand Up @@ -152,7 +182,7 @@ php_server [<matcher>] {
file_server off # 禁用内置的 file_server 指令。
worker { # 为此服务器创建特定的worker。可以多次指定以创建多个workers。
file <path> # 设置工作脚本的路径,可以相对于 php_server 根目录
num <num> # 设置要启动的 PHP 线程数,默认为可用数量的 2 倍
num <num> # 设置要启动的 PHP 线程数,默认为可用 CPU 数量的 2 倍
name <name> # 为worker设置名称,用于日志和指标。默认值:worker文件的绝对路径。定义在 php_server 块中时,始终以 m# 开头。
watch <path> # 设置要监视文件更改的路径。可以为多个路径多次指定。
env <key> <value> # 设置一个额外的环境变量为给定值。可以多次指定以设置多个环境变量。此工作进程的环境变量也从 php_server 父进程继承,但可以在此处覆盖。
Expand All @@ -167,7 +197,7 @@ php_server [<matcher>] {
由于 workers 只会启动您的应用程序一次并将其保留在内存中,
因此对您的 PHP 文件的任何更改不会立即反映出来。

Wworkers 可以通过 `watch` 指令在文件更改时重新启动。
Workers 可以通过 `watch` 指令在文件更改时重新启动。
这对开发环境很有用。

```caddyfile
Expand All @@ -181,8 +211,10 @@ Wworkers 可以通过 `watch` 指令在文件更改时重新启动。
}
```

如果没有指定 `watch` 目录,它将回退到 `./**/*.{php,yaml,yml,twig,env}`,
这将监视启动 FrankenPHP 进程的目录及其子目录中的所有 `.php`、`.yaml`、`.yml`、`.twig` 和 `.env` 文件。
此功能通常与[热重载](hot-reload.md)结合使用。

如果没有指定 `watch` 目录,它将回退到 `./**/*.{env,php,twig,yaml,yml}`,
这将监视启动 FrankenPHP 进程的目录及其子目录中的所有 `.env`、`.php`、`.twig`、`.yaml` 和 `.yml` 文件。
你也可以通过 [shell 文件名模式](https://pkg.go.dev/path/filepath#Match) 指定一个或多个目录:

```caddyfile
Expand Down Expand Up @@ -213,8 +245,7 @@ Wworkers 可以通过 `watch` 指令在文件更改时重新启动。
如果您想将工作脚本放在公共目录外,可以通过 `match` 指令来实现。

`match` 指令是 `try_files` 的一种优化替代方案,仅在 `php_server` 和 `php` 内部可用。
以下示例将在公共目录中提供文件(如果存在)
并将请求转发给与路径模式匹配的 worker。
以下示例将始终在公共目录中提供文件(如果存在),否则会将请求转发给与路径模式匹配的 worker。

```caddyfile
{
Expand All @@ -229,34 +260,6 @@ Wworkers 可以通过 `watch` 指令在文件更改时重新启动。
}
```

### 全双工 (HTTP/1)

在使用HTTP/1.x时,可能希望启用全双工模式,以便在完整主体之前写入响应。
已被阅读。(例如:WebSocket、服务器发送事件等。)

这是一个可选配置,需要添加到 `Caddyfile` 中的全局选项中:

```caddyfile
{
servers {
enable_full_duplex
}
}
```

> [!CAUTION]
>
> 启用此选项可能导致不支持全双工的旧HTTP/1.x客户端死锁。
> 这也可以通过配置 `CADDY_GLOBAL_OPTIONS` 环境配置来实现:

```sh
CADDY_GLOBAL_OPTIONS="servers {
enable_full_duplex
}"
```

您可以在[Caddy文档](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex)中找到有关此设置的更多信息。

## 环境变量

可以使用以下环境变量在不修改 `Caddyfile` 的情况下注入 Caddy 指令:
Expand All @@ -268,15 +271,13 @@ CADDY_GLOBAL_OPTIONS="servers {

至于 FPM 和 CLI SAPIs,环境变量默认在 `$_SERVER` 超全局中暴露。

[the `variables_order` PHP 指令](https://www.php.net/manual/en/ini.core.php#ini.variables-order) 的 `S` 值始终等于 `ES`,无论 `E` 在该指令中的其他位置如何。
`variables_order` PHP 指令中 `S` 的值始终等于 `ES`,无论 `E` 在该指令中的其他位置如何。

## PHP 配置

加载[附加的 PHP 配置文件](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan),
`PHP_INI_SCAN_DIR`环境变量可以被使用。
设置后,PHP 将加载给定目录中所有带有 `.ini` 扩展名的文件。
为了加载[附加的 PHP 配置文件](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan),可以使用 `PHP_INI_SCAN_DIR` 环境变量。设置后,PHP 将加载给定目录中所有带有 `.ini` 扩展名的文件。

您还可以通过在 `Caddyfile` 中使用 `php_ini` 指令来更改 PHP 配置:
您还可以通过在 `Caddyfile` 中使用 `php_ini` 指令来更改 PHP 配置

```caddyfile
{
Expand All @@ -293,6 +294,42 @@ CADDY_GLOBAL_OPTIONS="servers {
}
```

### 禁用 HTTPS

默认情况下,FrankenPHP 会自动为所有主机名(包括 `localhost`)启用 HTTPS。
如果你想禁用 HTTPS(例如在开发环境中),你可以将 `SERVER_NAME` 环境变量设置为 `http://` 或 `:80`:

或者,你可以使用 [Caddy 文档](https://caddyserver.com/docs/automatic-https#activation) 中描述的所有其他方法。

如果你想将 HTTPS 与 `127.0.0.1` IP 地址而不是 `localhost` 主机名一起使用,请阅读[已知问题](known-issues.md#using-https127001-with-docker)部分。

### 全双工 (HTTP/1)

在使用 HTTP/1.x 时,可能希望启用全双工模式,以便在整个请求体被读取之前允许写入响应。(例如:[Mercure](mercure.md)、WebSocket、Server-Sent Events 等)

这是一个可选配置,需要添加到 `Caddyfile` 中的全局选项中:

```caddyfile
{
servers {
enable_full_duplex
}
}
```

> [!CAUTION]
>
> 启用此选项可能导致不支持全双工的旧 HTTP/1.x 客户端死锁。
> 这也可以通过 `CADDY_GLOBAL_OPTIONS` 环境变量配置来实现:

```sh
CADDY_GLOBAL_OPTIONS="servers {
enable_full_duplex
}"
```

您可以在[Caddy文档](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex)中找到有关此设置的更多信息。

## 启用调试模式

使用Docker镜像时,将`CADDY_GLOBAL_OPTIONS`环境变量设置为`debug`以启用调试模式:
Expand All @@ -302,4 +339,3 @@ docker run -v $PWD:/app/public \
-e CADDY_GLOBAL_OPTIONS=debug \
-p 80:80 -p 443:443 -p 443:443/udp \
dunglas/frankenphp
```
Loading