Articles of playframework

用于PlayFramework的Nginx代理从端口到path前缀

我有一个播放应用程序监听本地端口:9000。 还有其他应用程序在运行。 我想以这样的path来服务这个应用程序: http://myhost/this-play-app -> localhost:9000 所以其他应用程序可以嵌套在其他path。 我试过基本的proxy_pass,但它似乎并没有工作。 server { listen 80; server_name myhost; # MMC Tool # —————————————————- location /this-play-app { proxy_pass http://localhost:9000; } } 游戏应用程序似乎向根。 有没有一种方法来欺骗播放应用程序在/this-play-apppath中工作? 像/this-play-app/some-controller而不是/some-controller ? 谢谢

玩! 1.2.4 + Nginx负载均衡器 – 无法在PROD模式下使两个实例一起工作

我已经实现了一个Play! 在我的服务器中有两个不同的实例(比如说%inst1和%inst2),以避免预编译任何更新时的停机时间。 我已经configurationnginx来获得负载平衡器。 对于每个实例我有它自己的子目录,我已经正确configuration了文件application.conf以获得%inst1和%inst2的不同端口。 nginx的configuration文件就像这样: upstream myapp { server localhost:9031; server localhost:9032; } server { server_name www.example.com; access_log /var/log/nginx/myapp.access.log; location / { proxy_pass http://myapp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } } 当我在开发模式下尝试这个configuration时,它完美的工作。 我执行这两个实例,每当我停止其中一个为了更新它,所有的stream量去向另一个实例没有任何停机时间。 当我重新启动应用程序并重新加载nginx时,这两个实例都运行完美。 当我为生产模式configuration实例时出现问题。 我只改变application.conf: %inst1.application.mode=dev %inst2.application.mode=dev 至: %inst1.application.mode=prod %inst2.application.mode=prod 然后,我无法让两个实例工作两次。 每当我开始第二个,我得到一个502错误的网关错误。 然后我检查第一个实例的状态,我得到以下错误: $ play status –%inst1 ~ _ _ […]

无法从Java中的nginx反转代理获得远程IP

目前,我正面临nginx和playframework的问题。 我已经在我的播放应用程序前configuration了nginx作为反转代理。 当我尝试读取java中的客户端IP(在播放框架中)时,有时我可以得到正确的IP,但有时我会得到“0:0:0:0:0:0:0:1”,或者我得到了多个ip地址如“222.72.xxx.xxx,10.210.44.35,115.239.xxx.x”。 似乎退出有线连接,有时它有效,但经常出错。 这里是我的nginx.confconfiguration: http { ## # Basic Settings ## proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; upstream webapp { server localhost:9000; server localhost:9002; } server { listen 80; […]

PlayFramework在http中代替httpS返回绝对url?

我已经在Play!Framework中用NGinx实现了一个只使用https的项目。 一切正常,SSL是公认的,我可以在任何地方使用我的应用程序,但玩时! 返回绝对URL,它在http中,而不是https。 这是有问题的,我不知道问题在哪里。 我尝试使用-Dhttps.port = XXXX而不是-Dhttp.port = XXXX开始播放,但并没有改变“http”而不是“https”的输出。 我怀疑Nginxconfiguration不当(我忘了参数?)。 这是我的sites-enabled/websiteconfiguration文件: proxy_buffering off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme "https"; # I also tried $scheme without any luck proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_http_version 1.1; server { listen 80; server_name my.website.com; return 301 https://my.website.com; } upstream my-backend { server 127.0.0.1:9100; } server { listen 443; […]

使用nginx和Play 2.1应用程序反向代理子目录

目标 使用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 /(.*) […]

部署两个不同的Play! 应用程序在相同的主机名上

我使用Play Framework开发了2个应用程序,可以访问不同的信息,因此将它合并为一个应用程序是没有意义的。 现在我需要在同一个主机名上部署两个应用程序,每个应用程序都在一个单独的子文件夹(URI)中,例如:example.com/payment/ example.com/cms/ 我有路线问题。 我configuration了一个nginx web服务器作为反向代理。 它按预期交付首页。 但是,一旦我点击任何东西,而不是去/ cms /应用程序/索引链接回/应用程序/索引(不包括/ cms /)。 恕我直言,我相信我需要改变我的路线文件,hardcoding / cms /所有path,但它似乎是一个坏的方法,因为如果我需要部署在另一个URI的应用程序,我将需要再次改变路线。 在同一个主机名上部署两个应用程序的最佳方式是什么? —– nginx.conf —– … … … location /cms { proxy_pass http://localhost:9001/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /payment { proxy_pass http://localhost:9002/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header […]

PlayFramework静态文件的nginxconfiguration

我想使用Nginx的服务器/资产文件夹为我的玩! 应用。 我想要: 代理大多数文件播放! 点/资产到本地文件夹 我正在使用下面的configuration,但它不工作: worker_processes 1; error_log logs/error.log; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; upstream play_app { server 0.0.0.0:9000; } server { listen 80; location / { proxy_pass http://play_app; } } } 另外,如果我得到这个工作,我将能够通过Play.getFile("/assets/images")从Nginx /资源文件夹写入?

Play框架中的SSL导致“常规SSLEngine概率”。 (nginx的)

我有一个2服务器的服务器结构:一个是与内容的主要服务器,另一个是与运行的Play的Scala服务器,做用户pipe理,包括社会login(fb,tw,g +)。 两台服务器都使用相同的通配符SSL证书。 我最近把主服务器从Apache切换到nginx,由于某种原因,Scala服务器抱怨SSL不匹配(在Apache之前这从来都不是问题)。 当我尝试login时,从Play中收到以下错误: [error] scProviderController – Unable to log user in. An exception was thrown java.net.ConnectException: General SSLEngine problem to https://www.example.com/login/corsValid at com.ning.http.client.providers.netty.NettyConnectListener.operationComplete(NettyConnectListener.java:103) ~[async-http-client.jar:na] at org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:427) ~[netty.jar:na] at org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:413) ~[netty.jar:na] at org.jboss.netty.channel.DefaultChannelFuture.setFailure(DefaultChannelFuture.java:380) ~[netty.jar:na] at org.jboss.netty.handler.ssl.SslHandler.setHandshakeFailure(SslHandler.java:1417) ~[netty.jar:na] at org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1293) ~[netty.jar:na] Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1290) ~[na:1.7.0_51] at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:513) ~[na:1.7.0_51] at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:793) […]

(https)Nginx – >(http)Play !. 但request.secure是错误的

configurationNginx作为Play前面的反向代理! 并通过https设置以下标题: proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Ssl https; login() [ https://localhost/login ]被转发到Play! 在端口9000上作为'http'。 但是login()中的request.secure仍然是'false'。 任何想法 ? 更新:这里是服务器conf: – server { listen 443; server_name localhost; ssl on; ssl_certificate /home/aymer/play/key/localhost.crt; ssl_certificate_key /home/aymer/play/key/localhost.key; ssl_session_timeout 5m; location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /home/aymer/play/playapp/public; expires 30d; } location ~* (login|register)$ { proxy_pass http://localhost:9000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; […]

Ubuntu新贵从Play 1.3获得不正确的PID

使用我们用于Play 1.2.7的start-stop-daemon的Upstart脚本现在无法停止/重新播放Play 1.3以来的版本,因为它具有不正确的PID。 在Ubuntu 12.04.5 LTS上的框架版本:1.3.0 复制步骤: 为Play应用程序设置一个upstart脚本(playframework.conf) 在服务器重新启动时,Play应用程序启动成功运行“sudo status playframework”将返回playframework启动/运行,进程28912 – 此时进程28912不存在 vi {playapplicationfolder} /server.pid显示28927 'stop playframework'然后由于未知的pid而失败28912'status playframework'导致playframework停止/终止,进程28912 只有这样才能重新启动播放框架,要么find实际的过程,并杀死它,然后开始播放使用通常的“播放开始”命令手动。 或者重新启动服务器。 这已经破坏了我们的部署脚本,就像我们用来安装新版本的应用程序一样,然后在重新连接到负载平衡器之前重新开始播放。 新贵脚本: #Upstart script for a play application that binds to an unprivileged user. # put this into a file like /etc/init/playframework # you can then start/stop it using either initctl or start/stop/restart # […]