请注意:
markk@ip-10-203-82-54:~/work/gl$ uname -a
Linux ip-10-203-82-54 3.2.0-25-virtual #40-Ubuntu SMP Wed May 23 22:20:17 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
markk@ip-10-203-82-54:~/work/gl$ ls -la /etc/authbind/byport/80
-rwxrwx--- 1 markk markk 0 Aug 16 10:00 /etc/authbind/byport/80
markk@ip-10-203-82-54:~/work/gl$ authbind /usr/bin/java -Dcom.shunra.gl.ports=80 -jar server.jar
java.net.SocketException: Permission denied
at sun.nio.ch.Net.bind(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:137)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:77)
at org.simpleframework.transport.connect.Acceptor.bind(Acceptor.java:171)
at org.simpleframework.transport.connect.Acceptor.<init>(Acceptor.java:88)
at org.simpleframework.transport.connect.Listener.<init>(Listener.java:78)
at org.simpleframework.transport.connect.ListenerManager.listen(ListenerManager.java:90)
at org.simpleframework.transport.connect.ListenerManager.listen(ListenerManager.java:73)
at org.simpleframework.transport.connect.SocketConnection.connect(SocketConnection.java:106)
at org.restlet.ext.simple.HttpServerHelper.start(HttpServerHelper.java:93)
at org.restlet.Server.start(Server.java:585)
at org.restlet.Component.startServers(Component.java:601)
at org.restlet.Component.start(Component.java:528)
at com.shunra.gl.Main.main(Unknown Source)
^Cmarkk@ip-10-203-82-54:~/work/gl$
该机器位于亚马逊云端。
值得一提的是,当以 root 身份运行时,服务器可以按预期工作。
有任何想法吗?
谢谢。
附言
添加--deep
authbind 选项或-Djava.net.preferIPv4Stack
java 属性没有区别。
编辑
我已经安装了 tomcat6。它监听端口 8080。我可以在本地获取它的索引页,但不能使用 DNS 提供的机器名称从外部获取。但是,如果我将其端口从 8080 更改为 11111,那么我就可以从外部访问它。这意味着,对于这个问题,tomcat 服务器的行为与我自己的服务器完全一样。
答案1
Serverfault 可能不是回答您问题的最佳地点,因为我们无法下载您正在编写的程序并自行调试。您可能想在 stackoverflow 上提问。
首先:验证这是否是与系统管理员相关的实际问题。您可以通过尝试运行 tomcat 来做到这一点做在您所尝试的配置中工作。
如果您无法使 Tomcat 工作,那么请询问该问题 - 解决该问题很有可能也会解决您遇到的问题。
另一方面,如果你能让 Tomcat 轻松工作,您可以花更多时间查看您的应用程序,并可以尝试在 Stack Overflow 上询问与编程相关的问题。
答案2
我遇到了同样的问题,使用 Ubuntu 12.04.3 并尝试使用 authbind 启动 Java 应用程序。添加后-Djava.net.preferIPv4Stack=true
问题就解决了。
显然,java 尝试在 IPv6 地址上打开端口,但 authbind 似乎尚不支持该地址。
答案3
您可以检查堆栈跟踪中所述的权限。很可能 markk 用户没有权限执行您的操作