Nginx 位置、别名、重写、root

Posted

技术标签:

【中文标题】Nginx 位置、别名、重写、root【英文标题】:Nginx location, alias, rewrite, root 【发布时间】:2010-12-21 11:02:03 【问题描述】:

我正在通过 proxypass 为 /foo/bar/ 提供服务,并希望继续这样做。但是,我想从 /var/www/mystatic/baz.swf 等静态地提供 /foo/bar/baz.swf。

我希望我可以做类似的事情

    location /foo/bar/(.*) 
      alias /var/www/mystatic/;
    

    location / 
      proxy_pass ....;
      ... 
    

而 /foo/bar/ 将转到应用程序服务器,而 /foo/bar/(.*) 将被静态服务。

文档说我不能这样做,需要结合使用 root 和 rewrite:http://wiki.nginx.org/NginxHttpCoreModule

更复杂的是,我想继续使用古老的、不受支持的 0.5.33。任何帮助将不胜感激。

编辑:继续前进,有人建议使用 root 而不是别名。但是,我的版本似乎不能在 location 指令上使用任何正则表达式?在这里,/foo/bar/baz.swf 由 proxy_pass 提供服务!我在 /var/www/foo/bar/baz.swf 有文件。

    location /foo/bar/(.+) 
      root /var/www/;
    

【问题讨论】:

大声笑,关于 SO 徽章的最糟糕的问题。 为什么不直接输入location /foo/bar/(.+) 【参考方案1】:

你可以这样做;但它有点深奥。尝试使用:

location ^~ /foo/bar 
    alias /var/www/mystatic/;


location / 
    proxy_pass ....;

这些选项记录在 Wiki http://wiki.nginx.org/NginxHttpCoreModule#location

【讨论】:

如果我这样做 /foo/bar/ 由 nginx 提供服务 .. 如果我添加尾部斜杠 ... 我仍然没有正确排列 /foo/bar/baz.js跨度> 【参考方案2】:
location = /foo/bar/baz.swf  

将清除所有设置为 /foo/bar/baz.swf 的选项。所以你可以离开它 不会使用代理选项。

【讨论】:

【参考方案3】:

你可以:

# mkdir /var/www/foo  
# mv /var/www/mystatic /var/www/foo/bar

然后使用这个配置:

location ~ ^/foo/bar/(.+) 
  root /var/www/;

【讨论】:

以上是关于Nginx 位置、别名、重写、root的主要内容,如果未能解决你的问题,请参考以下文章

nginx,别名和位置

nginx别名+位置指令

在 nginx 中使用别名作为相对 url 时的禁止位置

NGINX:重写图像位置

特定位置的 nginx 重写规则

如何根据客户端浏览器的语言在 nginx 中重写位置?