Điểm:0

Làm cách nào để chuyển một trang html từ một máy chủ khác qua proxy ngược nginx?

lá cờ cn

Tôi đang cố tải ứng dụng Angular từ một dịch vụ nội bộ khác khi gọi localhost:81/internal?pageId=10. Nhưng tất cả những gì xảy ra là nginx chuyển hướng tôi trong trình duyệt tới localhost:80.

Tôi có cấu hình này:

  vị trí ~ /internal(?<phần>.+) {
    proxy_pass http://192.168.1.100:8080/public/internal$section;
    proxy_set_header Máy chủ lưu trữ $host;
  }

Như tôi đã đọc trong nhiều câu hỏi khác, nó sẽ hoạt động, nhưng vì lý do nào đó, nginx chuyển hướng tôi đến cổng 80.

Tiêu đề yêu cầu:

NHẬN /internal/?pageId=10
Chấp nhận: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3; q=0,9
Chấp nhận mã hóa: gzip, giảm phát
Ngôn ngữ chấp nhận: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Kết nối: giữ nguyên
Máy chủ: localhost:81
Nâng cấp-Không an toàn-Yêu cầu: 1
Tác nhân người dùng: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, như Gecko) Chrome/101.0.4951.67 Safari/537.36

Tiêu đề phản hồi:

Đã tìm thấy HTTP/1.1 302
Máy chủ: nginx/1.21.6
Ngày: Thứ năm, ngày 19 tháng 5 năm 2022 09:15:34 GMT
Mã hóa truyền: chunked
Kết nối: giữ nguyên
Vị trí: http://localhost/public/internal?pageId=10
X-Powered-By: Cầu cảng (9.4.40.v20210413)

Điều này thậm chí có thể? Và nếu vậy, làm thế nào để tôi khắc phục điều này?

Ivan Shatsky avatar
lá cờ gr
Có thể dịch vụ nội bộ của bạn không mong muốn tiêu đề `Host` được đặt thành `$host` (tương đương với `localhost:81` trong trường hợp của bạn) và thay vào đó, bạn nên sử dụng `proxy_set_header Host localhost;`? Ngoài ra, cách bạn đang sử dụng chuỗi truy vấn của mình sẽ không được chuyển lên thượng nguồn (trừ khi bạn thêm hậu tố `$is_args$args` vào chỉ thị `proxy_pass` của bạn).
Apollo avatar
lá cờ cn
Máy chủ nội bộ không kiểm tra các tiêu đề. Tôi vừa sao chép các dòng mà tôi tìm thấy trên StackExchange để đảm bảo rằng đó không phải là vấn đề ở đó. Bạn có thể đưa ra ví dụ về cách thêm $is_args$args không? Tôi có thay thế phần $ không?
Ivan Shatsky avatar
lá cờ gr
Không, chỉ cần thêm nó vào cuối URI được chuyển đến máy chủ nội bộ: `proxy_pass http://192.168.1.100:8080/public/internal$section$is_args$args;`. Bạn có thể kiểm tra điều gì sẽ xảy ra khi yêu cầu URI được yêu cầu trực tiếp từ máy chủ nội bộ: `curl -v http://localhost/public/internal/?pageId=10`, `curl -v -H 'Host: localhost:81' http: //localhost/public/internal/?pageId=10`. Một ví dụ từ câu hỏi của bạn (`localhost:81/internal?pageId=10`) không khớp với các tiêu đề bạn đã cung cấp (`localhost:81/internal/?pageId=10`, lưu ý dấu gạch chéo) trừ khi một số nội dung viết lại xảy ra ở đâu đó trong cấu hình nginx của bạn.

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