Điểm:0

Proxy ngược NGINX không hoạt động với swagger-ui-express

lá cờ in

Tôi đang sử dụng NGINX để proxy_pass tất cả các yêu cầu với tiền tố /xác thực/ đến máy chủ api của nodejs tại máy chủ cục bộ:3000.

Tôi có tập tin cấu hình duy nhất này /etc/nginx/sites-enabled/default3.conf:

người phục vụ {
    
    vị trí /auth/ {
        viết lại /auth/(.+) /$1 break;
        proxy_pass http://127.0.0.1:3000;
        proxy_redirect tắt;
        proxy_set_header HOST $host;
    }


}

Nó hoạt động tốt với hầu hết các yêu cầu của tôi (thay vì GET http://localhost:3000/đăng xuất, ĐƯỢC http://localhost/auth/đăng xuất sẽ hoạt động như mong đợi), ngoại trừ yêu cầu này NHẬN http://localhost/auth/docs, cái này sẽ ánh xạ tới http://localhost:3000/docs nhưng tôi đã nhận được một chuyển hướng:

HTTP/1.1 301 được di chuyển vĩnh viễn
Máy chủ: nginx/1.18.0 (Ubuntu)
Ngày: Thứ Tư, ngày 15 tháng 12 năm 2021 01:59:02 GMT
Loại nội dung: văn bản/html; bộ ký tự = UTF-8
Độ dài nội dung: 175
X-Powered-By: Express
Kiểm soát truy cập-Cho phép-Xuất xứ: *
Chính sách bảo mật nội dung: default-src 'none'
X-Content-Type-Options: nosniff
Vị trí: /docs/

sau đó thay vào đó là 404 KHÔNG TÌM KIẾM:

HTTP/1.1 404 Không tìm thấy
Máy chủ: nginx/1.18.0 (Ubuntu)
Ngày: Thứ Tư, ngày 15 tháng 12 năm 2021 03:20:26 GMT
Loại nội dung: văn bản/html
Mã hóa truyền: chunked
Kết nối: giữ nguyên
Mã hóa nội dung: gzip

Có vẻ như khi tôi NHẬN http://localhost/auth/docs, yêu cầu đến máy chủ nodejs của tôi, nhưng sau đó được chuyển hướng trở lại http://localhost/tài liệu, nhưng làm thế nào điều này có thể được? Tôi vẫn có thể NHẬN http://localhost:3000/docs không có vấn đề.

CẬP NHẬT

http://localhost:3000/docs là nơi tôi đang phục vụ giao diện người dùng Swagger cho API máy chủ, sử dụng mô-đun npm vênh vang-ui-express.

lá cờ in
Rất có thể máy chủ nodejs của bạn không được định cấu hình với URL cơ sở chính xác và tạo ra các chuyển hướng bị lỗi.
xceeded avatar
lá cờ in
Vâng bạn đã đúng. Đó là sự cố với ứng dụng nodejs của tôi, tức là mô-đun `swagger-ui-express`. Tôi vẫn đang cố gắng sửa nó.
Điểm:0
lá cờ in

Vấn đề

  • Vấn đề nằm ở mô-đun vênh vang-ui-express mà máy chủ nodejs của tôi đang sử dụng để cung cấp tài liệu API.
  • Tôi đã định cấu hình nó để phục vụ trên /tài liệu và mô-đun sẽ thực hiện chuyển hướng 301 để thực hiện chính xác yêu cầu $HOST/tài liệu, vì HOST là bất kể máy chủ yêu cầu là gì (máy chủ cục bộ:3000, hoặc máy chủ cục bộ).
  • Vì vậy, khi đặt phía sau NGINX proxy ngược như tôi đã làm, mọi GET http://localhost/auth/docs sẽ tấn công máy chủ nodejs của tôi nhưng sẽ được chuyển hướng đến http://localhost/tài liệu như tôi đã nói trong gạch đầu dòng 2.

Giải pháp

  • Định cấu hình NGINX để tạo một proxy_pass khác khi yêu cầu khớp /docs/.
    vị trí /docs/ {
        proxy_pass http://127.0.0.1:3000/docs/;
    }
  • Hãy cẩn thận rằng URI được chuyển đến có một dấu gạch chéo, bởi vì mô-đun vênh vang-ui-express mong đợi dấu gạch chéo đó. Nếu không thì /auth/tài liệu sẽ được chuyển hướng đến /docs//docs/ sẽ được chuyển hướng đến /auth/tài liệu một lần nữa (vòng lặp vô hạn cho đến khi lỗi). Mặc dù bạn có thể xóa dấu gạch chéo ở cả vị trí khớp và URL chuyển proxy.

Đă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.