ใช้ Nginx เป็น Reverse-Proxy เพื่อเข้าถึง Grafana ได้ทุกที่
กลุ่มดาว:
เซิร์ฟเวอร์ A เป็นเซิร์ฟเวอร์ ปราศจาก อินเทอร์เน็ต (เช่น เซิร์ฟเวอร์เฉพาะ, NAS, ฯลฯ...)
เซิร์ฟเวอร์ B เป็นเซิร์ฟเวอร์ กับ อินเทอร์เน็ต และ การเข้าถึง LAN (การ์ดอีเธอร์เน็ตตัวที่สองเช่น)
ในกรณีนี้ ตัวฉันเองสันนิษฐานว่าเซิร์ฟเวอร์ทั้งสองอยู่บน LAN เดียวกัน หรือได้รับอนุญาตจากเจ้าของหรือกฎไฟร์วอลล์ให้ทำเช่นนั้น :-)
เริ่มที่เซิร์ฟเวอร์ A
เราต้องตรวจสอบจุด
- ถ้ากราฟาน่าฟังพอร์ตเริ่มต้นที่ 3000
- ถ้า graphana ฟังเฉพาะ localhost หรือเปิดที่ไหนก็ได้
การดำเนินการบนเซิร์ฟเวอร์ A:
ในกรณีที่ไม่ทราบ เราสามารถใช้
lsof -Pi :3000
สิ่งนี้จะบอกคุณว่ามันฟังเฉพาะ Localhost หรือไม่
Grafana มีเอกสารที่ดี ซึ่งสามารถพบได้ที่นี่
https://grafana.com/docs/grafana/latest/administration/configuration/
ผู้ดูแลระบบ Lazy จากเซิร์ฟเวอร์ A
ข้ามคู่มือไป, ในกรณีที่มันฟัง localhost และไม่ชอบสัมผัสหรือเปลี่ยนกราฟาน่า.
เรายังสามารถใช้ nginx สำหรับขั้นตอนนี้โดยใช้ค่าดีฟอลต์อย่างใดอย่างหนึ่ง เนื่องจากไม่มีอะไรทำงานอยู่ในสมมติฐานของฉัน:
#ต้นฉบับจาก https://grafana.com/tutorials/run-grafana-behind-a-proxy/
แผนที่ $http_upgrade $connection_upgrade {
อัพเกรดเริ่มต้น;
'' ปิด;
}
เซิร์ฟเวอร์ {
#Allow only my LAN's to access this
อนุญาต 10.0.0.0/8;
อนุญาต 192.168.0.0/16;
อนุญาต 172.16.0.0/16;
#สุดท้ายห้ามเหลือ
ปฏิเสธทั้งหมด
ชื่อเซิร์ฟเวอร์ _;
ฟัง 80;
รูท /usr/share/nginx/html;
ดัชนี index.html index.htm;
ที่ตั้ง / {
proxy_pass http://localhost:3000/;
}
# การเชื่อมต่อ Proxy Grafana Live WebSocket
ตำแหน่ง /api/สด {
proxy_http_version 1.1;
proxy_set_header อัพเกรด $http_upgrade;
proxy_set_header การเชื่อมต่อ "อัพเกรด";
proxy_set_header โฮสต์ $http_host;
proxy_pass http://localhost:3000/;
}
}
config ข้างต้นคืออะไร?
ฉันต้องการหลีกเลี่ยงการสัมผัส Grafana และใช้ NGINX เพื่อจัดการสิ่งนั้น ยิ่งกว่านั้น ตอนนี้ฉันสามารถเข้าถึงได้ด้วย IP จาก LAN ไปยังอินสแตนซ์นี้
- เซิร์ฟเวอร์ A -- เสร็จสิ้น
เริ่มต้นใหม่ไปยังเซิร์ฟเวอร์ B
อันที่ง่าย!
ติดตั้ง nginx ด้วยตัวจัดการแพ็คเกจของคุณ
apt-get ติดตั้ง nginx
ฉลาดติดตั้ง nginx
ฯลฯ. ขึ้นอยู่กับการจำหน่ายของท่าน.
กำหนดค่าสำหรับ NGINX
เซิร์ฟเวอร์ {
# https เปลี่ยนเส้นทาง
server_name grafana.mydoma.in;
ฟัง 80;
ส่งคืน 301 https://$host$request_uri;
}
เซิร์ฟเวอร์ {
proxy_read_timeout 3600;
# *ถ้าคุณต้องการ http ธรรมดา ยกเลิกการแสดงความคิดเห็นพอร์ต 80*
# *เตือนว่าคุณจะแสดงความคิดเห็นด้านบนมิฉะนั้นจะไม่ทำงาน *
#ฟัง80;
ฟัง 443 ssl http2;
server_name grafana.mydoma.in;
ที่ตั้ง / {
proxy_pass http://10.0.0.1:3000;
proxy_set_header โฮสต์ $http_host;
}
ssl_certificate /etc/letsencrypt/live/grafana.mydoma.in/fullchain.pem; # จัดการโดย Certbot
ssl_certificate_key /etc/letsencrypt/live/grafana.mydoma.in/privkey.pem; # จัดการโดย Certbot
}
ฉันคิดว่าในที่นี้คุณใช้ lets encrypt เป็นผู้ให้บริการ SSL
10.0.0.1 เป็น IP ของเซิร์ฟเวอร์ A เนื่องจากมันฟังพอร์ต 80 ด้วยชื่อ (_) ที่ไม่ถูกต้อง มันจะใช้สิ่งนี้เสมอ หากคุณลบการกำหนดค่าเริ่มต้นอื่น ๆ แน่นอน :-)
ตอนจบ // บทสรุป
คุณสามารถเข้าถึง grafana จากทุกที่เมื่อทุกอย่างทำงานได้ดี
เตือนสั้น:
- คุณ จะไม่ ต้องการ NGINX บนเซิร์ฟเวอร์ A เมื่อฟัง LAN หรืออุปกรณ์ทั้งหมด.
-
- ในกรณีนี้ คุณสามารถ ข้าม การติดตั้ง NGINX บนเซิร์ฟเวอร์ A
-
มีความสุข ;-)
อัปเดต:
- OP อ้างว่าการกำหนดค่าจะล้มเหลว
ไม่ ทำงานได้ดี
root@nginx-verify:/etc/nginx/sites-enabled# nginx -t
nginx: ไฟล์การกำหนดค่า /etc/nginx/nginx.conf ไวยากรณ์ใช้ได้
nginx: การทดสอบไฟล์การกำหนดค่า /etc/nginx/nginx.conf สำเร็จ
การกำหนดค่าทั้งหมดใช้งานได้ ไม่ทราบว่าคุณคัดลอกอะไรมา