Nginx:我可以在一个位置“拒绝某个端口”(不是IP)吗?

时间:2016-04-20 05:38:36

标签: nginx

在Nginx中,可以在location中以某种方式阻止或允许某些端口的访问吗?看看the allow & deny docs在我看来,它们不能用于此目的。对?但是没有别的方法可以做到吗?

背景:

在Nginx虚拟主机中,我只允许某个IP发布websocket事件:

server {
  listen 80;

  location /websocket/publish {
      allow 192.168.0.123;
      deny  all;
  }

然而,很快我们就会知道appserver的IP地址,因为一切都会在Docker中运行,我想我不知道某个容器会有哪个ip。

所以我认为我可以这样做:

server {
  listen 80;
  listen 81;

  location /websocket/publish {
      # Let the appserver publish via port 81.
      allow  :81;          # <–– "invalid parameter" error
      # Block everything else, so browsers cannot publish via port 80.
      deny  all;
  }

  ... other locations, accessible via port 80

然后让防火墙阻止来自外部世界的端口81的流量。但是allow :81不起作用。没有其他办法吗?或者我走错了路;有没有更好的方法来做这一切?

(据我所知the docs关于我使用的websocket Nginx插件(即Nchan)我无法在另一个监听的/websocket/publish块中添加server { }端点仅在端口81上。编辑:结果我可以只使用不同的server块,因为Nchan显然忽略了我在哪个服务器块放置配置内容,请参阅:https://github.com/slact/nchan/issues/157。所以我这样做了,现在对我来说很好。但是知道Nginx是否支持阻止location { ... }中的端口仍然会很有趣。)

0 个答案:

没有答案