【问题标题】:Connecting to apache tomcat from outside从外部连接到 apache tomcat
【发布时间】:2017-04-20 09:19:31
【问题描述】:

我是这些论坛的新手,希望不要问愚蠢的问题。我已经在网上多次看到我的问题的答案,但它从来没有为我工作过。

所以基本上我在 Debian 8.1 远程服务器上安装了 tomcat 8,我想简单地连接到该服务器。但是当我尝试在我的网络浏览器中连接到 MY_SERVER_IP:8080 时,我收到“无法访问此站点”消息,而不是“它可以工作!”我应该得到的页面。

当我在我的 ssh 软件 (Putty) 上键入此代码时:

telnet MY_SERVER_IP 8080
GET /

服务器发送一个 html 页面,上面写着“如果你看到这个,你已经成功安装了 Tomcat。恭喜!”。所以看起来我的服务器已经正确安装,但我无法从外部访问它。我们还检查了哪些端口是开放的,使用 ssh 软件,8080 端口实际上只对 IPv6 地址开放...

我尝试从 /opt/apache-tomcat-8.5.13/conf/server.xml 中的“连接器”标签中删除“地址”属性,并且我还尝试将 address="0.0.0.0" 添加到它。我尝试将 JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses 添加到 catalina.sh 启动脚本中,并将其写入新的 TOMCAT_HOME/bin/setenv.sh 脚本中。这些都不起作用。

有没有办法解决我的问题?提前感谢您的帮助。

编辑:在我调用指令netstat -pln 后,我的 ssh 软件返回这个(其中一些是法语,所以如果你需要一些翻译,请告诉我):

Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      15594/named
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      15624/sshd
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      15594/named
tcp6       0      0 :::8080                 :::*                    LISTEN      19285/java
tcp6       0      0 ::1:53                  :::*                    LISTEN      15594/named
tcp6       0      0 :::22                   :::*                    LISTEN      15624/sshd
tcp6       0      0 ::1:953                 :::*                    LISTEN      15594/named
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      19285/java
udp        0      0 127.0.0.1:53            0.0.0.0:*                           15594/named
udp6       0      0 ::1:53                  :::*                                15594/named
Sockets du domaine UNIX actives(seulement serveurs)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Chemin
unix  2      [ ACC ]     STREAM     LISTENING     16166    1/systemd           /run/systemd/private
unix  2      [ ACC ]     SEQPACKET  LISTENING     811      1/systemd           /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     815      1/systemd           /run/systemd/journal/stdout
unix  2      [ ACC ]     STREAM     LISTENING     25198    1/systemd           /run/lvm/lvmetad.socket
unix  2      [ ACC ]     STREAM     LISTENING     34670    1/systemd           /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     5612     1/systemd           /run/acpid.socket

因此,除非我弄错了,否则服务器似乎只在端口 8080 上侦听 IPv6 地址。

编辑 3:我再次添加了关于 IP4 的两个 JAVA_OPTS 参数,重新启动我的 tomcat,重新运行 netstat,然后执行ps -ef | grep java。结果如下:

root@ns397627:~# netstat -pln
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2532/java
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      15594/named
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      15624/sshd
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      15594/named
tcp6       0      0 ::1:53                  :::*                    LISTEN      15594/named
tcp6       0      0 :::22                   :::*                    LISTEN      15624/sshd
tcp6       0      0 ::1:953                 :::*                    LISTEN      15594/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           15594/named
udp6       0      0 ::1:53                  :::*                                15594/named
Sockets du domaine UNIX actives(seulement serveurs)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Chemin
unix  2      [ ACC ]     STREAM     LISTENING     16166    1/systemd           /run/systemd/private
unix  2      [ ACC ]     SEQPACKET  LISTENING     811      1/systemd           /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     815      1/systemd           /run/systemd/journal/stdout
unix  2      [ ACC ]     STREAM     LISTENING     25198    1/systemd           /run/lvm/lvmetad.socket
unix  2      [ ACC ]     STREAM     LISTENING     34670    1/systemd           /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     5612     1/systemd           /run/acpid.socket
root@ns397627:~# ps -ef | grep java
tomcat8   2532     1 99 10:15 ?        00:00:20 /usr/lib/jvm/default-java/bin/java -Djava.util.logging.config.file=/var/lib/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses -Djava.endorsed.dirs=/usr/share/tomcat8/endorsed -classpath /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat8 -Dcatalina.home=/usr/share/tomcat8 -Djava.io.tmpdir=/tmp/tomcat8-tomcat8-tmp org.apache.catalina.startup.Bootstrap start
root      2557  2016  0 10:15 pts/4    00:00:00 grep java

【问题讨论】:

  • 这可能是网络中的任意数量的东西,并且由于您证明了 tomcat 正在工作,它可能是服务器故障的问题。你能检查一下tomcat实际上是在监听一个外部的、可访问的接口吗?试试this
  • 您好,非常感谢您的回答。我已经尝试了您的建议,这实际上使我认为我的服务器仅适用于 IPv6 地址(尽管我不确定,因为我对这一点了解不多)。当我从你给我的链接中输入指令时,我还是编辑了我的帖子并添加了我的 ssh 软件的答案,如果你能帮我解释一下,将不胜感激:)
  • 再次添加关于IP4的两个JAVA_OPTS参数,重新启动tomcat,重新运行netstat,然后ps -ef | grep java并在您的问题中发布结果
  • 我应该在哪里添加这些 JAVA_OPTS 参数?在新的 TOMCAT_HOME/bin/setenv.sh 脚本中,还是在其他地方?
  • 应该这样做 - serverfault.com/a/571436 - 重新启动后使用 ps -ef | grep java 检查命令行是否设置了选项。如果是,则使用 netstat 查看是否绑定到 ipv4 接口

标签: apache tomcat


【解决方案1】:

对于在 debian jessie (8.7) 上默认安装的 tomcat8,您可以强制 tomcat 在您的 setenv.sh 文件中使用 IPv4 地址:

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses"

注意语句的值部分使用双引号。

以下命令将附加到您当前的 setenv.sh 文件的正确位置(如果您已经设置了 JAVA_OPTS,请记住删除原始 setenv.sh)

echo 'JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses"' >> /usr/share/tomcat8/bin/setenv.sh

【讨论】:

  • 我自己发现了应该把这个 setenv.sh 文件放在哪里,它在 /usr/share/tomcat8/bin/setenv.sh,因为它是 CATALINA_HOME 的值......对不起,我'我真的不擅长这些东西。我编辑了我的问题,现在 netstat 的结果确实不同了,尽管 MY_SERVER_IP:8080 页面仍然不会显示“它有效!”所以我在某个地方仍然有问题。还是谢谢你回答我,这真的很有帮助!
  • @ntyss 我并不是要厚颜无耻,但我可以检查一下您的意思是您使用的是服务器的实际 IP 地址(如 114.116.2.3 或其他),而不是实际的 MY_SERVER_IP?跨度>
  • 哈哈是的,我当然使用 IPv4 地址,而不是 MY_SERVER_IP。实际上,我还尝试在 windows 命令提示符下使用 telnet 在端口 8080 上连接到我的服务器。
  • @ntyss 尝试安装 apache2 并查看是否可以访问机器上的 80 端口。如果这不起作用,我必须开始询问托管服务提供商以及您尝试从何处获得此服务。这就是为什么这不是 stackoverflow 的理想问题 - 我们已经脱离了编程问题
  • @ntyss 是的,我希望您已经设置了日志记录并看到了我的请求。尝试从移动设备或前面不太可能有防火墙的设备上点击它。如果您正在运行 Apache2,请尝试访问端口 80
猜你喜欢
  • 1970-01-01
  • 2014-04-11
  • 2019-02-14
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2020-10-18
  • 2018-10-12
  • 2012-11-01
相关资源
最近更新 更多