使用nginx为每个应用程序使用不同的子目录设置多个Play 2.1应用程序。
127.0.0.1:4000
上运行的App1应该可以在127.0.0.1/dev
下访问
在127.0.0.1:5000
上运行的App2应该可以在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,images)。
我认为这是缓存问题。我试过不同的nginx参数,没有运气。如果我是第一次请求该网站,则浏览器会响应(css
和js
个文件,例如127.0.0.1/dev/assets/stylesheets/main.css
),状态为200
但没有内容 - Content-Length: 0
。下次用304
回复时,仍然没有内容。
我不确定这是nginx
还是Play 2.1
配置问题。
我将不胜感激。
答案 0 :(得分:1)
使用http://test.loc/
和http://dev.loc
等本地域,而不是依赖子文件夹。虽然application.context
应该工作,但我看到很多帖子抱怨说他们没有......
使用本地域的更多内容更类似于最终的生产环境,因此调试一些url依赖的东西更容易,比如ie。饼干。
答案 1 :(得分:0)
尽管这并没有直接回答您的问题,但我通过传递X-Script-Name
参数让它在 HAProxy 中工作:
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