目标
使用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参数,但没有成功。如果我第一次请求该站点,浏览器会以状态200
响应(对于css
和js
文件,例如127.0.0.1/dev/assets/stylesheets/main.css
(,但不包含内容-Content-Length: 0
。下一次,它以304
进行响应,但仍然没有内容。
我不确定这是nginx
还是Play 2.1
配置问题。
我将感谢任何帮助。
使用本地域,如http://test.loc/
和http://dev.loc
,而不是依赖子文件夹。虽然application.context
应该工作,但我看到许多帖子抱怨他们没有。。。
更重要的是,使用本地域更类似于最终生产环境,所以调试一些依赖url的东西更容易,比如cookie。
尽管这不能直接回答您的问题,但我通过传递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