在 Ubuntu 中监听 80 端口

在 Ubuntu 中监听 80 端口

我有一台 Ubuntu 15.04 系统,其中的 Java 网络服务器监听端口 3000。Iptables 预路由设置如下:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

我还使用以下命令从系统中删除了 apache2 包:

apt-get remove apache2

但是,现在我没有在系统中发现任何监听 80 端口的进程:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      259/sshd
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      4841/java
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      455/master
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN      256/systemd-resolve

因此无法通过浏览器访问这些页面。有人能帮忙吗?

谢谢!

更新: 现在我已经完成了 Apacheproxyproxy_http模块的配置,如下所示:

<VirtualHost *:80>
  ProxyRequests Off
  ProxyVia Off
  ProxyPreserveHost On

  <Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / http://127.0.0.1:3000/

</VirtualHost>

奇怪的是,在配置类似的运行 Ubuntu 14.04 的机器上,运行 Apache 以让某个进程监听端口 80 是不必要的。在这些机器上,netstat也不会显示任何进程监听端口 80,但 HTTP 请求却以某种方式转发到监听端口 3000 的 Java 服务器。嗯。

答案1

没有什么不再监听端口 80。该 iptables 命令只是将对外部网络上的端口 80 的请求转发到本地的端口 3000。

但是该服务仍然只监听端口 3000,并且没有其他服务(显然)监听端口 80,这正是您的系统所报告的。

我猜你是在本地测试的(即,使用与服务相同的机器上的浏览器)。如果是这种情况,并且 localhost:3000 到达服务,则 iptables 规则未被到达,因为请求不是来自外部网络(或其他与 iptables 相关的原因——我在这里假设你的规则是合理且有效的,但你应该检查一下。)

可能的解决方案:

  1. 确保所有流量都经过此 iptables 规则,或者创建多个规则,以便将来自端口 80 的所有来源的流量重定向到 3000。
  2. 更改服务以便它绑定到端口 80,并删除 iptables 转发内容。

答案2

如果您使用 authbind 启动 tomcats,那么我们就不需要 iptables 或任何重定向规则软件或 apache,希望此链接能够有所帮助。

https://askubuntu.com/a/685306/377678

相关内容