保留します
自己解決しそうなのですが、今、細かく書く余裕がないのであとで自己解決書きます!遅くとも月曜には書きます
何かヒントが欲しいです。
現状
reactとrails APIモードで開発をしています。apiには「ホスト名/api/v1」でアクセスできます。
現在、reactとrails APIのそれぞれに1つずつnginxを使っています。それをEC2に載せたのですが、nginx周りの設定が出来ておらずサイトにアクセスしてもエラーは出ないものの何も表示されない状態です。おそらくrailsの方にアクセスしているのかと思います。
問題
・現状railsにしかアクセスできていないこと
しかし、api/v1にアクセスしてもjsonが返ってこないのが気になります。
・nginxを二つ使って良いのかわからない。
実現したいこと
最終的には
http://ホスト名/api/v1にアクセスした時にはrails apiにそれ以外はreactに繋がるようにしたい。
考えたこと
①nginx二つでやるのが普通か。もしくは一つだけ使いnginxの設定で振り分けるのか。
ちょっと調べてみたところlocationというので繋ぐ先を振り分けることができるっぽいので後者かと考えました。
②分けるとした場合どうすれば良いのか。
①の考えが正しかったとしたら
- nginxを1つにする
- nginxの設定を1つにまとめる
具体的にはapiのルートが「ホスト/api/v1」なのでバックエンドへのアクセスを「location api/v1」としてフロントエンドのアクセスを「location /」で書く。
という作業を踏むことになると思うのですが、
現状、apiの方のnginxはupstreamというものを用いています。
このupstreamで定義したappをどう「location /api/vi」に置き換えれば良いのかがわからないです。
nginx
1upstream app { 2 server unix:///app/tmp/sockets/puma.sock; 3} 4 5server { 6 listen 80; 7# =========ローカルと本番切り替え=========== 8 9 #server_name ~~~~~~~; 10 server_name localhost; 11 12# ====================================== 13 14 access_log /var/log/nginx/access.log; 15 error_log /var/log/nginx/error.log; 16 17 root /app/public; 18 19 client_max_body_size 100m; 20 error_page 404 /404.html; 21 error_page 505 502 503 504 /500.html; 22 try_files $uri/index.html $uri @app; 23 keepalive_timeout 5; 24 25 location @app { 26 proxy_set_header X-Real-IP $remote_addr; 27 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 28 proxy_set_header Host $http_host; 29 proxy_pass http://app; 30 } 31} 32
ちなみにフロントの方のnginxの設定はこうなっています。
server { listen 80; location / { root /var/www; index index.html index.htm; try_files $uri /index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
ご教示いただけたら幸いです。よろしくお願いします。
追記 nginxを一つにまとめてみました(local)
私が考えたことをローカルで実際に試してみたのですが、reactにしかアクセスできませんでした。reactはまだ一切いじってないので、どのルートにアクセスしてもreactのロゴが回るあの初期画面のままです。
以下の設定では/api/v1にアクセスされた時だけrailsに繋がるようにしたつもりなのですが。。。
改めましてどなたかご教示お願いします。よろしくお願いします!
nginx
1upstream app { 2 server unix:///app/tmp/sockets/puma.sock; 3} 4 5server { 6 listen 80; 7# =========ローカルと本番切り替え=========== 8 9 #server_name 54.95.194.179; 10 server_name localhost; 11 12# ====================================== 13 14 access_log /var/log/nginx/access.log; 15 error_log /var/log/nginx/error.log; 16 17 root /app/public; 18 19 client_max_body_size 100m; 20 error_page 404 /404.html; 21 error_page 505 502 503 504 /500.html; 22 try_files $uri/index.html $uri @app; 23 keepalive_timeout 5; 24 25 location / { 26 root /var/www; 27 index index.html index.htm; 28 try_files $uri /index.html; 29 } 30 error_page 500 502 503 504 /50x.html; 31 location = /50x.html { 32 root /usr/share/nginx/html; 33 } 34 location /api/v1 { 35 location @app { 36 proxy_set_header X-Real-IP $remote_addr; 37 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 38 proxy_set_header Host $http_host; 39 proxy_pass http://app; 40 } 41 } 42} 43
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。