nginx proxy_pass用于获取带参数的请求api调用

时间:2018-03-08 04:55:35

标签: api docker nginx flask gunicorn

我有简单的flask rest api,它从数据库中获取数据并在json文件中将结果提供给用户。 flask服务器在提交时从html输入文件获取参数,这些参数用于从数据库中获取数据。它与烧瓶内置的WSGI服务器工作正常。我想在生产中使用nginx作为我的Web服务器和gunicorn作为应用程序服务器进行部署。当我运行docker容器并访问根URL时,我可以获取html表单供用户输入参数。当我点击提交时,会调用另一个api资源调用,但是我找不到'未找到的网址'或“内部服务器错误'。对于带有URL参数的get请求api调用的nginx位置配置,这肯定存在问题。请帮我告诉我如何为这种请求配置nginx proxy_pass URL。

我提交表单时,我的浏览器请求网址看起来像这样。 http://IP地址/ api / v1 / service?key = 12345& name = abc& id = 1234

HTML(form.html)

<form  name="device" action="/api/v1/service">

Python查看功能

@app.route('/')
def my_form():
    return render_template('form.html')
@app.route('/api/v1/service', methods=['GET'])
def my_form_get():
    ..............
    .............

nginx服务器

server {
    listen      80;

    location / {
        proxy_pass http://localhost:5000/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
   location  /api/v1/service {
        proxy_pass http://localhost:5000/api/v1/service;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Gunicorn配置

[program:gunicorn]
command=/usr/bin/gunicorn run:app -b localhost:5000
directory=/deploy/app

1 个答案:

答案 0 :(得分:0)

您可以使用以下nginx配置:

<input type="file" accept=".xls, .xlsx, .csv" placeholder="File to be upload" />