在Nginx上为CDN启用/禁用PHP



我有一个安装了Nginx的服务器。
我还有2个域名指向那个服务器。(domain1.com和domain2.com)。第一个域名(domain1.com)为首页网站。另一个域名(domain2.com)是静态内容的CDN,如:JS, CSS,图像和字体文件。

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

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

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

或者我应该使用:

location ~ /something {
  deny all
}

让PHP继续运行?

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

使用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开头的请求将通过php-fpm传递,而不管文件扩展名是什么(甚至是。css)

最新更新