java.net.SocketException: 权限不够 (端口问题)

前言

最近系统换成了elementary os,因为是第一次使用linux,配置后出现了各种各样的问题,项目启动后一直报如下错误:

环境
  • linux
  • tomcat7.0.82
错误
严重: Failed to initialize end point associated with ProtocolHandler ["http-nio-443"]
java.net.SocketException: 权限不够
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:475)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:728)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:452)
    at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:840)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:643)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:668)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
原因(tomcat中conf/server.xml)

                
                        
                
        

我在这里配置了https的443端口,但是linux中1024以下的端口默认是对 非root用户 禁用的

因为是开发环境所以我将server.xml中这块代码注释了,问题解决

当然服务器的话默认应该是root运行项目,所以没出现这个问题

其他

假如非要使用1024以下端口的话
传送门:linux 80端口映射到8080 作者:Soullllllllllll

有时我们在服务Linux服务器上安装了tomcat(端口号为8080),而要求是输入网址后不添加端口号就能访问,这就意味着浏览器得通过80端口访问到你的tomcat(端口为8080),为此有两种解决方式:

基于linux系统禁止1024一下的端口让非root用户使用,那么就必须是用root用户登录才能去启动修改为80端口的tomcat(注意: 直接在tomcat server.xml中更改为80,用sudo命令是启动不了的,必须要root用户登录启动!!)

基于root密码不是随随便便能得到的,所以一般采用第二种方法(即端口映射)来达到你的目的:具体命令为:

iptables -t nat -A PREROUTING  -p tcp --dport 80 -j REDIRECT --to-port 8080
-t nat : 指出我要操作什么表.(不写就表示filter.默认是filter) 
-A PREROUTING : A 添加的意思.表示我要在PREROUTING 中添加一个规则 
--dport 80 : 如果请求80端口. 
--to-port 8080 : 那么就转到8080端口.

你可能感兴趣的:(java.net.SocketException: 权限不够 (端口问题))