Tuesday, May 9, 2023

หัดทำ Reverse proxy to multi endpoint ด้วย Nginx บน Ubuntu 22.04

  • ทำคล้ายๆ กับ 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; ใน upstreamrequest ที่ใช้เวลาไม่เท่ากัน
IP Hashเพิ่ม ip_hash; ใน upstreamsession ที่ต้องการ sticky session

Related

  • http://juuier.blogspot.com/2023/05/reverse-proxy-direct-nginx-ubuntu-2204.html
Ref
  • 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

Popular Posts