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 {

#server domain_name.com:443;

server 192.168.1.2;

server 192.168.1.3:8080;

}

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 เท่าๆ กัน

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

หัดทำ Reverse proxy direct ไปเครื่องเดียว ด้วย Nginx บน Ubuntu 22.04

  • โจทย์คือ ใช้  nginx ทำ reverse proxy ที่เครื่อง 192.168.1.1 
  • โดยถ้าเข้าเว็บ http://192.168.1.1 (nginx) ให้มันเบื้องหลังมันไปดึงข้อมูลที่ http://192.168.1.2 (apache)

Step

  • ทดสอบทำกับ /etc/nginx/default กันเหนียวไว้ก่อน

$ sudo cp /etc/nginx/default /etc/nginx/default_old

  • จากนั้นแก้คอนฟิก default site

$ sudo nano /etc/nginx/default

  • ที่ section location / (หรือ location /subfolder แบบ alias ก็ได้เช่นกัน)

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;

}

  • แก้ไขเป็น

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_pass http://192.168.1.2;

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_params ที่มีอยู่แล้ว

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_pass http://192.168.1.2;

include proxy_params;

}

  • สุดท้าย restart nginx

$ sudo systemctl restart nginx

  • ทดสอบเข้าเว็บไซต์
  • http://192.168.1.1 คือที่แสดงผลจะเป็นค่าเหมือนเราเข้า http://192.168.1.2

เพิ่มเติม

  • เราสามารถ ทำ reverse proxy ด้วย alias ได้เช่นเดียวกัน
  • และ proxy_pass เราสามารถระบุพอร์ต อื่นๆ ได้ด้วยเช่น
  • proxy_pass http://192.168.1.2:8080

Ref

  • https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-as-a-reverse-proxy-on-ubuntu-22-04
  • https://www.baeldung.com/linux/nginx-multiple-proxy-endpoints
  • https://stackoverflow.com/questions/37820013/nginx-routing-to-several-restful-endpoints

Limit/Only allow certain IP addresses to access the website hosted on IIS Windows Server 2022 Standard

Step

  • ติดตั้ง add-on feature ก่อน โดยไปที่ Control Panel -> Programs and Features
  • ที่ left panel เลือก Turn Windows features on or off


  • ที่ Dashboard เลือก Add roles and feadtures แล้วก็ Next ไปเรื่อยๆ

  • Next ไปจนถึงหน้า Select server roles เข้าไปตามโครงสร้าง Tree
  • Web Server (IIS) -> Web Server -> Security
  • เลือกติดตั้ง IP and Domain Restrictions
  • และ Next ไปจนติดตั้งเรียบร้อย
  • จากนั้นไปที่ IIS Managerที่ left panel เลือก vhost ที่จะตั้งค่า allow deny ip
  • จะเห็นเมนู IP Address and Domain... (ในที่นี้เลือก Default)

  • panel ขวา เลือก Edit Feature Settings...
  • ที่ Access for unspecified clinets: เลือก Deny (คือเราจะตั้งค่าสูงสุดคือ ปิดการเชื่อมต่อจากทุก IP)
  • ที่นี้เราจะมา อนุญาต เฉพาะ IP หรือ  IP range
  • โดยเลือก Add Allow Entry...
  • จากนั้น ระบุ IP หรือ ช่วง IP ที่อนุญาตให้เข้าถึง vhost นี้ได้

  • รายการที่อนุญาตก็จะแสดงด้านล่าง

  • และสุดท้าย ก็ restart vhost แล้วลองทดสอบ

เพิ่มเติม

  • เราสามารถตั้งค่า deny aceess เป็น status code อื่นๆ ได้นอกจาก 403

Related

  • http://juuier.blogspot.com/2023/04/limitonly-allow-certain-ip-addresses-to.html

Popular Posts