Puncte:0

De ce pot scrie un set de adrese URL, dar nu altele cu NGINX?

drapel in

Am configurat NGINX, versiunea 1.18.0, ca proxy invers pentru instalarea mea Apache Superset 1.4.0.

Încerc să capturez câteva modele de adrese URL și rescrie ei prin adăugarea independent=1 la sfarsit.

Următoarea configurație NGINX funcționează conform așteptărilor:

locație /superset/explore/ {
        dacă ($args ~* "(.*?)slice_id%22%3A133(.*)$") {
            rescrie ^/superset/explore/(.*)$ /superset/explore/$1?standalone=1 pauză;
        }

        proxy_pass http://127.0.0.1:8087;
        proxy_set_header Gazdă $gazdă;
        proxy_set_header X-Real-IP $adresă_la distanță;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $schema;
    }

Pentru că atunci când vizitez (cu Chrome) o adresă URL, cum ar fi 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%22%22slice%3_A13 2C..., vad ca este inlocuit cu plusul original &autonom=1 adăugat la adresa URL când verific bara de adrese Chrome.

Dar când încerc să fac ceva similar pentru un alt model URL pentru Apache Superset, cum ar fi următorul:

   locație /tabloul de bord/listă/ {
        rescrie ^/tabloul de bord/lista/(.*)$ /tabloul de bord/lista/$1?standalone=1 pauză;

        proxy_pass http://127.0.0.1:8087;
        proxy_set_header Gazdă $gazdă;
        proxy_set_header X-Real-IP $adresă_la distanță;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $schema;
    }

si cer http://192.168.239.40:8088/dashboard/list/ cu Chrome, văd bara de adrese înlocuită cu http://192.168.239.40:8088/dashboard/list/?pageIndex=0&sortColumn=changed_on_delta_humanized&sortOrder=desc&viewMode=table dar nu văd niciunul &autonom=1 anexat.

De asemenea, am verificat jurnalele Superset pentru a vedea ce servește după ce am solicitat http://192.168.239.40:8088/dashboard/list/ si vad asta ?autonom=1 este de fapt anexat!

10 februarie 14:09:19 python-server de bord[34169]: 2022-02-10 14:09:19,482:INFO:werkzeug:127.0.0.1 - - [10/Feb/2022 14:09:19] „GET / tablou de bord/listă/?standalone=1 HTTP/1.0" 200 -
10 februarie 14:09:20 dashboard-server python[34169]: 2022-02-10 14:09:20,729:INFO:werkzeug:127.0.0.1 - - [10/Feb/2022 14:09:20] "GET / api/v1/dashboard/_info?q=(chei:!(permisiuni)) HTTP/1.0" 200 -
10 februarie 14:09:20 dashboard-server python[34169]: 2022-02-10 14:09:20,771:INFO:werkzeug:127.0.0.1 - - [10/Feb/2022 14:09:20] "GET / api/v1/dashboard/?q=(coloana_comandă:modificată_pe_delta_humanized,direcția_comandei:desc,pagina:0,dimensiunea paginii:25) HTTP/1.0" 200 -

Aveți idei de ce se întâmplă asta?

Complet /etc/nginx/conf.d/superset.conf este după cum urmează:

Server {
    asculta 8088;
    nume_server 192.168.239.40;

    Locație / {
        proxy_pass http://127.0.0.1:8087;
    }

    locație /superset/explore/ {
        dacă ($args ~* "(.*?)slice_id%22%3A133(.*)$") {
            rescrie ^/superset/explore/(.*)$ /superset/explore/$1?standalone=1 pauză;
        }

        proxy_pass http://127.0.0.1:8087;
        proxy_set_header Gazdă $gazdă;
        proxy_set_header X-Real-IP $adresă_la distanță;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $schema;
    }

   locație /tabloul de bord/listă/ {
        rescrie ^/tabloul de bord/lista/(.*)$ /tabloul de bord/lista/$1?standalone=1 pauză;

        proxy_pass http://127.0.0.1:8087;
        proxy_set_header Gazdă $gazdă;
        proxy_set_header X-Real-IP $adresă_la distanță;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $schema;
    }


    # necesar deoarece supersetul are URL-uri de bază codificate
    locație /static/ {
        proxy_pass http://127.0.0.1:8087/static/;
    }

    # pentru a expune un anumit tablou de bord folosind o adresă URL personalizată
    # exemplul de mai jos va face tabloul de bord 2 disponibil în modul independent
    # pe $host/dashboards/my-dashboard
    locație /tablouri de bord/tabloul-meu de bord {
        proxy_pass http://127.0.0.1:8087/superset/dashboard/2/?standalone=true;
    }
}
Puncte:1
drapel us

Modificarea adreselor URL în acest fel este destul de periculoasă fără a cunoaște detaliile despre modul în care aplicația din amonte gestionează de fapt adresele URL. Acest lucru poate duce la multe erori dificil de diagnosticat.

Ar trebui să vă revizuiți obiectivul inițial și să vă gândiți dacă îl puteți atinge printr-o altă metodă.

Ce devine problema dvs. actuală: rescrie... pauză este o rescrie internă a adresei URL. Aceasta înseamnă că nginx modifică numai adresa URL care este trimisă serverului din amonte.

În acest caz, serverul dvs. din amonte returnează doar pagina specificată de adresa URL modificată.

În browserul clientului, nu există nicio modificare a adresei URL, deoarece serverul returnează doar conținut pentru adresa URL solicitată.

Ce se întâmplă în cazul în care URL-ul browserului se modifică cu această configurație: În acest caz, aplicația dvs. din amonte pare să răspundă cu redirecționare 302, ceea ce face browserul să viziteze o altă adresă URL.

Dacă doriți să spuneți clientului să meargă la adresa URL, atunci trebuie să trimiteți o redirecționare HTTP:

rescrie ^/tabloul de bord/lista/(.*)$ /tabloul de bord/lista/$1?standalone=1;

Cu toate acestea, acest lucru va crea cel mai probabil o buclă de redirecționare de la sine, deoarece același lucru Locație block captează cererea din nou și din nou. Crearea unei redirecționări HTTP fără buclă poate deveni un exercițiu destul de complex.

Așadar, aș căuta modalități alternative de rezolvare a problemei actuale.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.