2016-02-12 30 views
0

我有一个与tomcat 8的EC2实例。这个tomcat有一个我在Android应用程序中使用的休息Web服务(在端口8080)。现在,我想在同一个tomcat中放置一个网站。我能够存取权限的网站以这样的方式如何在tomcat中监听两个端口号码?

www.domain.com:8080

我知道访问该网站没有我需要的是默认的Tomcat端口更改为80端口号但如果我这样做,我的Android应用程序将无法再访问Web服务。

那么,我该怎么做呢?访问网站时未指定端口号并保留我的android应用程序的8080端口?

编辑:

这是我的server.xml

<GlobalNamingResources> 
<Resource name="UserDatabase" auth="Container" 
    type="org.apache.catalina.UserDatabase" 
    description="User database that can be updated and saved" 
    factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
    pathname="conf/tomcat-users.xml" /> 
</GlobalNamingResources> 

<Service name="Catalina"> 
<Connector port="8080" protocol="HTTP/1.1" 
    connectionTimeout="20000" 
    redirectPort="8443" /> 

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

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 

<Engine name="Catalina" defaultHost="localhost"> 
    <Realm className="org.apache.catalina.realm.LockOutRealm"> 
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
      resourceName="UserDatabase"/> 
    </Realm> 

    <Host name="localhost" appBase="webapps" 
     unpackWARs="true" autoDeploy="true"> 
     <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
      prefix="localhost_access_log" suffix=".txt" 
      pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 

    </Host> 

</Engine> 
</Service> 
    </Server> 

编辑2:

如果我运行此:

sudo netstat -lnp | grep 2563 (tomcat PID) 

我得到这个:

tcp  0  0 ::ffff:127.0.0.1:8005  :::*      LISTEN  2563/java   
tcp  0  0 :::8080      :::*      LISTEN  2563/java 
+0

[在两个不同的端口上运行Tomcat服务器]的可能的复制(http://stackoverflow.com/questions/15231052/running-tomcat-服务器在两个不同的端口) – digitaljoel

+0

这不适合我。 :/ – Luiz

+0

刚刚尝试过,它在本地tomcat 8上正常工作。我猜你的安全设置不会让端口80离开你的EC2实例。 – digitaljoel

回答

0

添加/更新新的/现有的连接器中的conf/server.xml中。根据需要更改端口或协议。

+0

我添加了一个新的连接器(端口80),android仍然使用web服务,但我无法使用域名或www.domain.com:80访问该网站。 Ony如果我使用旧的:www.domain.com:8080 – Luiz

+0

端口80(由Apache Web服务器默认使用)可能已被某些其他进程使用。在Unix或Windows上运行检查端口使用情况? –

+0

我在Unix上...... – Luiz

0

像@Sheetal Mohan Sharma对他的回答表示:“80通常因安全问题而被阻止”。

所以,这给了我正确的方向。 事实上,端口80真的被阻塞,在linux下解决这个问题的解决方法是安装authbind。但对我而言,这并不能解决问题,因为authbind不能安装在我的ec2实例中(例如,yum install)。

对于最终解决这个问题,我也跟着在这个网站上的教程:

http://www.excelsior-usa.com/articles/tomcat-amazon-ec2-advanced.html

的步骤是:

1 - 着输入端口80名的请求到端口8080

sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 

2 - 测试它。如果有作品,你可以保存这个iptables规则

sudo /sbin/service iptables save 

3 - 像在链接说:最后,你需要你的Web应用程序充当如果传入的请求是针对80端口里面的servlet。这将防止任何发送回客户端的URL中出现非特权端口。包括在server.xml中在你的HTTP连接器配置的proxyPort属性:

<Connector port="8080" proxyPort="80" .../>