- ทำคล้ายๆ กับ direct ip reverse เลย แต่เพิ่มนิดหน่อย
- ในที่นี้ primary เป็น 192.168.1.1 ส่วน endpoint ที่จะให้ reverse ไปมี 192.168.1.2 และ 192.168.1.3:8080
Step
- แก้ไข /etc/nginx/default
- เพิ่ม section upstream ให้อยู่ในระดับเดียวกับ server {...} และตั้งชื่อที่เราต้องการ (ในที่นี้ตั้งเป็น repositories) พร้อมกำหนดค่าการ IP ที่จะให้ forward ไป
upstream repositories {
# least_conn;
# ip_hash;
#server domain_name.com:443;
server 192.168.1.2;
server 192.168.1.3:8080;
# แนะนำเพิ่ม health check ให้ nginx ตัด server ที่ล่มออกอัตโนมัติ:
# server 192.168.1.2:8080 max_fails=3 fail_timeout=30s;
# server 192.168.1.3:8080 max_fails=3 fail_timeout=30s;
}
# Weighted Round Robin (ถ้า server นึงแรงกว่า)
# upstream api_backend {
# server 192.168.1.2:8080 weight=3;
# server 192.168.1.3:8080 weight=1;
# }
# request จะไป .2 : .3 = 3:1
server {
...
}
- จากนั้นใน location / section ให้เราตั้งค่าประมาณนี้
location / {# First attempt to serve request as file, then# as directory, then fall back to displaying a 404.# try_files $uri $uri/ =404;try_files $uri $uri/ /index.php?$args;proxy_next_upstream error timeout http_404;proxy_pass http://repositories;include proxy_params;}
- จากนั้น restart nginx
$ sudo systemctl restart nginx
- ทดสอบระบบโดยเข้าเว็บ http://192.168.1.1
- หน้าเว็บจะแสดงข้อมูลเหมือนเราเข้าเว็บ http://192.168.1.2 และ http://192.168.1.3:8080 สลับกันไปมาแบบ round robin
เพิ่มเติม
- ค่าเริ่มต้นในการ reverse น่าจะใช้แบบ round robin นะคือ กระจายไปแต่ละ endpoint เท่าๆ กัน
Algorithm เริ่มต้นคือ Round Robin (สลับ request ทีละ server) ถ้าต้องการแบบอื่นเพิ่มได้เลย:
| Algorithm | วิธีเพิ่ม | เหมาะกับ |
|---|---|---|
| Round Robin | (ค่า default ไม่ต้องเพิ่ม) | งาน stateless ทั่วไป |
| Least Connections | เพิ่ม least_conn; ใน upstream | request ที่ใช้เวลาไม่เท่ากัน |
| IP Hash | เพิ่ม ip_hash; ใน upstream | session ที่ต้องการ sticky session |
Related
- http://juuier.blogspot.com/2023/05/reverse-proxy-direct-nginx-ubuntu-2204.html
- https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
- https://www.bogotobogo.com/DevOps/Docker/Docker-Compose-Nginx-Reverse-Proxy-Multiple-Containers.php
No comments:
Post a Comment