tomcat报:java.net.BindException: Permission denied <null>:80

前段时间遇到一个情况,官网的服务器reboot之后,发现输入官网连接打不开了,最后去查了一下日志发现:tomcat报权限不够的错误,如下:

服务器重启后,tomcat报错:

SEVERE: Error starting endpoint
java.net.BindException: Permission denied <null>:80
    at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:549)
    at org.apache.tomcat.util.net.JIoEndpoint.start(JIoEndpoint.java:565)
    at org.apache.coyote.http11.Http11Protocol.start(Http11Protocol.java:207)
    at org.apache.catalina.connector.Connector.start(Connector.java:1196)
    at org.apache.catalina.core.StandardService.start(StandardService.java:540)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.net.BindException: Permission denied
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
    at java.net.ServerSocket.bind(ServerSocket.java:376)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at java.net.ServerSocket.<init>(ServerSocket.java:181)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:50)
    at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:538)
    ... 12 more

原因:

通过查找了一些子列发现是因为 Linux 下的权限系统限制导致普通用户无法用80端口, 只有root用户才可访问1024以下的端口。

解决方案:

解决方法1:
在启动Tomcat时,使用sudo ./startup.sh或使用root用户启动
解决方法2:

1、将 server.xml 中已修改的 80 端口重新改为 8081(或者其它1024以上的端口号,但与本机上的其它端口不冲突)。如:

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="30000" 
               maxThreads="2000"  acceptCount="2000"
               URIEncoding="UTF-8"  redirectPort="9143" />

2、在Linux下执行:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081

将80端口映射至8081, 达到我们直接输入域名而不带端口号的目的

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值