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

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

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

Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

nginx

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

Python 3.x

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

Q&A

解決済

1回答

10260閲覧

Nginxのリバースプロキシを通してファイルをPOSTできない

dnnksk

総合スコア8

Gunicorn

Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

nginx

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

Python 3.x

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

0グッド

0クリップ

投稿2018/06/11 05:20

#やりたいこと
http://192.168.0.10/gunicornにファイルをPOSTすると,サーバ2に保存されるようにしたい.

#構成

  • サーバ1

Nginxが動作中
IPアドレス:192.168.0.10
開放済みポート: 80, 443
nginxの設定(抜粋)

location /gunicorn/ { proxy_pass http://192.168.0.11:9000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_redirect off; proxy_buffering on; proxy_cache gitlab; proxy_cache_valid 200 1d; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400; }
  • サーバ2

Gunicornが9000番ポートで動作中
IPアドレス:192.168.0.11
開放済みポート: 9000
サーバ側ソースserver.py

import falcon from falcon_multipart.middleware import MultipartMiddleware import json from datetime import datetime class CORSMiddleware: def process_request(self, req, resp): resp.set_header('Access-Control-Allow-Origin', '*') class Upload: def on_post(self, req, res): image = req.get_param('file') raw = image.file.read() filepath = './' + datetime.now().strftime('%Y%m%d%H%M%S') + '.jpg' with open(filepath, 'wb') as f: f.write(raw) resp = { 'result': filepath + ' uploaded', } res.body = json.dumps(resp) api = falcon.API(middleware=[CORSMiddleware(), MultipartMiddleware()]) api.add_route('/gunicorn', Upload())

$ gunicorn server:api -b 0.0.0.0:9000

問題点

Content-Type: multipart/form-dataでファイルをアップロードすると,405 Method Not Allowedエラーが表示され,アップロードができません.キャッシュの問題を考えましたが,解決しませんでした.

要求ヘッダー

Accept: text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: ja,en-US;q=0.7,en;q=0.3 Connection: keep-alive Content-Length: 288298 Content-Type: multipart/form-data; boundary=…-1967630983873251128828464698 Cookie: _xsrf=2|74f490ef|cdf9585ea48f4404597ee2bbbd0f3805|1528683448 DNT: 1 Host: 192.168.10.1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel …) Gecko/20100101 Firefox/60.0

応答ヘッダー

content-length: 178 content-type: text/html date: Mon, 11 Jun 2018 05:04:06 GMT location: http://192.168.10.1/gunicorn server: nginx strict-transport-security: max-age=31536000 X-Firefox-Spdy: h2

リバースプロキシを介さずに,サーバ2のみで動作させると正常に動作します.リバースプロキシを通す際に,POSTがGETに変わっているか,POSTしたファイルが欠損しているのでしょうか.

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

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

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

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

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

guest

回答1

0

ベストアンサー

http://192.168.0.10/gunicornに対してnginxのlocationがlocation /gunicorn/ {ですと一致せず、リバースプロキシされずに処理されるのでエラーになっていませんか?

locationlocation /gunicorn {に書き換えてみてはいかがでしょうか。

投稿2018/06/11 08:47

denzow

総合スコア640

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問