2015-11-19 54 views
7

我有对JavaScript文件expires头这是由PHP产生的问题过期了nginx的与JavaScript文件(由PHP动态生成)

该网站有两种类型的JavaScript文件。一部分是静态JavaScript文件,另一部分是由PHP动态生成的。

的conf没有Expires头

这里没有expires头文件(所有文件返回HTTP 200)加入到.js文件

location/{ 
    try_files $uri $uri/ /index.php; 
} 

location ~ \.php$ { 
    include /var/ini/nginx/fastcgi.conf; 
    fastcgi_pass php; 
    fastcgi_param SCRIPT_FILENAME /var/www/index.php; 
} 

的conf与Expires头

.js文件添加地点那么所有动态生成的文件返回HTTP 404

location/{ 
    try_files $uri $uri/ /index.php; 
} 

location ~ \.php$ { 
    include /var/ini/nginx/fastcgi.conf; 
    fastcgi_pass php; 
    fastcgi_param SCRIPT_FILENAME /var/www/dyndev.dk/public/secure/index.php; 
} 

location ~ \.(js|css)$ { 
    expires 1y; 
    add_header Cache-Control "public"; 
} 

如何使用expires头文件处理静态和动态生成的.js文件?

所有动态genereated JavaScript文件被命名为*-php.js

文件结构

/var/www/public/index.php # All none-static file requests are pointed to index.php 
/var/www/public/js/main.js # Static files 
/var/www/js-dynamically_generated.php # This file is outside the public www, but is routed by PHP since the file doesn't exists inside the public /js 

PHP路由

www.example.com/ -> index.php 
www.example.com/js -> static content 
www.example.com/js/dynamically_generated-php.js -> js-dynamically_generated.php 
+1

如果你用php创建js为什么你不用PHP函数添加标题? – Kiyan

+0

已更新我的问题 – clarkk

回答

6

对于nginx的,PHP是从来没有的JavaScript。 Nginx不能区分呈现html的PHP和呈现javascript的PHP(请纠正我,如果我错了)。

所以要走的路是,要么设置与产生的所有JS PHP文件单独的文件夹(代码没有测试!):

location ~ \normal_php/.php$ { 
    include /var/ini/nginx/fastcgi.conf; 
    fastcgi_pass php; 
    fastcgi_param SCRIPT_FILENAME /var/www/dyndev.dk/public/secure/index.php; 
} 

location ~ \js_php/.php$ { 
    expires 1y; 
    add_header Cache-Control "public"; 

    include /var/ini/nginx/fastcgi.conf; 
    fastcgi_pass php; 
    fastcgi_param SCRIPT_FILENAME /var/www/dyndev.dk/public/secure/index.php; 
} 

...或PHP本身发送标题:

<?php 
header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + (60 * 60))); // 1 hour 
+0

但是,如何将'expires'标题放在.js文件中?问题是,当我为.js文件添加位置时,所有动态生成的.js文件都会返回“404”。在第二个conf中看到我的问题 – clarkk

+0

或者你是说所有php生成的js文件应该被命名为'dynamic_js.php'而不是'dynamic_js-php.js' – clarkk

+0

是的,第二个评论。通过构建作业生成资产会更好,因此您可以使用PHP脚本来生成静态.js文件。 – DanFromGermany