Mình đang có vài website chạy các chức năng khác nhau trong nội bộ với các domain khác nhau (một số chỉ chạy web và một số chứa static files các loại). Mục đích chính của việc đưa nginx ra làm reverse thì các bạn cũng rõ là nginx đáp ứng số req lớn và nhanh, ngoài ra quan trọng hơn là cache control cho static contents (.js, .jpg, .gif, v.v ...)
Mô hình của mình là
Code:
+---------+
port 8001| |
+--------+ nginx 1 | a.com
| | |
| +---------+
+-----------------+ |p 8002 +---------+
port80| nginx 0 |---|--------| nginx 2 | b.com
INTERNET----------| (reverse proxy) | | +---------+
+-----------------+ |
+--------+---------+
port n | nginx n | n.com
+---------+
Cấu hình của mình như sau:
- Ở reverse proxy, dùng chỉ thị proxy_pass trong nginx để chuyển hướng đối với từng server phía sau.
Code:
server {
listen 80;
server_name a.com;
access_log on;
error_log on;
# proxy to Apache 2 and mod_python
location / {
proxy_pass http://10.0.0.1:8001;
server_name_in_wwwect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
}
}
Cấu hình trên server a.com
Code:
server {
listen 8001;
server_name a.com;
server_name_in_wwwect off;
charset utf8;
access_log logs/host.access.log;
location / {
root /www;
index index.html index.htm index.php;
}
Sau đấy thì reverse proxy chuyển hướng chính xác tới từng web server phía sau nó, nhưng có vấn đề là nếu mở đường dẫn dạng http://a.com/folder/ thì bình thường còn nếu mở http://a.com/folder (không có dấu gạch ở cuối) thì sẽ bị báo lỗi không tìm thấy máy chủ vì browser được kết nối tới http://a.com:8001/folder
Như vậy vấn đề có thể là ở con reverse proxy, nhưng mình không hiểu tại sao nếu không có dấu gạch ở cuối thì người dùng lại bị chuyển sang a.com:8001 ??? Vì nếu browser tìm tới a.com:8001 thì sẽ không đi qua con reverse và bị từ chối.
Xin nhờ các bạn cho ý kiến để tìm lý do và khắc phục việc này.
Xin cảm ơn