2016-12-07 2 views
3

У меня есть следующие настройки:Колба Proxy разрешить url_for

  • Главный сервер:
    Nginx пересылки "https://example.com/machine1/*" -> "http://machine1/*"
  • MACHINE1:
    ngnix + uwsgi + колба монтажа на /, например, /foobar.

Это означает, что https://example.com/machine1/foobar ударит MACHINE1 в /foobar. У меня есть точка крепления /machine1 в переменной, NGINX_MOUNT_URL.

Проблема в том, что url_for не решает, что.

Я попытался

app.config["APPLICATION_ROOT"] = NGINX_MOUNT_URL # = "/machine1" 

но, кажется, относится только к печенью URLs.

Есть простой вид:

@app.route("/foobar") 
def web_foobar(): 
    from flask import url_for 
    return "The URL for this page is {}".format(url_for("web_foobar")) 
# end def 

Итак, просматривающие https://example.com/machine1/foobar (Главный сервер) получит прокси-соединение http://machine1/foobar (MACHINE1), который отображает The URL for this page is /foobar. Мне нужно, чтобы это было /machine1/foobar, для связи в шаблонах для работы.

Я пробовал предлагаемые решения в https://stackoverflow.com/a/18967744/3423324, но это всегда заканчивалось тем, что мне пришлось просматривать https://example.com/machine1/machine1/foobar, чтобы получить страницу /foobar.

Как сделать flask.url_for осведомленным о APPLICATION_ROOT?

+0

Это старый вопрос, но, случайно, что кто-то еще появляется, одним из способов, которым я достиг этого, является передача «url_prefix = '/ machine1» при регистрации сервисного модуля ('register_module' был позже переименован к ['register_blueprint'] (https://github.com/pallets/flask/blob/71b7c4f5f89ea5e95dc7881797ca7d3a06b97e2f/flask/app.py#L955), похоже). – Bahrom

+0

Я позже использовал https://stackoverflow.com/a/47155246/3423324 – luckydonald

ответ

-1

Посмотрите How do I get the different parts of a Flask request's url?

В path и script_root переменные запроса выглядеть правильно для того, что вам нужно.

+0

Проблема заключается в том, что для механизма шаблона отсутствует '/ machine1' перед URL-адресом при генерации его с помощью' url_for'. – luckydonald

Смежные вопросы