Tomcat 6.0.29をポート80で起動します。私のOSはCentOSリリース5.5(最終)です。$ Tomcat_HOME/conf/server.xmlの次の行を変更しました
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
に
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"/>
次に、コマンドを実行します。
Sudo /etc/init.d/Tomcat6 start
ファイル$ 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`
前もって感謝します
1〜1023の範囲のポートに特権が与えられます。 rootだけがそれらにバインドできます。
これを解決するには、少なくとも2つの方法があります。
ルートとして実行します。もちろん、これが推測する追加のセキュリティリスクに重みを付ける必要があります。 Tomcat自体のセキュリティホール(私は少数だと思います)とWebアプリケーションに含まれるセキュリティホール(たとえば、例として/ etc/shadowを人々に読み取らせる可能性があります)の両方に対して、これは単純明快です。
Jsvcでサービスとして実行します。 jsvcの詳細については、 http://Tomcat.Apache.org/Tomcat-5.5-doc/setup.html を参照してください。セットアップには多少手間がかかりますが、rootはポートのセットアップにのみ関与し、Tomcatは特別な権限のないユーザーとして実行されます。深刻なセットアップにはこれをお勧めします。
どの方法を選択するかに関係なく、Tomcatを実際に起動するにはroot権限が必要です。
/// BR、JenEriC
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
完了です。
別のオプションは、authbindを使用することです。
Wikipedia から:
Authbindソフトウェアを使用すると、特権ネットワークサービスにアクセスするために通常スーパーユーザー特権を必要とするプログラムを、非特権ユーザーとして実行できます。
ポート80でリッスンするTomcat 6で動作するように authbindを設定する方法 に関するこの記事を参照してください。
次のように、 "/ etc/default/Tomcat6"のAUTHBINDプロパティを "yes"に変更できます
AUTHBIND=yes
Tomcatを再起動すると、使用可能な特権ポート(1-1023)を使用できるようになります。
tomcatがバインドするポートであるnginx 2 bind 80から8080を使用します。
私のnginx configureは次のとおりです:
{サーバー
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;
}