通过 php-fpm 提供一些 js/html 文件

通过 php-fpm 提供一些 js/html 文件

我有一个包含 nginx 和 wordpress 的 docker-compose 设置。我按照网上的一个教程操作,一切似乎都运行正常。

但是我有一个关键插件,它直接通过 PHP 生成几个 html/js 文件。这意味着 HTML 代码包含<script>带有路径的标签/script.js,插件会捕获该特定名称并以适当的内容响应。这里不涉及 url-rewrite 模块,只有一些自写的(即来自插件)

我不知道如何配置 nginx 以允许 fpm docker 镜像提供服务端生成的 js。

现在我有以下设置:

location / {
  try_files   $uri $uri/ /index.php?$query_string;
}
location ~* \.php$ {
  fastcgi_pass wordpress:9000;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location ~ ^/(script1.js|script2.js) {
  fastcgi_pass wordpress:9000;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location ~* \.(css|js|gif|ico|jpeg|jpg|png)$ {
  expires max;
  log_not_found off;
}

一旦我重新请求该页面,script1 和 script2 就会响应 404。

一般来说这是可以实现的吗?

答案1

如果静态文件存在,则该try_files语句将提供静态文件,否​​则将请求发送到/index.php。由于script1.jsscript2.js文件不存在,因此它们由 处理/index.php,这正是您想要的。

location ~ ^/(script1.js|script2.js)location ~* \.(css|js|gif|ico|jpeg|jpg|png)$破坏了这个逻辑。

一个解决方案是删除该location ~ ^/(script1.js|script2.js)块(这是错误的),然后将try_files语句放入该location ~* \.(css|js|gif|ico|jpeg|jpg|png)$块中。

例如:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
location ~* \.php$ {
    ...
}
location ~* \.(css|js|gif|ico|jpeg|jpg|png)$ {
    try_files $uri /index.php?$query_string;
    expires max;
    log_not_found off;
}

相关内容