【问题标题】:Nginx Proxy for PlayFramework from port to path prefix从端口到路径前缀的 PlayFramework 的 Nginx 代理
【发布时间】:2015-07-31 18:22:49
【问题描述】:

我有一个 Play 应用程序正在侦听本地端口:9000。还有其他应用程序正在运行。 我想在这样的路径上服务这个应用程序:

http://myhost/this-play-app -> localhost:9000

以便其他应用可以嵌套在其他路径中。

我已经尝试了基本的 proxy_pass,但它似乎不起作用。

server {
    listen   80;
    server_name myhost;
    # MMC Tool
    # ----------------------------------------------------
    location /this-play-app {
        proxy_pass http://localhost:9000;
    }
}

播放应用程序似乎转发到根目录。有没有办法让 play 应用程序在 /this-play-app 路径中工作?
喜欢/this-play-app/some-controller 而不是/some-controller

谢谢

【问题讨论】:

  • 框架必须支持这一点。无论如何,使用子域会容易得多,例如play-app.example.com

标签: nginx playframework


【解决方案1】:

在文件夹中使用应用程序不是一个好主意 - 您至少需要准备一些专用配置,并在每次更改位置时进行更改。

相反,正如其他人建议的那样,您应该使用子域,在这种情况下,每个应用程序的行为都与根域中的完全相同,即使您需要/想要更改该域,您只需要在 nginx 的配置中进行更改.

典型的 nginx 配置看起来像

upstream your_app {
    server 127.0.0.1:9000;
}

server {
    listen      80;
    server_name your-app.domain.com;
    location / {
      proxy_pass  http://your_app;
    }
}

很可能在某些 VPS 或共享主机上,您需要通过某种管理员面板添加子域 - 在 localhost 上只需将子域添加到 hosts 文件。

编辑如果无论如何都无法使用子域(遗憾),您可以通过配置解决它,在 nginx 使用中(正如您在问题中所做的那样:

...
    location /this-play-app {
        proxy_pass http://your_app;
    }
...

然后将此行添加到您的application.conf(播放 2.1+)

application.context = "/this-play-app"

或者如果是 Play 2.4+ (info)

play.http.context = "/this-play-app"

【讨论】:

  • 我怎么没想到.. 这么简单!!谢谢你的脑筋急转弯!
  • 我想我爱你。我明天试试看!再次感谢
  • 啊。我在子目录上加载了主页,但似乎该应用程序的开发方式是手动构建链接而不是 Play @routes。这个 Play 应用是外包的。我现在将坚持使用端口号,并要求他们更改链接引用以使用 @routes
  • 这就是为什么总是使用@routes 会更好——即使它需要更多的工作(事实上它不在常规工作中)
  • 完全同意。不幸的是,我没有监督这一发展。我在 Rails 上做了很多工作,我理解这个原则,并且会在第一天质疑它。但是 :) 这就是软件开发的世界。
猜你喜欢
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
相关资源
最近更新 更多