Как передать аргументы URL в Flask за Nginx proxy_pass с сокетом unix - PullRequest
0 голосов
/ 22 мая 2018

У меня есть приложение Flask с bjoern в качестве сервера python.Пример URL, который у меня есть, выглядит примерно так:

http://example.com/store/junihh
http://example.com/store/junihh/product-name

Где "junihh" и "product-name" - это аргументы, которые мне нужно передать python.

Я пытаюсь использовать сокет unixпосле прочтения о производительности против вызовов TCP / IP.Но теперь я получаю 502 ошибку в браузере.

Это фрагмент моего conf:

upstream backend {
    # server localhost:1234;
    # server unix:/run/app_stores.sock weight=10 max_fails=3 fail_timeout=30s;
    server unix:/run/app_stores.sock;
}

server {
    listen                      80 default_server;
    listen                      [::]:80 default_server;
    server_name                 example.com www.example.com; 
    root                        /path/to/my/public;

    location ~ ^/store/(.*)$ {
        include                 /etc/nginx/conf.d/jh-proxy-pass.conf;
        include                 /etc/nginx/conf.d/jh-custom-headers.conf;

        proxy_pass              http://backend/$1;
    }
}

Как передать аргументы url в Flask через Nginx proxy_pass с сокетом unix?

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 22 мая 2018

Вот мой конф, он может работать.502 объясняется тем, что он не может найти маршрут к вышестоящему серверу (т. Е. Изменение http://127.0.0.1:5000/$1 на http://localhost:5000/$1) приведет к 502.

nginx.conf

http {
    server {
        listen       80; 
        server_name  localhost;

        location ~ ^/store/(.*)$ {
            proxy_pass http://127.0.0.1:5000/$1;
        }   
    }   
}

flask app.py

#!/usr/bin/env python3

from flask import Flask

app = Flask(__name__)

@app.route('/')
def world():
    return 'world'

@app.route('/<name>/<pro>')
def shop(name, pro):
    return 'name: ' + name + ', prod: ' + pro

if __name__ == '__main__':
    app.run(debug=True)

Обновление

или вы можете использовать сокет Unix, как это, но ретранслировать на uwsgi .

nginx.conf

http {
    server {
        listen       80; 

        location /store {
            rewrite /store/(.+) $1 break;
            include uwsgi_params;
            uwsgi_pass unix:/tmp/store.sock;
        }   
    }   
}

колба app.py

как указано выше, без изменений

uwsgi config

[uwsgi]
module=app:app
plugins=python3
master=true
processes=1
socket=/tmp/store.sock

uid=nobody
gid=nobody

vaccum=true
die-on-term=true

сохранить как config.ini, затем запустить uwsgi config.ini

после перезагрузки nginx, вы можете посетить вашу страницу; -)

...