Tôi đã tạo một ứng dụng web sẽ lắng nghe trên một cổng và xử lý các yêu cầu HTTP. Ví dụ: nếu tôi chạy nó cục bộ tại 127.0.0.1:3000
. Tôi có thể truy cập nó với http://127.0.0.1:3000/path/within/app
trên trình duyệt của tôi. Tôi muốn triển khai nó trên một trong các máy chủ của mình, được định cấu hình với nginx
để xử lý tất cả các yêu cầu đến (và TLS) và chuyển tiếp chúng đến các ứng dụng khác nhau (nghe tại http://127.0.0.1:xxx
). Thông thường, tôi sẽ cung cấp cho mỗi ứng dụng một tên miền phụ khác nhau (ví dụ: truy cập ứng dụng1
với app1.example.com
và ứng dụng2
với app2.example.com
), nhưng sẽ thuận tiện hơn nếu tôi có thể sử dụng đường dẫn phụ (ví dụ: truy cập ứng dụng1
với ví dụ.com/app1
và ứng dụng2
với ví dụ.com/app2
). Nhưng tôi không chắc làm thế nào để cấu hình nó.
Tệp cấu hình hiện tại của tôi giống như sau. Giả sử ứng dụng của tôi đang lắng nghe tại 127.0.0.1:3000
.
vị trí ^~ /app1 {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Máy chủ $http_host;
proxy_redirect tắt;
proxy_pass http://127.0.0.1:3000/;
}
Tôi muốn đạt được những điều sau đây.
- Khi tôi truy cập
https://example.com/app1
, nó sẽ tương đương với việc truy cập http://127.0.0.1:3000
.
- Khi tôi truy cập
https://example.com/app1/path/within/app
, nó sẽ tương đương với truy cập http://127.0.0.1:3000/path/within/app
.
Tuy nhiên, với tệp cấu hình được đề cập ở trên, chỉ có phần đầu tiên hoạt động. Nếu tôi truy cập https://example.com/app1/path
, ứng dụng của tôi phàn nàn rằng đó là http://127.0.0.1:3000//đường dẫn
mà thực sự được truy cập, và nó không biết làm thế nào để xử lý //con đường
.
Tôi không muốn sửa đổi bất kỳ phần nào trong ứng dụng của mình để nó có thể chạy độc lập nếu tôi quyết định cung cấp cho nó một tên miền phụ trong tương lai và mong đợi một bản sửa lỗi chỉ sửa đổi tệp cấu hình nginx nếu có thể. Ngoài ra, tôi biết vấn đề là bất kỳ liên kết có thể nhấp nào do ứng dụng tạo ra cũng sẽ cần xử lý đường dẫn phụ, nhưng ứng dụng này đủ đơn giản nên đó không phải là vấn đề.
Cảm ơn.