From fe6f09210d7488bf66327be3684d86fcc4c11b49 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Mon, 26 Feb 2018 10:41:10 +0500 Subject: [PATCH] Example nginx config for multiple bots --- README.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 266f4ed..7eb6e36 100644 --- a/README.md +++ b/README.md @@ -72,12 +72,20 @@ you may use a slightly different method. package main import ( - "gopkg.in/telegram-bot-api.v4" + "flag" "log" "net/http" + + "gopkg.in/telegram-bot-api.v4" +) + +var ( + reverse_proxy = flag.Bool("reverse_proxy", false, "Used reverse proxy (e.g., nginx)") ) func main() { + flag.Parse() + bot, err := tgbotapi.NewBotAPI("MyAwesomeBotToken") if err != nil { log.Fatal(err) @@ -93,7 +101,15 @@ func main() { } updates := bot.ListenForWebhook("/" + bot.Token) - go http.ListenAndServeTLS("0.0.0.0:8443", "cert.pem", "key.pem", nil) + go func() { + var err error + if *reverse_proxy { + err = http.ListenAndServe("127.0.0.1:8444", nil) + } else { + err = http.ListenAndServeTLS("0.0.0.0:8443", "cert.pem", "key.pem", nil) + } + log.Fatal(err) + }() for update := range updates { log.Printf("%+v\n", update) @@ -101,6 +117,47 @@ func main() { } ``` +Example nginx config for multiple bots + +```nginx +server { + listen 8443 ssl; + # listen [::]:80 default_server; + server_name _; + + # ssl on; + ssl_certificate /etc/nginx/cert/cert.pem; + ssl_certificate_key /etc/nginx/cert/key.pem; + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + + root /usr/share/nginx/html; + index index.html; + + # MyAwesomeBotToken + location ^~ /MyAwesomeBotToken { + proxy_pass http://127.0.0.1:8444; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + # MyAwesomeBotToken2 + location ^~ /MyAwesomeBotToken2 { + proxy_pass http://127.0.0.1:8445; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + location / { + # First attempt to serve request as file, then + # as directory, then fall back to displaying a 404. + try_files $uri $uri/ =404; + } +} +``` + If you need, you may generate a self signed certficate, as this requires HTTPS / TLS. The above example tells Telegram that this is your certificate and that it should be trusted, even though it is not