11# 配置
22
3- FrankenPHP、Caddy 以及 Mercure 和 Vulcain 模块可以使用 [ Caddy 支持的格式] ( https://caddyserver.com/docs/getting-started#your-first-config ) 进行配置。
3+ FrankenPHP、Caddy 以及 [ Mercure] ( mercure.md ) 和 [ Vulcain] ( https://vulcain.rocks ) 模块可以使用 [ Caddy 支持的格式] ( https://caddyserver.com/docs/getting-started#your-first-config ) 进行配置。
44
5- 在 [ Docker 镜像] ( docker.md ) 中,` Caddyfile ` 位于 ` /etc/frankenphp/Caddyfile ` 。
6- 静态二进制文件也会在执行 ` frankenphp run ` 命令的目录中查找 ` Caddyfile ` 。
7- 你可以使用 ` -c ` 或 ` --config ` 选项指定自定义路径。
5+ 最常见的格式是 ` Caddyfile ` ,它是一种简单、易读的文本格式。默认情况下,FrankenPHP 会在当前目录中查找 ` Caddyfile ` 。你可以使用 ` -c ` 或 ` --config ` 选项指定自定义路径。
86
9- PHP 本身可以 [ 使用 ` php.ini ` 文件 ] ( https://www.php.net/manual/zh/configuration.file.php ) 进行配置。
7+ 以下是用于服务 PHP 应用程序的最小 ` Caddyfile ` 示例:
108
11- 根据你的安装方法,PHP 解释器将在上述位置查找配置文件。
9+ ``` caddyfile
10+ # 响应的主机名
11+ localhost
12+
13+ # 可选:提供文件的目录,否则默认为当前目录
14+ #root public/
15+ php_server
16+ ```
17+
18+ 一个更高级的 ` Caddyfile ` ,支持更多功能并提供方便的环境变量,可以在 [ FrankenPHP 仓库中] ( https://github.com/php/frankenphp/blob/main/caddy/frankenphp/Caddyfile ) 找到,并随 Docker 镜像提供。
19+
20+ PHP 本身可以[ 使用 ` php.ini ` 文件] ( https://www.php.net/manual/en/configuration.file.php ) 进行配置。
21+
22+ 根据你的安装方法,FrankenPHP 和 PHP 解释器将在以下位置查找配置文件。
1223
1324## Docker
1425
26+ FrankenPHP:
27+
28+ - ` /etc/frankenphp/Caddyfile ` : 主配置文件
29+ - ` /etc/frankenphp/Caddyfile.d/*.caddyfile ` : 自动加载的附加配置文件
30+
31+ PHP:
32+
1533- ` php.ini ` : ` /usr/local/etc/php/php.ini ` (默认情况下不提供 ` php.ini ` )
1634- 附加配置文件: ` /usr/local/etc/php/conf.d/*.ini `
1735- PHP 扩展: ` /usr/local/lib/php/extensions/no-debug-zts-<YYYYMMDD>/ `
@@ -29,12 +47,24 @@ RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini
2947
3048## RPM 和 Debian 包
3149
32- - ` php.ini ` : ` /etc/frankenphp/php.ini ` (默认情况下提供带有生产预设的 ` php.ini ` 文件)
33- - 附加配置文件: ` /etc/frankenphp/php.d/*.ini `
34- - PHP 扩展: ` /usr/lib/frankenphp/modules/ `
50+ FrankenPHP:
51+
52+ - ` /etc/frankenphp/Caddyfile ` : 主配置文件
53+ - ` /etc/frankenphp/Caddyfile.d/*.caddyfile ` : 自动加载的附加配置文件
54+
55+ PHP:
56+
57+ - ` php.ini ` : ` /etc/php-zts/php.ini ` (默认情况下提供带有生产预设的 ` php.ini ` 文件)
58+ - 附加配置文件: ` /etc/php-zts/conf.d/*.ini `
3559
3660## 静态二进制文件
3761
62+ FrankenPHP:
63+
64+ - 在当前工作目录: ` Caddyfile `
65+
66+ PHP:
67+
3868- ` php.ini ` : 执行 ` frankenphp run ` 或 ` frankenphp php-server ` 的目录,然后是 ` /etc/frankenphp/php.ini `
3969- 附加配置文件: ` /etc/frankenphp/php.d/*.ini `
4070- PHP 扩展: 无法加载,将它们打包在二进制文件本身中
@@ -55,15 +85,15 @@ localhost {
5585}
5686```
5787
58- 你还可以使用全局选项显式配置 FrankenPHP:
59- ` frankenphp ` [ 全局选项] ( https://caddyserver.com/docs/caddyfile/concepts#global-options ) 可用于配置 FrankenPHP。
88+ 你还可以使用 ` frankenphp ` [ 全局选项] ( https://caddyserver.com/docs/caddyfile/concepts#global-options ) 显式配置 FrankenPHP:
6089
6190``` caddyfile
6291{
6392 frankenphp {
6493 num_threads <num_threads> # 设置要启动的 PHP 线程数量。默认:可用 CPU 数量的 2 倍。
65- max_threads <max_threads > # 限制可以在运行时启动的额外 PHP 线程的数量。默认值:num_threads。可以设置为 'auto'。
94+ max_threads <num_threads > # 限制可以在运行时启动的额外 PHP 线程的数量。默认值:num_threads。可以设置为 'auto'。
6695 max_wait_time <duration> # 设置请求在超时之前可以等待的最大时间,直到找到一个空闲的 PHP 线程。 默认:禁用。
96+ max_idle_time <duration> # 设置一个自动扩展的线程在被停用之前可以空闲的最长时间。默认:5s。
6797 php_ini <key> <value> # 设置一个 php.ini 指令。可以多次使用以设置多个指令。
6898 worker {
6999 file <path> # 设置工作脚本的路径。
@@ -79,7 +109,7 @@ localhost {
79109# ...
80110```
81111
82- 或者,您可以使用 ` worker ` 选项的一行简短形式。
112+ 或者,您可以使用 ` worker ` 选项的一行简短形式:
83113
84114``` caddyfile
85115{
@@ -91,7 +121,7 @@ localhost {
91121# ...
92122```
93123
94- 如果您在同一服务器上服务多个应用程序,您还可以定义多个工作线程:
124+ 如果您在同一服务器上服务多个应用程序,您还可以定义多个工作线程:
95125
96126``` caddyfile
97127app.example.com {
@@ -113,12 +143,12 @@ other.example.com {
113143# ...
114144```
115145
116- 使用 ` php_server ` 指令通常是您需要的。
146+ 使用 ` php_server ` 指令通常是您需要的,
117147但是如果你需要完全控制,你可以使用更低级的 ` php ` 指令。
118148` php ` 指令将所有输入传递给 PHP,而不是先检查是否
119149是一个PHP文件。在[ 性能页面] ( performance.md#try_files ) 中了解更多关于它的信息。
120150
121- 使用 ` php_server ` 指令等同于以下配置:
151+ 使用 ` php_server ` 指令等同于以下配置:
122152
123153``` caddyfile
124154route {
@@ -152,7 +182,7 @@ php_server [<matcher>] {
152182 file_server off # 禁用内置的 file_server 指令。
153183 worker { # 为此服务器创建特定的worker。可以多次指定以创建多个workers。
154184 file <path> # 设置工作脚本的路径,可以相对于 php_server 根目录
155- num <num> # 设置要启动的 PHP 线程数,默认为可用数量的 2 倍
185+ num <num> # 设置要启动的 PHP 线程数,默认为可用 CPU 数量的 2 倍
156186 name <name> # 为worker设置名称,用于日志和指标。默认值:worker文件的绝对路径。定义在 php_server 块中时,始终以 m# 开头。
157187 watch <path> # 设置要监视文件更改的路径。可以为多个路径多次指定。
158188 env <key> <value> # 设置一个额外的环境变量为给定值。可以多次指定以设置多个环境变量。此工作进程的环境变量也从 php_server 父进程继承,但可以在此处覆盖。
@@ -167,7 +197,7 @@ php_server [<matcher>] {
167197由于 workers 只会启动您的应用程序一次并将其保留在内存中,
168198因此对您的 PHP 文件的任何更改不会立即反映出来。
169199
170- Wworkers 可以通过 ` watch ` 指令在文件更改时重新启动。
200+ Workers 可以通过 ` watch ` 指令在文件更改时重新启动。
171201这对开发环境很有用。
172202
173203``` caddyfile
@@ -181,8 +211,10 @@ Wworkers 可以通过 `watch` 指令在文件更改时重新启动。
181211}
182212```
183213
184- 如果没有指定 ` watch ` 目录,它将回退到 ` ./**/*.{php,yaml,yml,twig,env} ` ,
185- 这将监视启动 FrankenPHP 进程的目录及其子目录中的所有 ` .php ` 、` .yaml ` 、` .yml ` 、` .twig ` 和 ` .env ` 文件。
214+ 此功能通常与[ 热重载] ( hot-reload.md ) 结合使用。
215+
216+ 如果没有指定 ` watch ` 目录,它将回退到 ` ./**/*.{env,php,twig,yaml,yml} ` ,
217+ 这将监视启动 FrankenPHP 进程的目录及其子目录中的所有 ` .env ` 、` .php ` 、` .twig ` 、` .yaml ` 和 ` .yml ` 文件。
186218你也可以通过 [ shell 文件名模式] ( https://pkg.go.dev/path/filepath#Match ) 指定一个或多个目录:
187219
188220``` caddyfile
@@ -213,8 +245,7 @@ Wworkers 可以通过 `watch` 指令在文件更改时重新启动。
213245如果您想将工作脚本放在公共目录外,可以通过 ` match ` 指令来实现。
214246
215247` match ` 指令是 ` try_files ` 的一种优化替代方案,仅在 ` php_server ` 和 ` php ` 内部可用。
216- 以下示例将在公共目录中提供文件(如果存在)
217- 并将请求转发给与路径模式匹配的 worker。
248+ 以下示例将始终在公共目录中提供文件(如果存在),否则会将请求转发给与路径模式匹配的 worker。
218249
219250``` caddyfile
220251{
@@ -229,34 +260,6 @@ Wworkers 可以通过 `watch` 指令在文件更改时重新启动。
229260}
230261```
231262
232- ### 全双工 (HTTP/1)
233-
234- 在使用HTTP/1.x时,可能希望启用全双工模式,以便在完整主体之前写入响应。
235- 已被阅读。(例如:WebSocket、服务器发送事件等。)
236-
237- 这是一个可选配置,需要添加到 ` Caddyfile ` 中的全局选项中:
238-
239- ``` caddyfile
240- {
241- servers {
242- enable_full_duplex
243- }
244- }
245- ```
246-
247- > [ !CAUTION]
248- >
249- > 启用此选项可能导致不支持全双工的旧HTTP/1.x客户端死锁。
250- > 这也可以通过配置 ` CADDY_GLOBAL_OPTIONS ` 环境配置来实现:
251-
252- ``` sh
253- CADDY_GLOBAL_OPTIONS=" servers {
254- enable_full_duplex
255- }"
256- ```
257-
258- 您可以在[ Caddy文档] ( https://caddyserver.com/docs/caddyfile/options#enable-full-duplex ) 中找到有关此设置的更多信息。
259-
260263## 环境变量
261264
262265可以使用以下环境变量在不修改 ` Caddyfile ` 的情况下注入 Caddy 指令:
@@ -268,15 +271,13 @@ CADDY_GLOBAL_OPTIONS="servers {
268271
269272至于 FPM 和 CLI SAPIs,环境变量默认在 ` $_SERVER ` 超全局中暴露。
270273
271- [ the ` variables_order ` PHP 指令 ] ( https://www.php.net/manual/en/ini.core.php#ini.variables-order ) 的 ` S ` 值始终等于 ` ES ` ,无论 ` E ` 在该指令中的其他位置如何。
274+ ` variables_order ` PHP 指令中 ` S ` 的值始终等于 ` ES ` ,无论 ` E ` 在该指令中的其他位置如何。
272275
273276## PHP 配置
274277
275- 加载[ 附加的 PHP 配置文件] ( https://www.php.net/manual/en/configuration.file.php#configuration.file.scan ) ,
276- ` PHP_INI_SCAN_DIR ` 环境变量可以被使用。
277- 设置后,PHP 将加载给定目录中所有带有 ` .ini ` 扩展名的文件。
278+ 为了加载[ 附加的 PHP 配置文件] ( https://www.php.net/manual/en/configuration.file.php#configuration.file.scan ) ,可以使用 ` PHP_INI_SCAN_DIR ` 环境变量。设置后,PHP 将加载给定目录中所有带有 ` .ini ` 扩展名的文件。
278279
279- 您还可以通过在 ` Caddyfile ` 中使用 ` php_ini ` 指令来更改 PHP 配置:
280+ 您还可以通过在 ` Caddyfile ` 中使用 ` php_ini ` 指令来更改 PHP 配置:
280281
281282``` caddyfile
282283{
@@ -293,6 +294,42 @@ CADDY_GLOBAL_OPTIONS="servers {
293294}
294295```
295296
297+ ### 禁用 HTTPS
298+
299+ 默认情况下,FrankenPHP 会自动为所有主机名(包括 ` localhost ` )启用 HTTPS。
300+ 如果你想禁用 HTTPS(例如在开发环境中),你可以将 ` SERVER_NAME ` 环境变量设置为 ` http:// ` 或 ` :80 ` :
301+
302+ 或者,你可以使用 [ Caddy 文档] ( https://caddyserver.com/docs/automatic-https#activation ) 中描述的所有其他方法。
303+
304+ 如果你想将 HTTPS 与 ` 127.0.0.1 ` IP 地址而不是 ` localhost ` 主机名一起使用,请阅读[ 已知问题] ( known-issues.md#using-https127001-with-docker ) 部分。
305+
306+ ### 全双工 (HTTP/1)
307+
308+ 在使用 HTTP/1.x 时,可能希望启用全双工模式,以便在整个请求体被读取之前允许写入响应。(例如:[ Mercure] ( mercure.md ) 、WebSocket、Server-Sent Events 等)
309+
310+ 这是一个可选配置,需要添加到 ` Caddyfile ` 中的全局选项中:
311+
312+ ``` caddyfile
313+ {
314+ servers {
315+ enable_full_duplex
316+ }
317+ }
318+ ```
319+
320+ > [ !CAUTION]
321+ >
322+ > 启用此选项可能导致不支持全双工的旧 HTTP/1.x 客户端死锁。
323+ > 这也可以通过 ` CADDY_GLOBAL_OPTIONS ` 环境变量配置来实现:
324+
325+ ``` sh
326+ CADDY_GLOBAL_OPTIONS=" servers {
327+ enable_full_duplex
328+ }"
329+ ```
330+
331+ 您可以在[ Caddy文档] ( https://caddyserver.com/docs/caddyfile/options#enable-full-duplex ) 中找到有关此设置的更多信息。
332+
296333## 启用调试模式
297334
298335使用Docker镜像时,将` CADDY_GLOBAL_OPTIONS ` 环境变量设置为` debug ` 以启用调试模式:
@@ -302,4 +339,3 @@ docker run -v $PWD:/app/public \
302339 -e CADDY_GLOBAL_OPTIONS=debug \
303340 -p 80:80 -p 443:443 -p 443:443/udp \
304341 dunglas/frankenphp
305- ```
0 commit comments