6

目标

使用 nginx 为每个应用程序使用不同的子目录设置多个 Play 2.1 应用程序。

App1 running on127.0.0.1:4000应该可以在127.0.0.1/dev
App2 running on127.0.0.1:5000下访问127.0.0.1/test

配置

nginx.conf

worker_processes  1;

error_log  logs/error.log;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    upstream app1 {
        server 127.0.0.1:4000;
    }

    upstream app2 {
        server 127.0.0.1:5000;
    }

    server {
        listen       80;
        server_name  localhost;

        location /dev {
            rewrite /(.*) /$1 break;
            proxy_pass http://app1;
        }

        location /test {
            rewrite /(.*) /$1 break;
            proxy_pass http://app2;
        }        
    }
}

App1 - application.conf

application.context=/dev

App2 - application.conf

application.context=/test

问题

使用此配置,我可以访问这两个应用程序,但只加载了 html 代码。未加载所有静态文件(css、js、图像)。

我认为这是缓存问题。我尝试过使用不同的 nginx 参数,但没有运气。如果我第一次请求该站点,浏览器会以状态但没有内容的方式响应(例如文件css和文件) - 。下一次它以 响应,仍然没有内容。js127.0.0.1/dev/assets/stylesheets/main.css200Content-Length: 0304

我不确定这是不是nginx配置Play 2.1问题。

我将不胜感激。

4

2 回答 2

1

使用本地域http://test.loc/,而http://dev.loc不是依赖子文件夹。虽然application.context 应该工作,但我看到很多帖子抱怨他们没有......

更重要的是使用本地域更类似于最终的生产环境,因此调试一些依赖于 url 的东西更容易,比如 ie。饼干。

于 2013-04-05T16:43:16.150 回答
0

尽管这不能直接回答您的问题,但我通过传递参数让它在HAProxy中工作:X-Script-Name

frontend  public
  bind *:80
  use_backend playapp if { path_beg /playapp }

backend playapp
  acl is-ssl  dst_port 443
  reqadd X-Script-Name:\ /playapp
  reqadd X-Scheme:\ https  if is-ssl
  option forwardfor
  server playapp1 127.0.0.1:9000 check
于 2014-09-06T18:53:35.177 回答