在Nginx上为CDN启用/禁用PHP

在Nginx上为CDN启用/禁用PHP,nginx,web,cdn,Nginx,Web,Cdn,我有一台安装了Nginx的服务器。 我还有两个指向该服务器的域。(域名1.com和域名2.com)。第一个域(domain1.com)是前端网站。另一个域(domain2.com)是静态内容的CDN,如:JS、CSS、图像和字体文件 我设置了域配置文件,一切正常。nginx服务器上运行着PHP 我的问题是:如何在第二个域(domain2.com)上禁用PHP,除非请求的GET请求中有“?param=something” 它将类似于: // PHP is disabled if($_GET['pa

我有一台安装了Nginx的服务器。
我还有两个指向该服务器的域。(域名1.com和域名2.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的php与使用Apache的php非常不同,因为nginx没有mod_php等价物(AFAIK)

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

现在,如果您试图让php处理/some style.css?foo=bar之类的请求,那么我建议您简单地将静态资源与动态资源分离

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

/static/foo.css
vs

然后可以在位置块内切换到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开头的请求将在php fpm上传递,而不管文件扩展名是什么(偶数.css)

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;
}