jack Asked: 2010-02-07 22:29:55 +0800 CST2010-02-07 22:29:55 +0800 CST 2010-02-07 22:29:55 +0800 CST Nginx 重写 url 而无需重定向 772 我在 nginx 中使用下面的重写指令将静态文件的 url 重写到外部 CDN 服务器。 rewrite ^/static/(css|images|js)/([a-z_\-\.]+)$ http://cdn.domain.com/$1_$2 last; 它可以工作,但它会在浏览器中自动重定向 url。 如何在没有重定向的情况下进行上述重写? rewrite nginx 3 个回答 Voted Vladimir F. 2010-11-28T16:06:47+08:002010-11-28T16:06:47+08:00 nginx 区分大小写(功能或错误),使用 HTTP:// 而不是 http:// 例如: rewrite ^/static/(css|images|js)/([a-z_\-\.]+)$ HTTP://cdn.domain.com/$1_$2 last; 但是请求将被发送到proxy_pass服务器,并且只有proxy_pass中的服务器也是web-proxy服务器才有效,谁懂 GET HTTP://cdn.domain.com/ HTTP/1.0 Best Answer rmalayter 2010-02-18T17:31:00+08:002010-02-18T17:31:00+08:00 您需要更改应用程序内的链接以指向静态包含的 CDN。 当您重写到 http 位置时,nginx 只能重定向浏览器(因为 CDN 在 nginx 之外,浏览器需要从 CDN 获取文件)。对于 Apache 或任何其他 URL 重写器,您也会遇到同样的问题,因为 CDN 不是 Web 服务器的“内部”位置。 一种选择可能是 nginx 替换模块,它可以在交付内容时替换它。但这不处理正则表达式,并且会减慢每个请求。最好将应用程序的 HTML 更改为直接引用 CDN URL。 Valery Viktorovsky 2010-02-08T02:13:26+08:002010-02-08T02:13:26+08:00 如果你想隐藏外部 CDN 服务器的 URL,你必须找到支持别名的 CDN。然后将您的子域 (cdn.yourdomain.com) 指向 CDN。
nginx 区分大小写(功能或错误),使用 HTTP:// 而不是 http:// 例如:
但是请求将被发送到proxy_pass服务器,并且只有proxy_pass中的服务器也是web-proxy服务器才有效,谁懂
您需要更改应用程序内的链接以指向静态包含的 CDN。
当您重写到 http 位置时,nginx 只能重定向浏览器(因为 CDN 在 nginx 之外,浏览器需要从 CDN 获取文件)。对于 Apache 或任何其他 URL 重写器,您也会遇到同样的问题,因为 CDN 不是 Web 服务器的“内部”位置。
一种选择可能是 nginx 替换模块,它可以在交付内容时替换它。但这不处理正则表达式,并且会减慢每个请求。最好将应用程序的 HTML 更改为直接引用 CDN URL。
如果你想隐藏外部 CDN 服务器的 URL,你必须找到支持别名的 CDN。然后将您的子域 (cdn.yourdomain.com) 指向 CDN。