在CentOS 5.5版(最终版)的端口80上启动tomcat

在CentOS 5.5版(最终版)的端口80上启动tomcat,tomcat,tomcat6,centos,port,Tomcat,Tomcat6,Centos,Port,我想在端口80上启动Tomcat 6.0.29。 我的操作系统是CentOS 5.5版(最终版) 我更改了$TOMCAT_HOME/conf/server.xml中的以下行 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 在$TOMCAT_HOME/logs/catalina.log文件中,我发现了以下异常: java.net.BindExcepti

我想在端口80上启动Tomcat 6.0.29。 我的操作系统是CentOS 5.5版(最终版) 我更改了$TOMCAT_HOME/conf/server.xml中的以下行

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
在$TOMCAT_HOME/logs/catalina.log文件中,我发现了以下异常:

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:203)
    at org.apache.catalina.connector.Connector.start(Connector.java:1087)
    at org.apache.catalina.core.StandardService.start(StandardService.java:534)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    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.PlainSocketImpl.bind(PlainSocketImpl.java:365)
    at java.net.ServerSocket.bind(ServerSocket.java:319)
    at java.net.ServerSocket.<init>(ServerSocket.java:185)
    at java.net.ServerSocket.<init>(ServerSocket.java:141)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:50)
    at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:538)
    ... 12 more
0:11:56 org.apache.catalina.startup.Catalina start
SEVERE: Catalina.start:
LifecycleException:  service.getName(): "Catalina";  Protocol handler start failed: `java.net.BindException: Permission denied <null>:80
    at org.apache.catalina.connector.Connector.start(Connector.java:1094)
    at org.apache.catalina.core.StandardService.start(StandardService.java:534)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
0:11:56 org.apache.catalina.startup.Catalina start`
java.net.BindException:权限被拒绝:80
位于org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:549)
位于org.apache.tomcat.util.net.JIoEndpoint.start(JIoEndpoint.java:565)
位于org.apache.coyote.http11.Http11Protocol.start(Http11Protocol.java:203)
位于org.apache.catalina.connector.connector.start(connector.java:1087)
位于org.apache.catalina.core.StandardService.start(StandardService.java:534)
位于org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
位于org.apache.catalina.startup.catalina.start(catalina.java:581)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
位于org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
原因:java.net.BindException:权限被拒绝
位于java.net.PlainSocketImpl.socketBind(本机方法)
位于java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365)
位于java.net.ServerSocket.bind(ServerSocket.java:319)
位于java.net.ServerSocket。(ServerSocket.java:185)
位于java.net.ServerSocket。(ServerSocket.java:141)
位于org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:50)
位于org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:538)
... 还有12个
0:11:56 org.apache.catalina.startup.catalina start
严重:Catalina.start:
LifecycleException:service.getName():“Catalina”;协议处理程序启动失败:`java.net.BindException:权限被拒绝:80
位于org.apache.catalina.connector.connector.start(connector.java:1094)
位于org.apache.catalina.core.StandardService.start(StandardService.java:534)
位于org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
位于org.apache.catalina.startup.catalina.start(catalina.java:581)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
位于org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
0:11:56 org.apache.catalina.startup.catalina start`

提前感谢

1-1023范围内的端口具有特权。只允许root用户绑定到它们

至少有两种方法可以解决此问题:

  • 以root用户身份运行。当然,您需要权衡由此推断的额外安全风险;Tomcat本身的安全漏洞(我认为很少)和您的web应用程序包含的安全漏洞(例如,可以让人们阅读/etc/shadow作为一个例子),都是简单而直接的

  • 使用jsvc作为服务运行。有关jsvc的详细信息,请参阅。设置起来有些麻烦,但是root只参与端口的设置,Tomcat将作为一个没有特殊权限的用户运行。我建议任何严肃的设置都使用此选项

无论您选择哪种方式,Tomcat的实际启动都需要根权限


///BR,JenEriC

另一个选项是使用authbind

发件人:

authbind软件允许通常需要超级用户权限才能访问特权网络服务的程序作为非特权用户运行


您可以将“/etc/default/tomcat6”的AUTHBIND属性更改为“yes”,如下所示

AUTHBIND=yes

重新启动tomcat,这将使您能够使用可用的特权端口(1-1023)。

在tomcat前面运行Apache,并使用mod_rewrite将端口80(Apache)上的所有请求连接到AJP端口(8009)上的tomcat

yum install httpd
chkconfig httpd on
vi /etc/httpd/conf.d/proxy.conf

RewriteEngine On
RewriteRule ^/(.*)$ ajp://localhost:8009/$1 [P,QSA,L]

service httpd start

完成了。

我使用nginx2绑定80到8080,这是tomcat绑定到的端口

我的nginx配置如下:

{服务器

listen 80;
   #which you can edit in /etc/hosts file.It can bind mydomain.com to 127.0.0.1
server_name mydomain.com; 
location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8080;
}
access_log logs/xxx456.tk_access.log;

}

转到地址:/tomcat7/server.xml,编辑文件:使用属性porxyPort=“80”


这将导致此web应用程序中的servlet认为所有代理请求都被定向到端口80上的www.mycompany.com。

Hm,我错过了start命令的sudo部分。这应该行得通。我不明白为什么它没有;抱歉。我总是喜欢在8080端口启动tomcat,让iptables来转发来自80端口的所有请求。@mindas:那当然可以,但它不能解释手头的问题:-/绝对-这就是为什么我只在你的帖子上发表评论,而不是自己回答问题的原因。总的来说,我认为你的回答实际上解决了这个问题(因此是向上投票)。你是对的。在脚本/etc/init.d/tomcat6中运行/usr/sbin/tomcat6和user-tomcat。当我运行时:sudo/usr/sbin/tomcat6 start-一切正常。非常感谢。如果您作为root用户这样做,而不仅仅是使用sudo,您会得到同样的行为吗?从堆栈跟踪中可以清楚地看到,这种情况发生在本机代码中,因此安全管理器不应该参与其中。我想到的唯一原因是非root用户试图绑定特权端口。你能用strace运行看看它到底阻塞了什么吗?在centos上,这不起作用,因为1024以下的端口是保留的。最好是在端口8080上运行,并将iptables更改为将请求从80路由到8080
yum install httpd
chkconfig httpd on
vi /etc/httpd/conf.d/proxy.conf

RewriteEngine On
RewriteRule ^/(.*)$ ajp://localhost:8009/$1 [P,QSA,L]

service httpd start
listen 80;
   #which you can edit in /etc/hosts file.It can bind mydomain.com to 127.0.0.1
server_name mydomain.com; 
location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8080;
}
access_log logs/xxx456.tk_access.log;