我在下面的nginx中使用了rewrite指令来重写外部CDN服务器的静态文件的URL。
rewrite ^/static/(css|images|js)/([a-z_\-\.]+)$ http://cdn.domain.com/$1_$2 last;
它的工作原理,但它在浏览器中自动redirect的url。
我怎样才能做到以上重写没有redirect?
您需要更改您的应用程序中的链接,以指向静态包含的CDN。
当你重写到一个http位置时,没有任何nginx可以做,但redirect浏览器(因为CDN在nginx之外,浏览器需要从CDN获取文件)。 由于CDN不是Web服务器的“内部”位置,因此您将会遇到与Apache或任何其他URL重写器相同的问题。
一个选项可能是nginxreplace模块,它可以取代内容。 但是这不处理正则expression式,并会减慢每个请求。 最好是直接更改应用程序的HTML以引用CDN URL。
nginx是区分大小写的(function或错误),使用HTTP://而不是http://例如:
rewrite ^/static/(css|images|js)/([a-z_\-\.]+)$ HTTP://cdn.domain.com/$1_$2 last;
但是请求将被发送到proxy_pass服务器,并且它仅在proxy_pass中的服务器也是web代理服务器的情况下才起作用,其理解
GET HTTP://cdn.domain.com/ HTTP/1.0
如果要隐藏外部CDN服务器的URL,则必须find具有别名支持的CDN。 然后将您的子域(cdn.yourdomain.com)指向CDN。