【问题标题】:nginx proxy_pass for get request api call with parametersnginx proxy_pass 用于获取带参数的请求 api 调用
【发布时间】:2018-08-16 08:49:15
【问题描述】:

我有简单的烧瓶休息 api,它从数据库中获取数据并在 json 文件中将结果提供给用户。烧瓶服务器在提交时从 html 输入文件中获取参数,这些参数用于从数据库中获取数据。它与烧瓶内置的 WSGI 服务器一起工作正常。我想在生产中部署 nginx 作为我的 web 服务器, gunicorn 作为应用程序服务器。当我运行 docker 容器并访问根 url 时,我可以获取 html 表单供用户输入参数。当我单击提交时,会调用另一个 api 资源调用,但我得到“找不到 URL”或“内部服务器错误”。这肯定与我在 URL 中使用参数的 get request api 调用的 nginx 位置配置有关。请帮助我如何为这种请求配置 nginx proxy_pass URL。

当我提交表单时,我的浏览器请求 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

【问题讨论】:

  • 您是否尝试直接 curl 服务 url?
  • 你是在一个 docker 容器中运行 nginx 而在另一个容器中运行 gunicorn 吗?如果是这样,在您的 nginx proxy_pass 配置中使用“localhost”将不起作用。您需要使用 gunicorn docker 容器的主机名。

标签: api docker nginx flask gunicorn


【解决方案1】:

可以使用如下的nginx配置:

upstream v1service {
  server v1servicecontainer:8080;
}

server {
  listen 80;

  location ~ ^/api/v1/service(.*)$ {
  resolver 127.0.0.1;
  proxy_pass http://v1service/api/$1$is_args$args;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Host $server_name;
}

【讨论】:

    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2011-08-15
    • 1970-01-01
    • 2019-07-18
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多