nginx 不会执行返回 JavaScript 的 PHP 页面

nginx 不会执行返回 JavaScript 的 PHP 页面

这是我为 Silverstripe 网站设置的 nginx (1.1.19) 配置。我也在使用 PHP-FPM。目前,nginx 和 PHP-FPM 大部分都是原始设置。我使用的是单独的 FPM 池,它有自己的 unix 套接字。

server {
  server_name dev.example.com;
  root /srv/www/example.com/dev;

  index index.php index.html;

  access_log logs/dev.example.com.access.log;
  error_log logs/dev.example.com.error.log;

  location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|eot|mp4|ogg|ogv|webm)$ {
    expires 7d;
    access_log off;
    access_log off;
    log_not_found off;
  }

  error_page  404  /framework/main.php;

  location / {
    try_files $uri @silverstripe;
  }

  location @silverstripe {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/framework/main.php;
    fastcgi_param SCRIPT_NAME /framework/main.php;
    fastcgi_param QUERY_STRING url=$uri&$args;
    fastcgi_buffer_size 32k;
    fastcgi_buffers 4 32k;
    fastcgi_busy_buffers_size 64k;
    fastcgi_pass unix:/var/run/php.fpm.example.sock;
  }                                                                                                                                                                                                                       
}

在 CMS 中,它尝试加载 Tiny MCE 脚本 ( tiny_mce_gzip.php),这是一个应该返回 JavaScript 的 PHP 脚本。但它并没有这样做,看起来它只是将 PHP 脚本作为纯文本返回。请求响应只是 PHP 文本,这导致浏览器失败,因为它试图将其解释为 JavaScript(我认为),并给出此错误:

Uncaught SyntaxError: Unexpected token < 

<似乎是开始标签的开头<?php

我肯定是配置有误,才会出现这种情况。有什么建议吗?如果需要,我可以提供更多信息。

答案1

https://gist.github.com/chtombleson/8703899

` # 将直接调用且需要解释的 php 文件列入白名单 location = /framework/thirdparty/tinymce/tiny_mce_gzip.php { include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; }

location = /framework/thirdparty/tinymce-spellchecker/rpc.php {
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

答案2

IRC 上的 #silverstripe 中的 Wmk 提出了禁用 GZIP 的解决方案:

把这个放进去mysite/_config/config.yml

HtmlEditorField: use_gzip: false

然后用 刷新 Silverstripe 缓存?flush=all。这样你就拿回了你的编辑器 :-)

相关内容