【问题标题】:Enable/Disable PHP on Nginx for CDN在 Nginx 上为 CDN 启用/禁用 PHP
【发布时间】:2014-08-17 01:57:39
【问题描述】:

我有一台安装了 Nginx 的服务器。
我也有 2 个域指向该服务器。 (domain1.com 和 domain2.com)。第一个域 (domain1.com) 是前端网站。另一个域 (domain2.com) 是静态内容的 CDN,例如:JS、CSS、图像和字体文件。

我设置了域配置文件,一切运行良好。 nginx 服务器上运行着 PHP。

我的问题是:如何在第二个域 (domain2.com) 上禁用 PHP,除非请求在 GET 请求中有“?param=something”?!
它会是这样的:

// PHP is disabled
if($_GET['param']){  
   // Enable PHP  
}

或者我应该使用:

location ~ /something {
  deny all
}

让 PHP 继续运行?!

注意:我需要 php 来处理我传递的参数以输出一些 JS 或 CSS。

【问题讨论】:

    标签: nginx web cdn


    【解决方案1】:

    带有 nginx 的 PHP 与带有 Apache 的 PHP 非常不同,因为 nginx (AFAIK) 没有 mod_php 等效项。

    PHP 由完全独立的守护进程(php-fpm,或通过将请求传递给 apache 服务器等)处理。因此,您可以完全绕过 php,只需让 nginx 处理请求而不将其传递给 php -fpm 或 apache。 很有可能您的 nginx 配置已经设置为仅将 .php 文件移交给 php-fpm。

    现在,如果您试图让 /some-style.css?foo=bar 等请求由 php 处理,那么我建议您简单地将静态资源与动态资源隔离开来。

    您可以创建第三个域,或者简单地使用两个单独的目录。

    /static/foo.css
    

    /dynamic/bar.css?xyz=pdq
    

    然后您可以在位置块内切换到 php。

    location ~ /static {
       try_files $uri =404;
    }
    
    location ~ /dynamic {
       try_files $uri =404;
       include /etc/nginx/fastcgi_params;
       fastcgi_pass 127.0.0.1:9000;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    

    通过上述配置,以/static开头的请求无论文件扩展名(甚至是.php)都会绕过php,而以/dynamic开头的请求无论文件扩展名如何(甚至是.css)都会在php-fpm上传递

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2014-12-17
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 2020-12-05
      • 2022-01-03
      相关资源
      最近更新 更多