【发布时间】:2020-04-08 01:33:21
【问题描述】:
编辑
我的问题和问题的更简洁的总结如下:
我有一个 QA 测试员,他需要验证 QA 服务器上的功能
通过点击app.com 域来直观地检查应用程序,然后需要针对同一台服务器发出一系列邮递员 api 请求。问题是域名不一样。
所以在看到app.com 的代码按预期工作后,qa-tester 将访问以下域
differentdomain_one.com/users ----> localhost
differentdomain_two.com/blogs ----> localhost
differentdomain_three.com/ ----> localhost
这些域由 app.com 处理,但需要在邮递员中由 differentdomain_one.com 等显式调用。我希望这些域是 localhost 映射到 localhost。 app.com 将命中其相应的 A 记录,并且 api 将命中 localhost。我该怎么做?
我有一个具有以下域的生产 Rails 应用程序:
app.com
现在在这个 rails 应用程序中有一个 api 代码,它会到达另一个 url 端点。该端点如下所示:
api.app.com
所以在生产中,用户可以执行以下端点:
api.app.com/users
api.app.com/users/1
api.app.com/users/1/posts
等等。等等
现在我已经为我的开发环境设置了它,以便我的开发 url 是传统的端口 3000 端点。正在开发的应用如下:
app.local:3000
伴随这个url,api url如下:
api.app.local:3000
通过邮递员,我可以拨打以下电话:
api.app.local:3000/users
api.app.local:3000/users/1
api.app.local:3000/users/1/posts
值得注意的是,我的/etc/hosts 中有这个api 条目。
127.0.0.1 api.app.local
通过在/etc/hosts 中输入此条目,我可以与 Postman 通话以进行本地开发通话。
现在我遇到的问题是,我需要在部署环境中为我的 qa 测试人员做同样的事情,仅用于 qa。我已将 Rails 应用程序部署到 ec2 实例。该环境具有映射到 IP 的以下 url。
1.2.3.4.5 qa.app.com
点击qa.app.com就可以看到渲染出来的应用了。现在的问题是api部分。我认为需要做的就像我的开发环境一样,我需要在我的/etc/hosts 中放置一些东西,但我不确定是什么。
这是我首先尝试的。我尝试将以下内容放入/etc/hosts。
1.2.3.4.5 api.app.local
据我所知,这将告诉 nginx 立即将 api.app.local 映射到注册的 ip 1.2.3.4.5 而无需进行 dns 查找。但现在我对邮递员感到困惑。通过执行以下 api 调用,我收到一条错误消息,指出邮递员无法连接。
Could not get any response
There was an error connecting to https://api.app.local:3000/users.
我知道我不在本地主机上,所以端口可能是问题所在。但是,如果我在没有端口的情况下进行此 api 调用,我会得到同样的错误:
Could not get any response
There was an error connecting to https://api.app.local/users.
这让我想知道我应该如何从这个 qa 环境中调用 api。这甚至是正确的方法还是proxy_pass 指令更合适?这是我用于检查的 nginx conf 文件。
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name 1.2.3.4.5;
passenger_enabled on;
rails_env qa;
root /home/ubuntu/app/public;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
}
我需要将api.app.local 添加到server_name 块中吗?我认为不是因为我在/etc/host 中有它。如果有人熟悉这方面的专业知识,我将非常感谢我如何通过 nginx 实现访问 api。
【问题讨论】:
标签: ruby-on-rails nginx