我希望我的grails应用程序部署在我的域的根目录中:
www.example.com
而不是
www.example.com/myapp
然而,www.example.com / index.html将是静态的(静态HTML,图像等)。我担心让应用服务器提供主页的性能。我可以配置我的grails app / cdn来提供index.html及其内容,并让应用服务器处理动态页面吗?
我使用的是Grails 2.2.4 我将使用Amazon S3 + ElasticBeanstalk + CloudFront。
或者我应该担心表现呢?我是grails的新手,但我的理解是静态内容应该由webserver(Apache)提供。由于没有apache,我正在寻找另一个选项来保持web服务器的负载。 CDN似乎是一个好主意。
答案 0 :(得分:1)
你当然可以做到这一点。我个人的建议是将您的图像保存在S3上并使用Cloud Front。除非你的静态HTML本身过大,否则我的建议是让Grails成为Grails并利用Grails Resources为你的JS和CSS做典型的Grails项目 - 即使你的索引页面不会做任何动态的权利现在。您越是脱离Grails惯例,构建和持续集成等更复杂的事物就会变得越来越复杂。看看使用缓存,缩小插件和性能是非常好的。
至于部署到根“/”上下文,您可以通过“prod war ROOT.war”为您的Tomcat(或任何地方)部署执行此操作,或者您可以将其构建为“whateverapp.war”并处理路由Apache mod_jk用于更复杂情况的规则。
我已经完成了十几个Grails项目并且现在使用了非常相似的架构。
答案 1 :(得分:1)
最简单的方法是从CloudFront提供整个域,然后从Grails应用程序提供主页。您可以将CloudFront配置为将请求缓存到主页,以便最大限度地减少对Grails的请求数。您可以将CloudFront直接映射到Elastic Beanstalk环境中运行的ELB。
默认的Elastic Beanstalk配置没有为您提供任何从Apache提供静态文件的方法;所有对Elastic Beanstalk的请求都代理到Tomcat。您可以使用高级配置进行设置(使用.ebextensions
机制)。
您还可以设置Cache plugin以在服务器端设置完整页面缓存(我建议也使用Cache EhCache plugin)。将服务器端缓存与CDN缓存相结合将为您提供很长的路要走。
BTW,另一个提供静态内容的好选择是使用S3本身来提供页面。如果你没有做任何太复杂的事情,它将为你节省设置和运行Web服务器的工作,尽管使用Elastic Beanstalk没有太多事情要做。