在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 { ... }
中的端口仍然会很有趣。)