目前,我们的 puma 应用服务器(为 rails 应用提供服务)前面安装了 nginx。最近,我们将“营销”页面分离到其自己的 repo 和应用中。
因此,从本质上讲,我们在 netlify 上通过应用程序部署提供静态内容,但是一旦用户登录,我们的 rails 应用程序就会接管。
有没有关于如何设置这个的建议?所以我们对这两个使用一个域名?最初我们考虑为静态内容创建一个子域名(如 (static.mydomain.com))并从那里提供所有内容,但这种方法有很大的缺点(域名和子域名没有相同的 SEO)。
nginx 能否进行某种 URL 重写,以便 netlify 上的静态应用出现在我们的域下?或者有人以不同的方式解决了这个问题?
更新:
我采纳了 Josh 的建议,最终得到了以下结果:
服务器 {
...
位置 ^~ /about { proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_passhttp://yourdeployment.netlify.com/about; } }
但是现在有一些资源(js/css/json)是 netlify 从 roor url 加载的http://yourdeployment.netlify.com/somescrip-someshavalue.sj我的 nginx 开始从 mydomain.com 获取。
有什么办法可以拦截这些吗?或者我必须手动添加重定向规则,就像为每个资源添加位置块一样?
答案1
如果您愿意,您应该能够通过使用proxy_pass
nginx 在路径上提供 netlify 应用程序。
像这样的配置应该可以工作:
server {
# ...
location ^~ /about {
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
# remove the preceding "/about/" from the URL
rewrite ^/about/(.*) /$1 break;
# pass it on to the netlify app
proxy_pass http://yourdeployment.netlify.com;
}
}
路径可以是任何你想要的。如果你想使用子域名,你可以设置一个不同的server {}
块,其中包含与server_name
该子域名匹配的块和location / {}
带有代理传递指令的块。