我有一个安装了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)