質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.34%
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

329閲覧

status:0 フロントエンドとバックエンドの連携方法について

Rabi_to

総合スコア14

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2024/08/05 13:24

実現したいこと

個人で開発を行っています。
amazon linux2の本番環境で、ブラウザからボタンをクリックし、
axios経由でapiにアクセスできるようにしたいです。
※開発環境では正常にアクセスできています。

発生している問題・分からないこと

ブラウザ検証ツール(ネットワーク)では詳細なエラーがわからなかったため、
console.logと、api側のアクセスとエラーログを取りました。

/proc/XXXXがどの設定に関わってくるのか、そしてそれが解決に関係あるのかわからないため聞きたいです。

エラーメッセージ

error

1■検証ツールのconsole.log 2Access to XMLHttpRequest at 'http://apiのエンドポイント' from origin 'http://IPアドレス' has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space `local`. 3top.vue:60 API error: ae {message: 'Network Error', name: 'AxiosError', code: 'ERR_NETWORK', config: {…}, request: XMLHttpRequest, …}code: "ERR_NETWORK"config: {transitional: {…}, adapter: Array(2), transformRequest: Array(1), transformResponse: Array(1), timeout: 0, …}message: "Network Error"name: "AxiosError"request: XMLHttpRequestonabort: ƒ ()onerror: ƒ ()onload: nullonloadend: ƒ d()onloadstart: nullonprogress: nullonreadystatechange: nullontimeout: ƒ ()readyState: 4response: ""responseText: ""responseType: ""responseURL: ""responseXML: nullstatus: 0statusText: ""timeout: 0upload: XMLHttpRequestUpload {onloadstart: null, onprogress: null, onabort: null, onerror: null, onload: null, …}withCredentials: false[[Prototype]]: XMLHttpRequeststack: "AxiosError: Network Error\n at u.onerror (http://IPアドレス/js/chunk-vendors.92e18a6b.js:14:71005)"[[Prototype]]: Error 4(匿名) @ top.vue:60 5Promise.catch 6apiTest @ top.vue:59 7(匿名) @ runtime-dom.esm-bundler.js:296 8l @ runtime-core.esm-bundler.js:158 9s @ runtime-core.esm-bundler.js:166 10s @ runtime-core.esm-bundler.js:176 11n @ runtime-dom.esm-bundler.js:278 12その他の 5 個のフレームを表示する 13簡易表示 14top.vue:53 15 16■journalctl -u uvicornサービス 17Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: Traceback (most recent call last): 18Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: File "/apiを起動するPythonパス", line 122, in <module> 19Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: uvicorn.run("XXXX:app",host="X.X.X.X",port=XXXX,reload=True,log_level="info") 20Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: File "/minicondaパス/uvicorn/main.py", line 582, in run 21Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: ChangeReload(config, target=server.run, sockets=[sock]).run() 22Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: File "/minicondaパス/uvicorn/supervisors/basereload.py", line 50, in run 23Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: for changes in self: 24Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: File "/minicondaパス/uvicorn/supervisors/basereload.py", line 69, in __ne 25Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: return self.should_restart() 26Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: File "/minicondaパス/site-packages/uvicorn/supervisors/statreload.py", line 32, in shou 27Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: for file in self.iter_py_files(): 28Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: File "/minicondaパス/site-packages/uvicorn/supervisors/statreload.py", line 52, in iter 29Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: for path in list(reload_dir.rglob("*.py")): 30Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: File "/minicondaパス/pathlib.py", line 1047, in rglob 31Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: for p in selector.select_from(self): 32Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: File "/minicondaパス/pathlib.py", line 493, in _select_from 33Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: for p in successor_select(starting_point, is_dir, exists, scandir): 34Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: File "/minicondaパス/pathlib.py", line 440, in _select_from 35Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: with scandir(parent_path) as scandir_it: 36Aug 05 11:54:48 ip-172-26-4-110.ap-northeast-1.compute.internal python3.10[8910]: FileNotFoundError: [Errno 2] No such file or directory: '/proc/XXXX'

該当のソースコード

nginxの設定

1server { 2 listen 80 default_server; 3 listen [::]:80; 4 server_name localhost; #ローカルホストからアクセスを受け取る 5 index index.html index.js; 6 root /フロントエンドのフォルダ; 7 8 9 #front end 10 location / { 11 try_files $uri $uri/ /index.html = 404; 12 } 13 #back end 14 location /api/ { 15 proxy_pass http://uvicornのドメイン/api/; 16 proxy_set_header Host $http_host; 17 proxy_set_header X-Real-IP $remote_addr; 18 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 19 20 add_header Access-Control-Allow-Origin *; 21 add_header Access-Control-AllowMethods 'GET,POST'; 22 add_header Access-Control-Allow-Headers 'Origin, Content-Type, Accept, Authorization'; 23 } 24 #エラーページ設定 25 error_page 404 /404.html; 26 location = /404.html {} 27 28 error_page 500 502 503 504 /50x.html; 29 location = /50x.html { 30 root /usr/share/nginx/html; 31 } 32}

javascript

1 async clickApiTest(){ 2 const result2 = await this.$axios.get('/api/アクセス確認用エンドポイント 3 ) 4 .then(response => { 5 // 成功処理 6 console.log("response==>",response) 7 }) 8 .catch(error => { 9 console.error("API error:", error); 10 }); 11 },

uvicornサービス

1[Unit] 2Description=server apiのサーバー名 3 4[Service] 5User=ユーザー名 6Group=グループ名 7ExecStart=/python実行ファイル /uvicornを実行するPythonファイル 8Restart=always 9 10[Install] 11WantedBy=multi-user.target

python

1■axios経由でapiにアクセスしたいコード 2from fastapi import APIRouter 3# #app.db.models テーブルを呼び出す 4その他動作に必要なモジュールをimport 5 6from logging import getLogger, StreamHandler, DEBUG 7 8router = APIRouter( 9 prefix="/api/エンドポイント名", 10 tags=["エンドポイント名"], 11 responses={404:{"description":"Not Found!"}}, 12) 13 14@router.get("/api_test") 15async def api_test(): 16 logger = getLogger(__name__) 17 handler = StreamHandler() 18 handler.setLevel(DEBUG) 19 logger.setLevel(DEBUG) 20 logger.addHandler(handler) 21 logger.propagate = False 22 23 logger.debug('hello') 24 25 return json形式で結果を返すメソッド

python

1from fastapi import FastAPI 2from starlette.middleware.cors import CORSMiddleware 3from apscheduler.schedulers.blocking import BlockingScheduler 4各種エンドポイントのモジュール 5 6import uvicorn 7 8import sys 9sys.dont_write_bytecode = True 10 11app = FastAPI() 12 13app.include_router(各種エンドポイントのルーター) 14 15app.add_middleware( 16 CORSMiddleware, 17 allow_origins=['*'], #ブラウザからapiへアクセス確認のため*にしてる。 18 allow_credentials=True, 19 allow_methods=['*'], 20 allow_headers=['*'] 21) 22 23 24if __name__ == "__main__": 25 uvicorn.run("root:app",host="X.X.X.X",port=XXXX,reload=True,log_level="info")

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

curlコマンドとブラウザからそれぞれ、apiにアクセスできるか試しましたが特に問題ありませんでした。
procフォルダのことを調べましたが、メモリ上に作られる仮想的なファイルとしかわからず解決には至りませんでした。

補足

apiは、fastapiを使用してます。
Docker 未使用です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2024/08/05 16:31

まず、console.logの結果とjournalctl -u uvicornの結果に関連性があるかここに書いてあることだけから読み取ることが不可能なので、まず見えてるconsole.logのCORSのエラーについて調べてみてはどうでしょうか。
Rabi_to

2024/08/05 22:15 編集

コメントありがとうございます。 結論から言うと解決しました。 今回のCORSのエラーはchromeやEdgeで採用されているPrivate Network Access (formerly CORS-RFC1918)の影響の可能性があり、これが施されていないfirefoxで試したところ、axios経由でapiにアクセスできることが確認できました。 これで次のステップに入れます。ありがとうございました。 最後にyu_1985さんのコメントをベストアンサーとさせてください。
yu_1985

2024/08/06 06:42

では、回答として書き直しておきます。
guest

回答1

0

ベストアンサー

※コメントのところに書いたものと同じです
この質問の内容に対しては、まずconsole.logでCORSのエラーが出ているのでそこについての原因を調査すべきところです。

Access to XMLHttpRequest at 'http://apiのエンドポイント' from origin 'http://IPアドレス' has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space local.

投稿2024/08/06 06:44

yu_1985

総合スコア7595

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Rabi_to

2024/08/06 21:06

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.34%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問