私はこれに従いました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 に Tomcat バージョン 8.0.20 をインストールするには...
ポートを 80 に変更しようとしていますが、それを実行する方法がありません。試した方法は次のとおりです。
http://beginlinux.com/server/ubuntu/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 を root として実行する必要があります。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 でホストされる Web アプリケーションのバグにより、これらの権限で任意のコードが実行され、リモートの攻撃者にシステムへのルート アクセスが与えられる可能性があります。
デフォルトの Tomcat ポートは、この理由 (他の理由も含む) により、特権のない 8080 になっています。バインドにスーパーユーザー権限は必要ないため、Tomcat は通常のシステム ユーザーとして実行できます。
ポート 80 経由で Tomcat がホストする Web アプリケーションにアクセスする必要がある場合は、Tomcat インスタンスの前に Apache などの Web サーバーを配置する必要があります。このサーバーはポート 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>