我正在为Phaser中正在处理的小型游戏提供静态文件(图像资源等)时遇到问题。我在服务器上使用flask-socketio(在客户端使用socket.io)进行网络连接,这就是为什么我要在Flask下使用它。据我所知,我必须使用Flask来提供静态资源,否则我会遇到Same-origin policy的问题。
事实上,我尝试在不同的端口上使用nginx提供资产,但我在浏览器控制台(本例中为Safari)中收到此消息:SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent.
我查看了有关如何提供静态文件的Flask文档,并说它使用“ url_for 。”但是,这仅适用于HTML模板文件。我正在尝试使用Phaser引擎加载我的javascript代码中的静态资源(仅举例):
this.load.image('player', 'assets/player.png’); //this.load.image('player’, url);
我无法使用' url_for ',因为它不是模板文件而是javascript代码。
所以我的问题是,如何提供我的静态资源,以便我不违反同源策略?
关于#2,我不太明白它应该如何运作。如果我应该做#2,如果Flask正在侦听端口5000,有人可以解释我应该如何配置nginx吗?我在该片段中的哪个位置配置文件系统上的静态资源的路径?在我的javascript代码中,我使用什么url路径来引用资产?
答案 0 :(得分:1)
通常,人们会在“主”端口上设置Nginx(或其他一般的Web服务器),然后将其配置为将某些请求转发到辅助端口上的应用服务器(在本例中为Flask)。客户端浏览器不可见/未知。 Flask会将结果提供给Nginx,然后将结果转发给用户。
这称为reverse-proxy,Nginx widely considered是此设置的不错选择。通过这种方式,所有文件都由Nginx提供给客户端,因此客户端不会注意到其中一些文件实际来自您的应用程序服务器。
从架构的角度来看,这很好,因为它将您的webapp(有些)与客户端隔离开来,并允许它保存资源,例如:通过不提供静态文件并让Nginx缓存一些webapp的结果,这是有意义的。
如果你正在进行开发,这可能看起来像很多开销;但对于生产来说,它更有意义。但是,让您的开发环境尽可能地模仿您的生产环境是一个好主意。