Рейтинг:0

Почему я могу написать один набор URL-адресов, но не могу использовать другие с NGINX?

флаг in

Я настроил NGINX версии 1.18.0 в качестве обратного прокси-сервера для своей установки Apache Superset 1.4.0.

Я пытаюсь зафиксировать некоторые шаблоны URL, и переписать их, добавив автономный = 1 в конце.

Следующая конфигурация NGINX работает должным образом:

расположение /надмножество/исследовать/ {
        если ($args ~* "(.*?)slice_id%22%3A133(.*)$") {
            переписать ^/superset/explore/(.*)$ /superset/explore/$1?standalone=1 break;
        }

        прокси_пароль http://127.0.0.1:8087;
        proxy_set_header Хост $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-Proto $ схема;
    }

Потому что, когда я посещаю (с Chrome) такой URL-адрес, как http://192.168.239.40:8088/superset/explore/?form_data=%7B%22viz_type%22%3A%22echarts_timeseries_line%22%2C%22datasource%22%3A%2233__table%22%2C%22slice_id%22%3A133% 2С..., я вижу, что он заменен оригинальным плюсом &автономный=1 добавляется к URL-адресу, когда я проверяю адресную строку Chrome.

Но когда я пытаюсь сделать что-то подобное для другого шаблона URL для Apache Superset, например, следующего:

   расположение /панель управления/список/ {
        переписать ^/dashboard/list/(.*)$ /dashboard/list/$1?standalone=1 break;

        прокси_пароль http://127.0.0.1:8087;
        proxy_set_header Хост $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-Proto $ схема;
    }

и я прошу http://192.168.239.40:8088/приборная панель/список/ в Chrome я вижу, что адресная строка заменена на http://192.168.239.40:8088/dashboard/list/?pageIndex=0&sortColumn=changed_on_delta_humanized&sortOrder=desc&viewMode=table но я не вижу никаких &автономный=1 добавлено.

Я также проверил журналы Superset, чтобы узнать, что он обслуживает после того, как я запросил http://192.168.239.40:8088/приборная панель/список/ и я вижу это ?автономный=1 на самом деле добавлен!

10 февраля 14:09:19 панель инструментов-сервер python[34169]: 2022-02-10 14:09:19,482:INFO:werkzeug:127.0.0.1 - - [10/февраль/2022 14:09:19] "GET / панель инструментов/список/?standalone=1 HTTP/1.0" 200 -
10 февраля 14:09:20 панель инструментов-сервер python[34169]: 2022-02-10 14:09:20,729:INFO:werkzeug:127.0.0.1 - - [10/февраль/2022 14:09:20] "GET / API/v1/dashboard/_info?q=(ключи:!(разрешения)) HTTP/1.0" 200 -
10 февраля 14:09:20 панель инструментов-сервер python[34169]: 2022-02-10 14:09:20,771:INFO:werkzeug:127.0.0.1 - - [10/февраль/2022 14:09:20] "GET / api/v1/dashboard/?q=(order_column:changed_on_delta_humanized,order_direction:desc,page:0,page_size:25) HTTP/1.0" 200 -

Есть идеи, почему это происходит?

Полный /etc/nginx/conf.d/superset.conf составляет:

сервер {
    слушать 8088;
    имя_сервера 192.168.239.40;

    место расположения / {
        прокси_пароль http://127.0.0.1:8087;
    }

    расположение /надмножество/исследовать/ {
        если ($args ~* "(.*?)slice_id%22%3A133(.*)$") {
            переписать ^/superset/explore/(.*)$ /superset/explore/$1?standalone=1 break;
        }

        прокси_пароль http://127.0.0.1:8087;
        proxy_set_header Хост $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-Proto $ схема;
    }

   расположение /панель управления/список/ {
        переписать ^/dashboard/list/(.*)$ /dashboard/list/$1?standalone=1 break;

        прокси_пароль http://127.0.0.1:8087;
        proxy_set_header Хост $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-Proto $ схема;
    }


    # требуется, так как надмножество имеет жестко заданные URL-адреса базового пути
    местоположение /статическое/ {
        proxy_pass http://127.0.0.1:8087/static/;
    }

    # для предоставления определенной панели инструментов с использованием пользовательского URL-адреса
    # приведенный ниже пример сделает панель инструментов 2 доступной в автономном режиме
    # на $host/dashboards/my-dashboard
    расположение /панели инструментов/моя панель {
        proxy_pass http://127.0.0.1:8087/superset/dashboard/2/?standalone=true;
    }
}
Рейтинг:1
флаг us

Подобное изменение URL-адресов довольно опасно, если не знать подробностей того, как вышестоящее приложение на самом деле обрабатывает URL-адреса. Это может привести ко многим трудным для диагностики ошибкам.

Вам следует пересмотреть свою первоначальную цель и подумать, сможете ли вы достичь ее каким-либо другим способом.

Что становится с вашей текущей проблемой: переписать... сломать является внутренней перезаписи URL. Это означает, что nginx изменяет только URL-адрес, который отправляется на вышестоящий сервер.

В этом случае ваш вышестоящий сервер просто возвращает страницу, указанную измененным URL-адресом.

В браузере клиента URL-адрес не изменяется, поскольку сервер просто возвращает содержимое для запрошенного URL-адреса.

Что происходит в случае, когда URL-адрес браузера изменяется с этой конфигурацией: в этом случае ваше вышестоящее приложение, похоже, отвечает перенаправлением 302, которое заставляет браузер посещать другой URL-адрес.

Если вы хотите, чтобы клиент перешел по URL-адресу, вам нужно отправить HTTP-перенаправление:

переписать ^/dashboard/list/(.*)$ /dashboard/list/$1?standalone=1;

Однако это, скорее всего, само по себе создаст петлю перенаправления, поскольку одно и то же место расположения block захватывает запрос снова и снова. Создание незацикленной переадресации HTTP может стать довольно сложным упражнением.

Итак, я бы рассмотрел альтернативные способы решения актуальной проблемы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.