実現したいこと
個人で開発を行っています。
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 未使用です。
回答1件
あなたの回答
tips
プレビュー