`
fredlong
  • 浏览: 132959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用iptables解决Jetty不能在80端口启动的问题

阅读更多

Linux系统不允许非root账号使用1024以下的端口,所以Jetty要使用80端口启动只有两个方法,或者使用root,账号启动,或者使用iptables做本地端口映射。由于使用root账号启动Jetty会存在安全隐患,不推荐这么做。在本地做端口映射看起来是最合理的做法。iptables直接在网卡上做的四层端口映射,效率会比Nginx的七层代理要高很多。下面来聊聊怎么使用iptables做本地端口映射。

 

1.使用iptables查看本地的策略

iptables -L -n -v

可以查看所有非nat的本地路由策略,只能看到INPUT\OUTPUT\FORWORD三个表的策略,如果需要看NAT表的策略,需要加-t nat。而内部端口映射的策略需要加到NAT表中的。

iptables -L -n -v -t nat

 

2.增加端口映射的策略

所有发送到本地网卡上的80端口的请求,转发到本地8080:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

 

加上上面这条策略后,所有发送到网卡上的80请求会映射到8080,但是如果本地访问127.0.0.1的时候,端口还是映射不过去,因为本地访问127.0.0.1的事情,请求不会到网卡,直接到lo了,所以还需要增加一条本地请求的策略:

iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j DNAT --to 127.0.0.1:8080

 

这样无论本地还是,别的机器所有发送到80的请求都会转发到8080。但是需要注意的一点是,从netstat中是看不到80端口的监听的,这个请求转发是在网卡上完成的。

 

3.删除本地策略

如果只是测试,可以使用下面的命令删除刚才创建的策略:

iptables -F -t nat

 

PS,如果使用非ROOT用户启动jetty去绑定80端口,会在日志中看到以下的错误:

2012-09-13 20:37:18.077:WARN::failed SelectChannelConnector@0.0.0.0:80: java.NET.SocketException: 权限不够

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics