Điểm:0

Tại sao tôi có thể viết một bộ URL mà không thể viết các bộ URL khác bằng NGINX?

lá cờ in

Tôi đã thiết lập NGINX, phiên bản 1.18.0, làm proxy ngược cho bản cài đặt Apache Superset 1.4.0 của mình.

Tôi đang cố nắm bắt một số mẫu URL và viết lại chúng bằng cách thêm độc lập = 1 cuối cùng.

Cấu hình NGINX sau hoạt động như mong đợi:

vị trí /superset/khám phá/ {
        if ($args ~* "(.*?)slice_id%22%3A133(.*)$") {
            viết lại ^/superset/explore/(.*)$ /superset/explore/$1?standalone=1 break;
        }

        proxy_pass http://127.0.0.1:8087;
        proxy_set_header Máy chủ lưu trữ $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 $scheme;
    }

Bởi vì khi tôi truy cập (bằng Chrome) một URL chẳng hạn như 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% 2C..., tôi có thể thấy rằng nó được thay thế bằng dấu cộng ban đầu &độc lập=1 được thêm vào URL khi tôi kiểm tra thanh địa chỉ Chrome.

Nhưng khi tôi cố gắng làm điều gì đó tương tự cho một mẫu URL khác cho Apache Superset, chẳng hạn như sau:

   vị trí /bảng điều khiển/danh sách/ {
        viết lại ^/dashboard/list/(.*)$ /dashboard/list/$1?standalone=1 break;

        proxy_pass http://127.0.0.1:8087;
        proxy_set_header Máy chủ lưu trữ $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 $scheme;
    }

và tôi yêu cầu http://192.168.239.40:8088/dashboard/list/ với Chrome, tôi thấy thanh địa chỉ được thay thế bằng http://192.168.239.40:8088/dashboard/list/?pageIndex=0&sortColumn=changed_on_delta_humanized&sortOrder=desc&viewMode=table nhưng tôi không thấy bất kỳ &độc lập=1 nối thêm.

Tôi cũng đã kiểm tra nhật ký Superset để xem nó phục vụ những gì sau khi tôi yêu cầu http://192.168.239.40:8088/dashboard/list/ và tôi thấy rằng ?độc lập=1 thực sự được thêm vào!

Ngày 10 tháng 2 14:09:19 python máy chủ bảng điều khiển[34169]: 2022-02-10 14:09:19,482:INFO:werkzeug:127.0.0.1 - - [10/Feb/2022 14:09:19] "NHẬN / bảng điều khiển/danh sách/?độc lập=1 HTTP/1.0" 200 -
Ngày 10 tháng 2 14:09:20 python máy chủ bảng điều khiển[34169]: 2022-02-10 14:09:20,729:INFO:werkzeug:127.0.0.1 - - [10/Feb/2022 14:09:20] "NHẬN / api/v1/dashboard/_info?q=(keys:!(permissions)) HTTP/1.0" 200 -
Ngày 10 tháng 2 14:09:20 python máy chủ bảng điều khiển[34169]: 2022-02-10 14:09:20,771:INFO:werkzeug:127.0.0.1 - - [10/Feb/2022 14:09:20] "NHẬN / api/v1/dashboard/?q=(order_column:changed_on_delta_humanized,order_direction:desc,page:0,page_size:25) HTTP/1.0" 200 -

Có ý kiến ​​giải thích tại sao điều này lại xảy ra không?

Hoàn chỉnh /etc/nginx/conf.d/superset.conf là như sau:

người phục vụ {
    nghe 8088 ;
    server_name 192.168.239.40;

    địa điểm / {
        proxy_pass http://127.0.0.1:8087;
    }

    vị trí /superset/khám phá/ {
        if ($args ~* "(.*?)slice_id%22%3A133(.*)$") {
            viết lại ^/superset/explore/(.*)$ /superset/explore/$1?standalone=1 break;
        }

        proxy_pass http://127.0.0.1:8087;
        proxy_set_header Máy chủ lưu trữ $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 $scheme;
    }

   vị trí /bảng điều khiển/danh sách/ {
        viết lại ^/dashboard/list/(.*)$ /dashboard/list/$1?standalone=1 break;

        proxy_pass http://127.0.0.1:8087;
        proxy_set_header Máy chủ lưu trữ $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 $scheme;
    }


    # bắt buộc vì superset có các url đường dẫn cơ sở được mã hóa cứng
    vị trí /tĩnh/ {
        proxy_pass http://127.0.0.1:8087/static/;
    }

    # để hiển thị trang tổng quan cụ thể bằng url tùy chỉnh
    # ví dụ dưới đây sẽ cung cấp bảng điều khiển 2 ở chế độ độc lập
    # trên $host/dashboards/my-dashboard
    vị trí /dashboards/my-dashboard {
        proxy_pass http://127.0.0.1:8087/superset/dashboard/2/?standalone=true;
    }
}
Điểm:1
lá cờ us

Việc xáo trộn các URL như thế này khá nguy hiểm nếu không biết chi tiết cách ứng dụng ngược dòng thực sự xử lý các URL. Điều này có thể dẫn đến nhiều lỗi khó chẩn đoán.

Bạn nên xem lại mục tiêu ban đầu của mình và nghĩ xem liệu bạn có thể đạt được nó thông qua một số phương pháp khác hay không.

Điều gì trở thành vấn đề hiện tại của bạn: viết lại ... phá vỡ là một bản viết lại nội bộ của URL. Điều này có nghĩa là, nginx chỉ sửa đổi URL được gửi đến máy chủ ngược dòng.

Trong trường hợp này, máy chủ ngược dòng của bạn chỉ trả về trang được chỉ định bởi URL đã sửa đổi.

Trong trình duyệt của máy khách, không có thay đổi nào trong URL vì máy chủ chỉ trả về nội dung cho URL được yêu cầu.

Điều gì sẽ xảy ra trong trường hợp URL của trình duyệt thay đổi với cấu hình này: Trong trường hợp đó, ứng dụng ngược dòng của bạn dường như đang phản hồi với chuyển hướng 302 khiến trình duyệt truy cập một URL khác.

Nếu bạn muốn yêu cầu khách truy cập URL, thì bạn cần gửi chuyển hướng HTTP:

viết lại ^/dashboard/list/(.*)$ /dashboard/list/$1?standalone=1;

Tuy nhiên, điều này rất có thể sẽ tự tạo ra một vòng lặp chuyển hướng, vì cùng địa điểm khối nắm bắt yêu cầu nhiều lần. Tạo chuyển hướng HTTP không lặp có thể trở thành một bài tập khá phức tạp.

Vì vậy, tôi sẽ xem xét các cách khác để giải quyết vấn đề thực tế hiện tại.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.