【问题标题】:Nginx API subdomainNginx API 子域
【发布时间】:2016-11-18 13:48:52
【问题描述】:

我刚刚为 API 使用创建了子域。现在它看起来像 api.example.com 并且一切正常。但是我想禁止从 api.example.com 访问 html 视图。它应该只响应 api 调用。

scope module: 'web' do
    root 'home#index'
end

constraints subdomain: 'api' do
    scope module: 'api' do
        scope module: 'v1' do

        end
    end
end

我想我可以通过构建适当的位置指令来实现它

server {
        listen 80;
        listen [::]:80;

        rails_env production;
        root /home/example/current/public;

        server_name api.example.com;
        #location ???
}

example.com 域的以下块:

server {
          listen 80;
          listen [::]:80;

          rails_env production;
          root /home/example/current/public;

          server_name example.com;
          error_page   500 502 503 504  /50x.html;

          location = /50x.html {
              root   html;
          }

}

我怎样才能做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby api nginx server


    【解决方案1】:

    我认为你不必在 nginx 中做任何事情。这一切都将由您的 Rails 路由器处理。

    说,你有这个代码:

    scope module: 'web' do
      root 'home#index'
    
      resources :articles
    end
    
    constraints subdomain: 'api' do
      scope module: 'api' do
        scope module: 'v1' do
          resources :articles
        end
      end
    end
    

    您的网络文章控制器提供 html。如果您尝试通过 api 子域 (http://api.example.com/articles/1) 访问它,您将得到 404,因为此路由未针对此约束定义。你只能做http://api.example.com/api/v1/articles/1 渲染json,而不是html。

    【讨论】:

    • 我忘了添加,但它是 subdomian 的 subdomian:api.subdomain.example.com。 Example.com 位于 subdomian.example.com 和 api.subdomain.example.com 以外的其他 vps 上。但是是同一个局域网
    • 差别不大。除了web 约束,您可以在before_action 中进行单行检查,这将检查子域 - 它是一个 Web 控制器,但 api 子域 - 重定向或呈现 404 或其他。
    • 所以主 DNS 服务器将两个域(subdomian 和 api.subdomain)指示为相同的 ip 地址
    • 此外,使用 nginx 似乎也很容易:只需拒绝所有不以 /api/v1 开头的位置。但是我的 nginx-fu 不足以提供这个答案:)
    • 对我来说也一样。我是 nginx 新手,但我想在 nginx 而不是 rails 应用程序中进行操作
    猜你喜欢
    • 2019-03-05
    • 2017-11-18
    • 1970-01-01
    • 2016-06-17
    • 2012-04-11
    • 2011-01-30
    • 2012-09-19
    • 1970-01-01
    相关资源
    最近更新 更多