我在使用Ubuntu服务器14.04 LTS的Azure VM上运行运动衫/灰熊网络服务。我可以使用curl从机器内部访问Web服务,但是从机器外部请求只是超时。
也就是说,我可以做这个卷曲线:
curl -X POST http://example.cloudapp.net:80/resource/path --data "text=´Mario"
并从VM的shell中获取响应,但不是来自我的Windows控制台或同一Azure数据中心中的其他VM。
我在Main.java
:
public class Main {
public static final URI BASE_URI = UriBuilder.fromUri("http://0.0.0.0/").port(9998).build();
protected static SelectorThread startServer() throws IOException {
final Map<String, String> initParams = new HashMap<String, String>();
initParams.put("com.sun.jersey.config.property.packages", "mypackage");
SelectorThread threadSelector = GrizzlyWebContainerFactory.create(BASE_URI, initParams);
return threadSelector;
}
public static void main(String[] args) throws IOException {
SelectorThread threadSelector = startServer();
System.in.read();
threadSelector.stopEndpoint();
}
}
我可以看到它用netstat -a
收听:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:9998 *:* LISTEN
我已经设置了一个Azure端点,以便我可以访问VM上的Web服务,在内部端口9998和外部端口80之间进行转换。
端点上没有ACL规则,因此default是让所有内容通过的。
VM中的我的iptables设置为允许所有内容通过:
$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68
我的理论是问题出在虚拟机之外,但我不知道从哪里开始。有没有人知道如何解决这个问题或如何进行故障排除?如果您还有其他需要,请询问。有一点可能有帮助,如果我可以获取Azure端点的访问尝试日志,但我不知道如何获取它们。