Điểm:1

Chỉ cấp quyền truy cập Internet cho một số yêu cầu nhất định từ Grafana với proxy ngược

lá cờ in

Tôi có hai máy:

Máy MỘT: Đã cài đặt Grafana / Không có quyền truy cập Internet / Cần gửi thông báo đến Telegram

Máy B Đã cài đặt Nginx / Truy cập Internet

Tôi muốn gửi các thông báo Telegram đó, nhưng máy A không có Internet, vì vậy tôi phải sử dụng máy B để thực hiện việc đó.

Tôi đã tạo cấu hình này trong máy B (trong /etc/nginx/sites-available):

người phục vụ {

nghe 443;

địa điểm / {

proxy_pass http://mygrafana.example.com;

}

Mình thấy máy A dùng cổng 443 để gửi thông báo Telegram nên dùng cổng đó để nghe ---> Đây là log mình thấy cổng 443 lvl=eror msg="không thể gửi thông báo" logger=alerting.notifier uid= error="Đăng https://api.telegram.org/XXXXXXXXXXXX/sendMessage: quay số tcp XX.XX.XX.XX:443: kết nối: Mạng là unreachable".

Nhưng nó không hoạt động, có vẻ như cấu hình đó không hoạt động.

Ở đây trong nhật ký grafana có vẻ như không có kết nối với máy B lvl=eror msg="không thể gửi thông báo" kết nối: không thể kết nối mạng"

djdomi avatar
lá cờ za
cài đặt nginx trên b và đảo ngược proxy thành a, trong trường hợp nó ở cùng một nơi/lan
aldegalan avatar
lá cờ in
@djdomi Bạn có thể vui lòng cho tôi một ví dụ đơn giản để thử làm điều tương tự không? Và tôi đặt nó như một câu trả lời, cảm ơn trước
Điểm:2
lá cờ za

Sử dụng Nginx làm Proxy ngược để truy cập Grafana ở mọi nơi

Chòm sao:

Máy chủ A là một máy chủ không có Internet (tức là Máy chủ chuyên dụng, NAS, v.v.)
máy chủ B là một máy chủ với Internet truy cập vào mạng LAN (Thẻ Ethernet thứ hai tức là)

Trong trường hợp này, bản thân tôi giả định rằng Cả hai máy chủ đều nằm trên cùng một mạng LAN hoặc được Chủ sở hữu hoặc Quy tắc tường lửa cho phép làm điều đó :-)

Bắt đầu trên Máy chủ A

Chúng ta phải xác minh điểm,

  • nếu graphana lắng nghe cổng mặc định của nó trên 3000
  • nếu graphana chỉ nghe localhost hoặc mở ở bất cứ đâu

Các thao tác trên Server A:

Trong trường hợp không rõ, chúng ta có thể sử dụng

lsof -Pi :3000

Điều này sẽ cho bạn biết nếu nó chỉ nghe Localhost hay không.

Grafana có một Tài liệu hay, có thể tìm thấy tại đây https://grafana.com/docs/grafana/latest/administration/configuration/

Quản trị viên lười biếng từ máy chủ A

bỏ qua hướng dẫn, trong trường hợp, nó nghe localhost và không thích chạm hoặc thay đổi grafana.
Chúng tôi cũng có thể sử dụng nginx cho bước này bằng cách sử dụng mặc định vì không có gì khác đang chạy trong giả định của tôi:


#Bản gốc từ https://grafana.com/tutorials/run-grafana-behind-a-proxy/
bản đồ $http_upgrade $connection_upgrade {
  nâng cấp mặc định;
  '' đóng lại;
}

người phục vụ {
  #Chỉ cho phép mạng LAN của tôi truy cập trang này
  cho phép 10.0.0.0/8;
  cho phép 192.168.0.0/16;
  cho phép 172.16.0.0/16;
  #Cuối cùng, không cho phép phần còn lại
  Phủ nhận tất cả;
 
  tên máy chủ _;
  nghe 80;
  gốc /usr/share/nginx/html;
  chỉ mục index.html index.htm;

  địa điểm / {
    proxy_pass http://localhost:3000/;
  }

  # Kết nối WebSocket trực tiếp Proxy Grafana.
  vị trí/api/trực tiếp {
    proxy_http_version 1.1;
    proxy_set_header Nâng cấp $http_upgrade;
    proxy_set_header Kết nối "Nâng cấp";
    proxy_set_header Máy chủ $http_host;
    proxy_pass http://localhost:3000/;
  }
}

Cấu hình trên là gì?

Tôi muốn tránh chạm vào Grafana và chỉ sử dụng NGINX để xử lý việc đó. Hơn nữa, bây giờ tôi có thể truy cập bằng IP từ mạng LAN vào phiên bản này.

  • Máy chủ A -- XONG.

Khởi động sang Máy chủ B

Một trong những dễ dàng!

Cài đặt nginx với Trình quản lý gói của bạn

apt-get cài đặt nginx cài đặt apt nginx

Vv.. Tùy thuộc vào phân phối của bạn.

Cấu hình cho NGINX

người phục vụ {
# chuyển hướng https
        server_name grafana.mydoma.in;
        nghe 80;
        trả lại 301 https://$host$request_uri;


}

người phục vụ {
        proxy_read_timeout 3600;
# *nếu bạn cần http đơn giản, hãy bỏ ghi chú cổng 80*
# *nhắc nhở, rằng bạn sẽ bình luận ở trên, nếu không nó sẽ không hoạt động*
        #nghe80;
        nghe 443 ssl http2;
        server_name grafana.mydoma.in;
        
                địa điểm / {
                        proxy_pass http://10.0.0.1:3000;
                        proxy_set_header Máy chủ $http_host;
                        
}
    ssl_certificate /etc/letsencrypt/live/grafana.mydoma.in/fullchain.pem; # được quản lý bởi Certbot
    ssl_certificate_key /etc/letsencrypt/live/grafana.mydoma.in/privkey.pem; # được quản lý bởi Certbot

}

Tôi giả định rằng ở đây bạn sử dụng cho phép mã hóa với tư cách là Nhà cung cấp SSL.

10.0.0.1 là IP của Máy chủ A, vì nó lắng nghe Cổng 80 với tên (_) không hợp lệ nên nó sẽ luôn sử dụng tên này, tất nhiên nếu bạn đã xóa bất kỳ cấu hình mặc định nào khác :-)

kết thúc // Kết luận

Khi mọi thứ hoạt động tốt, bạn có thể truy cập grafana từ mọi nơi. Nhắc nhở ngắn:

  • Bạn KHÔNG cần NGINX trên máy chủ A khi nó nghe mạng LAN hoặc TẤT CẢ các thiết bị.
    • Trong trường hợp này, bạn có thể Nhảy Cài đặt NGINX trên Server A
    • Và đi trực tiếp đến phần thứ hai.

Chúc vui vẻ ;-)

Cập nhật:

  • OP tuyên bố rằng cấu hình sẽ không thành công. Không, hoạt động tốt.
root@nginx-verify:/etc/nginx/sites-enabled# nginx -t
nginx: cú pháp file cấu hình /etc/nginx/nginx.conf là ok
nginx: file cấu hình /etc/nginx/nginx.conf kiểm tra thành công

cấu hình đầy đủ hoạt động. Không biết những gì bạn đã sao chép.

aldegalan avatar
lá cờ in
Xin chào @djdomi có vẻ như cấu hình có một số lỗi cú pháp hoặc thứ gì đó (Máy chủ B)
djdomi avatar
lá cờ za
nginx -t cho bạn biết những gì tôi đã bỏ lỡ

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.