使用PHP-FPM的NGINX sub_filter

时间:2017-12-12 09:13:47

标签: php nginx

我似乎无法让sub_filter在nginx上使用PHP-FPM

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

    proxy_set_header Accept-Encoding ""; # no compression allowed or next won't work
    sub_filter '<a href="http://'  '<a href="//';
    sub_filter '<img src="http://' '<img src="//';
    sub_filter_once off;
    sub_filter_types *;
}

作为参考,过滤器与普通HTML文件完美配合

location / {
    try_files $uri $uri/ =404;
    proxy_set_header Accept-Encoding ""; # no compression allowed or next won't work
    sub_filter '<a href="http://'  '<a href="//';
    sub_filter '<img src="http://' '<img src="//';
    sub_filter_once off;
}

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

我们的设置遇到了与您相同的问题。我们发现我们已经打开了PHP压缩。您需要将其关闭。该设置位于php.ini文件中。

压缩设置应为zlib.output_compression = Off

一旦我们更新了该设置并重新启动了PHP,NGINX sub_filter就会按预期工作。

答案 1 :(得分:0)

我有perl CGI脚本,其中的fastcgi_pass指向了我,

zlib.output_compression = Off

不是答案。

gzip off;也不适用于我

我在this中发现,问题可能出在我的后端脚本执行的压缩上。对于proxy_pass,他们使用proxy_set_header Accept-Encoding "";关闭压缩。

在我使用fastcgi_pass的情况下,该指令对我有所帮助(找到了相关答案here):

fastcgi_param HTTP_ACCEPT_ENCODING "";