如何防止Nginx反向代理特定子目录


11

在Apache上,您可以ProxyPass除一个或多个子目录(带有“!”)之外的所有内容。

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/

什么是Nginx等效项?

我的第一个猜测显然是行不通的:

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }

Answers:


11

您可以将proxy_pass绑定到您喜欢的路径,就像这样

location = / {
    proxy_pass http://localhost:9999/;
}

这样可以确保没有其他路径可以通过 /

要么

您可以将这种语法仅用于要匹配的子目录

location ^~ /subdir {
     alias /var/www/site/subdir;
}

location / {
    proxy_pass http://localhost:9999/ ;
}

^~该子目录相匹配,然后停止搜索,因此/将不会被执行。在这里描述。


在我的情况下,root / var / www / site / subdir应该是root / var / www / site,否则nginx将尝试访问/ var / www / site / subdir / subdir。
Tinus 2014年

你是对的。要么,要么可以alias代替使用root
Christopher Perrin 2014年

1
您能再解释一下^~吗?我不知道该怎么做。我尝试阅读您发送的链接,但仍然无法获取。如果最长匹配前缀位置具有“ ^〜”修饰符,则不检查正则表达式。
Mohammed Noureldin

@MohammedNoureldin本质上意味着它尝试匹配路径上的前缀,并且不计算正则表达式。
Christopher Perrin

1
@MohammedNoureldin是要用于该位置的路径的第一部分。是的,它没有正则表达式。
Christopher Perrin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.