Chuyển hướng một đường dẫn phụ đến máy chủ bên ngoài bằng Nginx


13

Tôi cần tạo một bản đồ khá đơn giản trong Nginx chuyển hướng một đường dẫn phụ đến một máy chủ khác nằm trong cùng mạng con.

  • Máy chủ Nginx: 192.168.0.2
  • Máy chủ Tomcat: 192.168.0.3:8443

Tôi đã cố gắng đặt cái này trong phần máy chủ

    location /tomcatapi/ {
        rewrite /tomcatapi/(.*) $1 break;
        proxy_pass http://192.168.0.3:8443;
    }

nhưng tất cả những gì tôi nhận được khi truy cập http://www.myservice.com/tomcatapi/ là một trang lỗi 500 và trong tệp nhật ký nginx tôi có lỗi này:

    the rewritten URI has a zero length

Những gì tôi đang thiếu trong conf này?

Câu trả lời:


12

Hãy nhìn vào dòng viết lại của bạn:

rewrite /tomcatapi/(.*) $1 break;

Bạn đang lấy bit trong ngoặc (tức là mọi thứ sau /tomcatapi/), được gán cho $1và sử dụng đó làm nội dung duy nhất của URI viết lại của bạn.

Trong ví dụ của bạn, không có gì sau đó /tomcatapi/, vì vậy việc viết lại kết thúc trống rỗng, và đây là những gì nginx đang rên rỉ.

Nếu bạn thay đổi quy tắc viết lại thành

rewrite /tomcatapi/(.*) /$1 break;

sau đó bạn sẽ luôn luôn kết thúc với ít nhất là /trong đầu ra viết lại.


Cảm ơn bạn đã trả lời, dù sao tôi cũng đã thêm "/" nhưng bây giờ khi truy cập url, trình duyệt bị kẹt trong trạng thái tải và trong tệp nhật ký tôi thấy một lỗi khác: ngược dòng không gửi tiêu đề HTTP / 1.0 hợp lệ trong khi đọc tiêu đề phản hồi từ thượng nguồn
carlo.polisini

Các bản ghi trên máy chủ tomcat của bạn nói gì?
Flup

Tôi đã tìm thấy lỗi, lỗi là ứng dụng chỉ có sẵn tại https chứ không phải http! Vì vậy, cú pháp đã đúng sau khi bạn sửa, chỉ cần thay http bằng https để làm cho nó hoạt động.
carlo.polisini
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.