@Aoky

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

リバースプロキシでPOSTしたい

リバースプロキシでPOSTをしたい

この質問の続きです。
https://qiita.com/Aoky/questions/d76532263d462a07f693

nginxでAPIサーバーを建てたのはいいのですが、リバースプロキシをしていて、おそらくそれが原因でPOSTがすべてGETになってしまいます。

発生している問題

var/log/nginx/access.log
 - - [13/Mar/2023:15:05:37 +0900] "POST /createImage HTTP/1.1" 301 169 "-" "python-requests/2.28.2" "-"
 - - [13/Mar/2023:15:05:37 +0900] "GET /createImage/ HTTP/1.1" 405 31 "-" "python-requests/2.28.2" "-"

このようにPOSTを送ります。(なぜかGETも送られている)

uvicornのログ.
INFO:     127.0.0.1:35354 - "GET /createImage HTTP/1.0" 405 Method Not Allowed

ですが、uvicornで建てたサーバーのほうには、GETが送られています。

curlした場合.
INFO:     127.0.0.1:44574 - "POST /createImage?data=data HTTP/1.1"

サーバー内で、localhostにcurlすると、うまくいきます。

該当するソースコード

main.py
@app.post("/createImage")
def test2(data):
    # 処理

一応、pythonにはpostも書いてあります。

/etc/nginx/nginx.conf
 location /createImage/ {
         limit_except GET POST {
                     deny all;
                 }
         proxy_pass http://localhost:8000/createImage;
 }

 location /test/ {
         proxy_pass http://localhost:8000/test;
 }

リバースプロキシはこのようにしております。

言い訳

まだプログラミングを勉強し始めて1年もたっていない初心者なので、APIサーバーについて全く分かっていなく、本当にnginxで建てるのか、ディレクトリはここで合っているのかなど手探りしている状態です。どうかお詳しい方々教えていただきたいです。

0 likes

3Answer

postするときのurlの末尾に/をいれてcurlしたらどうでしょうか?


http://FQDN/createImage/?data=data

location /createImage/

とnginxで記載しているためそのようなパスになっているものかと思われます

ちなみに、getが返ってきてるのは、パスが違うためにcurlした結果、405のエラーを返しているためだと思います。

1Like

Comments

  1. @Aoky

    Questioner

    ありがとうございます、別のところに返信します。
  2. @Aoky

    Questioner

    ありがとうございました!無事解決しました!

windowsでcurlがなぜかできなかったので、pythonでPOSTしました

元のpost.py
import requests

response = requests.post('https://example.com/createImage', json={},headers={'Content-Type': 'application/json'}
)
print(response)
修正後のpost.py
import requests

response = requests.post('https://example.com/createImage/', json={},headers={'Content-Type': 'application/json'}
)
print(response)

修正後、うまくPOSTが通るようになりました!

INFO:     127.0.0.1:56020 - "POST /createImage HTTP/1.0" 422 Unprocessable Entity

ですが、今度は422 Unprocessable Entityというエラーが出てしまいました。
jsonの中身を正しいものにしても、結果は変わりませんでした...

1Like

Comments

  1. @Aoky

    Questioner

    すいません解決しました!
    curlのやり方を学んでcurlしてみたところうまく動作しました!
    おそらくpythonのコードのほうも間違っていたそうです。
    返信ありがとうございました!助かりました!

Your answer might help someone💌