【问题标题】:How can I make lein ring / jetty server accessible externally?如何使 lein ring / jetty 服务器可以从外部访问?
【发布时间】:2013-09-29 00:35:32
【问题描述】:

我目前正在尝试使用 Compojure 启动一个项目。

此时我只是尝试运行 hello world 应用并通过浏览器查看它。

我在安装了 Ubuntu 13.04 的 Digital Ocean 上有一个 droplet,一旦服务器启动,我似乎无法访问该网页。

lein ring server-headless 3000

eg: http://hostname:3000

我只是找不到页面。我检查以确保码头正在使用 3000 端口,并且确实如此。

我是否缺少依赖项?

我想不出有什么会阻止我查看该页面。

*更新:* 如果我在端口 80 上运行服务器,我可以看到它。我没有添加或配置任何防火墙,除非 Digital Ocean 镜像默认自带。

【问题讨论】:

  • 你能稍微扩展一下错误信息吗?是“连接被拒绝”“连接超时”还是404“找不到页面”错误?
  • 你在 droplet 上打开了 3000 端口吗?你能让实例在端口 80 上运行吗?考虑制作一个 uberwar(使用 lein ring uberwar 任务)并让 tomcat 将其作为 servlet 服务(这是我通常部署 web 应用程序的方式,它可以工作)。
  • @ArthurUlfeldt 连接超时。
  • @noisesmith 我没有安装任何防火墙,所以应该打开 3000。
  • @noisesmith 它在 80 端口上运行... ubuntu 13.04 中是否包含防火墙?

标签: clojure compojure


【解决方案1】:

在实例上运行

 sudo netstat -np | grep 3000

查看您的服务器正在侦听的地址,如果是0.0.0.0,那么您的服务器正在侦听来自任何来源的连接,问题出在上游防火墙(很可能)或本地防火墙(不太可能)上。如果是“127.0.0.1or::1/128”,那么您的服务器仅在侦听本地连接,您需要更改 project.clj 文件中的绑定地址,尽管这不太可能通过以下方式绑定到任何接口默认

【讨论】:

  • 它没有绑定到 IP 地址。当我将服务器的端口更改为 80 时,我能够看到它。
  • 任何基于 unix 的系统中的每个监听套接字都有一个“绑定地址”,这要么是 localhost (127.0.0.1),这意味着它只会接受绑定到地址 127.0.0.1 的连接,或者它是某个网络接口的某个特定地址,在这种情况下,它将侦听到达该接口的连接,或者它是 0.0.0.0,它是任何接口的别名。
  • 你可以通过运行curl http://localhost:3000来检查它是否在digitalocean实例上运行
猜你喜欢
  • 2020-09-07
  • 2012-12-11
  • 2016-04-13
  • 2012-05-04
  • 1970-01-01
  • 2021-09-25
  • 2011-10-01
  • 2015-12-14
  • 2013-07-16
相关资源
最近更新 更多