簡體   English   中英

Heroku - 在同一域上使用 Nginx 分離前端和后端

[英]Heroku - Seperate frontend and backend with Nginx on same domain

我有一個帶有兩個 github 存儲庫的應用程序,一個用於反應,一個用於 Rails 應用程序。 要求是所有路由都應該去 Rails 服務器,除了以 /catalog 開頭的路由應該去 React 應用程序。 Rails 應用服務器將在內部與 React Server 通信。 SSL 在 Nginx 級別配置。

我在 heroku 中創建了 3 個不同的應用程序:

  • Rails 服務器應用程序
  • 反應服務器應用程序
  • 網絡服務器(Nginx)

我的 nginx 服務器配置如下:

upstream rails {
  server $HEROKU_APP_rails_URL;
}

upstream react {
  server $HEROKU_APP_react_URL;
}


server {
  listen $PORT;
  server_name *.xyz.com;
  # large_client_header_buffers 4 32k;

  location / {
    proxy_set_header    Host $host;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass          http://rails;
  }

  location /catalog {
    
    proxy_set_header    Host $host;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass          http://react;
  }
}

使用上述配置,我在 Nginx 上收到 HTTP 400 錯誤,並且無法重定向請求。 請讓我知道我做錯了什么。

終於設法解決了這個問題..我的 nginx 配置看起來像

  upstream upstream_app_a {
        server app_a.herokuapp.com:443;
    }

    upstream upstream_app_b {
        server app_b.herokuapp.com:443;
    }

    server {
    
        listen $PORT;

        location / {
            set $upstream upstream_app_a;
            proxy_pass https://$upstream;
            proxy_ssl_name app_a.herokuapp.com;
            proxy_set_header x-forwarded-host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host app_a.herokuapp.com;
            
        } 
        location /static {
            set $upstream upstream_app_b;
            proxy_pass https://$upstream/static;
            proxy_set_header        Host app_b.herokuapp.com;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto $scheme;
          
        }

        location /product_catalog {
            set $upstream upstream_app_b;
            proxy_pass https://$upstream;
            proxy_ssl_name app_b.herokuapp.com;
            proxy_set_header x-forwarded-host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host app_b.herokuapp.com;
        }
    }

請確保為標題設置正確的值

proxy_set_header Host app_a.herokuapp.com

我們通過參考文章設法解決了這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM