Tomcat8 설정 포트를 80으로

Tomcat8 설정 포트를 80으로

나는 이것을 따랐다http://www.mogilowski.net/lang/en-us/2014/04/22/install-apache-tomcat-8-on-debian-7-wheezy-with-virtual-hosts-and-apache2-integration/VPS 버전 8.0.20에 tomcat을 설치하려면...

포트를 80으로 변경하려고 하는데 할 수 있는 방법이 없습니다. 다음과 같이 시도해 보았습니다.

http://beginlinux.com/server/ubuntu/changing-the-port-on-tomcat

하지만 작동하지 않는 것 같습니다. 로그 내부의 catalina.out에서 다음 오류가 발생합니다.

25-Feb-2015 01:32:23.879 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-$
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-80]]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:567)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:851)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:576)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:599)
    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:310)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:962)     
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)                  
    ... 12 more
Caused by: java.net.SocketException: Permission denied
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:444)
    at sun.nio.ch.Net.bind(Net.java:436)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)            
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)   
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:343)              
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:732)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:457)           
    at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:120)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
    ... 13 more

이것은 내 커넥터 포트입니다. 무엇이 문제입니까?

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="443" />

답변1

포트 80에 바인딩하려면 Tomcat을 루트로 실행해야 합니다. 1024 미만의 모든 포트에는 바인딩을 위한 수퍼유저 권한이 필요합니다.

이는 또한 스택 추적의 마지막 예외가 알려주는 내용이기도 합니다.

Caused by: java.net.SocketException: Permission denied
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:444)
    at sun.nio.ch.Net.bind(Net.java:436)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)            
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)   
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:343)              
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:732)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:457)           
    at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:120)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
    ... 13 more

확장된 보안 논의가 되지 않는 매우 짧은 경고입니다. 보안 관점에서 슈퍼유저 권한으로 Tomcat(또는 Java 애플리케이션)을 실행하는 것은 일반적으로 좋은 생각이 아닙니다. Tomcat이 호스팅하는 웹 애플리케이션의 버그로 인해 이러한 권한이 있는 임의 코드가 실행되어 원격 공격자에게 시스템에 대한 루트 액세스 권한을 부여할 수 있습니다.

이러한 이유로 기본 Tomcat 포트는 권한이 없는 8080입니다. 바인딩하는 데 수퍼유저 권한이 필요하지 않으므로 Tomcat을 일반 시스템 사용자로 실행할 수 있습니다.

포트 80을 통해 Tomcat이 호스팅하는 웹 애플리케이션에 실제로 액세스해야 하는 경우 Tomcat 인스턴스 앞에 Apache와 같은 웹 서버가 있어야 합니다. 포트 80에서 수신 대기하고 Tomcat에 대한 요청을 역방향 프록시합니다. 이는 특히 Apache가 포트 80에 바인딩한 후 수퍼유저 권한을 삭제하기 때문에 더 안전합니다.

이를 수행하는 Apache 가상 호스트 구성은 다음과 같습니다.

<VirtualHost *:80>
    ServerAdmin webmaster
    ServerName foo.example.com

    ProxyPreserveHost on
    ProxyRequests off
    ProxyPass        / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

관련 정보