I am trying to configure tomcat 7 (standalone) on ubuntu machine (production env), but getting following exception at startup:
Jan 15, 2014 6:24:45 AM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.29 using APR version 1.5.0.
Jan 15, 2014 6:24:45 AM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Jan 15, 2014 6:24:46 AM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1 14 Mar 2012)
Jan 15, 2014 6:24:46 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-80"]
Jan 15, 2014 6:24:46 AM org.apache.coyote.AbstractProtocol init
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-apr-80"]
java.lang.Exception: Socket bind failed: [13] Permission denied
at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:430)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:640)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:981)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:639)
at org.apache.catalina.startup.Catalina.load(Catalina.java:664)
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:606)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455)
I am using Ubuntu 12.04 LTS, initially I installed oracle JDK 1.7.0_45 using "apt-get", then I downloaded tomcat 7.0.50 (.gz format) extracted and configured it to run (as non-root user) on port 80 using authbind (till here is was working perfectly). Then I installed/configured APR (1.5.0) connector (I think now tomcat is able to load it properly):
INFO: Loaded APR based Apache Tomcat Native library 1.1.29 using APR version 1.5.0.
Jan 15, 2014 6:24:45 AM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
But after this change tomcat is not able listen on port 80. Any advise on that?
UPDATE 1
Would like to add this: When I am trying to run tomcat as root its working just fine, is there something to do with the user i created to run tomcat (tomcat)?? Facing this problem after configuring APR connector it was working fine with tomcat user (on port 80).
right now "tomcat" user is having following privileges:
chown -R /opt/tomcat7 (this is catalina_home)
before configuring APR, I executed following commands for "tomcat" user:
touch /etc/authbind/byport/80
chmod 500 /etc/authbind/byport/80
chown tomcat /etc/authbind/byport/80
UPDATE 2
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
If I am removing above mentioned APR connector from server.xml, tomcat works fine on 80 port with non-root user, and in this case initializing "http-bio-80" connector properly during startup. While with APR tomcat not able to initialize "http-apr-80" connector during startup.