是否可以为一个 URL 设置自定义 fastcgi 缓冲区配置?无需复制大量配置行。
因此,从基本的 PHP-FPM(通过 fastcgi)设置开始:
server {
...
location / {
try_files $uri @php-fpm;
}
location @php-fpm {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
...
}
}
它基本上将任何未知请求发送到index.php
文件。
假设这个index.php
脚本可以响应一个非常大的sitemap.xml
文件(大约 600k)......这会导致错误:
an upstream response is buffered to a temporary file
我可以设置缓冲区:
location @php-fpm {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
...
fastcgi_buffer_size 4k;
fastcgi_buffers 170 4k;
}
但这对于其他所有事情来说似乎有点过分(也隐藏了潜在的问题,例如我知道sitemap.xml
很大,网站上应该没有其他问题)。
我希望使用:
server {
...
location / {
try_files $uri @php-fpm;
}
location = /sitemap.xml {
fastcgi_buffer_size 4k;
fastcgi_buffers 170 4k;
try_files $uri @php-fpm;
}
location @php-fpm {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
...
}
}
但它似乎忽略了缓冲区配置。
也不可能在以下位置创建子位置@php-fpm
:
location @php-fpm {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
...
location = /sitemap.xml {
fastcgi_buffer_size 4k;
fastcgi_buffers 256 4k;
}
}
导致错误:
location "/sitemap.xml" cannot be inside the named location "@php-fpm"
如何对 sitemap.xml 进行单独的重写,它会使用不同的 fastcgi 设置转到不同的命名位置。
未经测试:)
这有点啰嗦,但它应该工作。