KĂ€ivitame oma Webogrami instantsi Nginx kaudu proksiatena

Tere, Habr!

Hiljuti sattusin olukorda, kus pidin töötama ettevĂ”tte sisevĂ”rgus, millel oli piiratud juurdepÀÀs internetile, ja nagu vĂ”ite pealkirjast arvata — Telegram oli seal blokeeritud. Olen kindel, et see olukord on paljudele tuttav.

Ma saan kĂŒll ilma sĂ”numirakendusteta hakkama, kuid just Telegram oli töö jaoks vajalik. Klientide installimine tööarvutisse ei olnud vĂ”imalik, ka isikliku sĂŒlearvuti kasutamine ei tulnud kĂ”ne allagi. Ühe lahendusena paistab olevat kasutada selle ametlikku veebiversiooni, kuid nagu vĂ”ite arvata — see ei olnud samuti ligipÀÀsetav. MÀÀramatute peeglite otsimine ma jĂ€tan kohe vĂ€lja (loodan et ilmsete pĂ”hjuste tĂ”ttu).

Õnneks on Webogram avatud lĂ€htekoodiga projekt, mille lĂ€htekood on k ĐŽĐŸŃŃ‚ŃƒĐżĐ”Đœ github kĂ€esoleva autori poolt (suur tĂ€nu talle!)
Iseseisev installimine ja kÀivitamine ei ole keeruline, kuid tingimustes, kus juurdepÀÀs Telegrami serveritele on blokeeritud, on teil pigem pettumus kui edu, kuna veebiversioon saadab kasutaja seadme kaudu pÀringuid Telegrami serveritele.

Õnneks on seda ĂŒsna lihtne (kuigi mitte eriti ilmselge) parandada. Tahaksin hoiatada, et ma ei ole selle lahenduse autor. Leidsin selle  teema, kus arutati probleemi, mis oli sarnane minule. Lahendus, mille pakkus githubi kasutaja tecknojock, aitas mind vĂ€ga, kuid olen kindel, et see vĂ”ib abiks olla ka kellelegi teisele, seetĂ”ttu otsustasin kirjutada selle juhendi.

Nii et allpool leiate samm-sammult juhendi Webogrami peegli seadistamiseks ja selle pÀringute proksieerimiseks Telegrami serveritele nginx'i kasutades.

NĂ€iteks valisin just installitud ja uuendatud Ubuntu Server 18.04.3.

TÀhelepanu: KÀesolev juhend ei sisalda juhiseid domeeni seadistamise kohta nginx'is. See tuleb ise teha. Juhend eeldab, et teil on juba seadistatud domeen koos SSL-iga ja samuti, et server, millel kavatsete seadistada, on ligipÀÀs Telegrami serveritele (mille iganes viiside kaudu soovite).

Oletame, et selle serveri IP on 10.23.0.3 ja domeeninimi mywebogram.localhost.

VĂ”ttes neid tingimusi arvesse, toon vĂ€lja konfiguratsioonide nĂ€ited. Ära unusta muuta vÀÀrtusi oma omadeks.

Nii et alapeatĂŒkk:

Webogram'i kÀivitamiseks vajame nodejs'i. Kui installida see Ubuntu hoidlatest, saame nodejs versiooni 8.x. Me vajame versiooni 12.x:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - 
sudo apt update && sudo apt -y install nodejs

Valime koha, kus meie Webogram tegutseb.

NĂ€iteks, paigutame selle oma kodu katalooge. Selleks kloonime ametliku hoidla oma serverisse:

cd ~ && git clone https://github.com/zhukov/webogram.git

J seuraavaks peab installima kÔik sÔltuvused, mis on vajalikud rakenduse kÀivitamiseks:

cd webogram && npm install

Proovime teha katse kÀivitamise. KÀivitage kÀsk:

npm start

PĂ€rast seda proovime avada brauseris

 http://10.23.0.3:8000/app/index.html

Kui olete kÔik Ôigesti teinud, avaneb teile Webogram'i sisselogimise leht.

NĂŒĂŒd peame seadistama rakenduse kĂ€ivitamise teenusena. Selleks loome faili

sudo touch /lib/systemd/system/webogram.service

avatakse see mis tahes redaktoris ja antakse jÀrgmine vÀlimus (sisestage oma Path to WorkDirectory)

[Unit]
Description=Webogram mirror
[Service]
WorkingDirectory=/home/tg/webogram
ExecStart=/usr/bin/npm start
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

PÀrast seda tÀidame jÀrgmised kÀsud:

Rakendame muudatused

sudo systemctl daemon-reload

LĂŒlitame automaatse kĂ€ivitamise sisse:

sudo systemctl enable webogram.service

KĂ€ivitame teenuse:

sudo systemctl start webogram.service

PÀrast tehtud toiminguid jÀÀb Webogram kÀttesaadavaks port 8000.

Kuna me seadistame juurdepÀÀsu meie Webogramile nginx'i kaudu, sulgeme port 8000 vÀliste pÀringute jaoks.

Kasutame selleks utiliiti udf (vÔi mÔnda mugavat viisi):

sudo ufw deny 8000

Juhul, kui siiski otsustasite kasutada udf'i, kuid see on serveris vĂ€lja lĂŒlitatud — lisame veel reeglid (et kĂ”ik ei kokku kukuks) ja lĂŒlitame udf'i sisse:

sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

Edasi, alustame nginx'i konfiguratsiooni muutmist.

Kuidas ma juba varem hoiatasin — eeldatakse, et teie serveris on juba domeen sĂ€tetega ssl. Tuletan meelde, et peate konfigureerimisse lisama domeenifaili, et kĂ”ik korralikult töötaks:


server {
...
  location ^~ /pluto/apiw1/ {
    proxy_pass https://pluto.web.telegram.org/apiw1/;
  }
  location ^~ /venus/apiw1/ {
    proxy_pass https://venus.web.telegram.org/apiw1/;
  }
  location ^~ /aurora/apiw1/ {
    proxy_pass https://aurora.web.telegram.org/apiw1/;
  }
  location ^~ /vesta/apiw1/ {
    proxy_pass https://vesta.web.telegram.org/apiw1/;
  }
  location ^~ /flora/apiw1/ {
    proxy_pass https://flora.web.telegram.org/apiw1/;
  }
  location ^~ /pluto-1/apiw1/ {
    proxy_pass https://pluto-1.web.telegram.org/apiw1/;
  }
  location ^~ /venus-1/apiw1/ {
    proxy_pass https://venus-1.web.telegram.org/apiw1/;
  }
  location ^~ /aurora-1/apiw1/ {
    proxy_pass https://aurora-1.web.telegram.org/apiw1/;
  }
  location ^~ /vesta-1/apiw1/ {
    proxy_pass https://vesta-1.web.telegram.org/apiw1/;
  }
  location ^~ /flora-1/apiw1/ {
    proxy_pass https://flora-1.web.telegram.org/apiw1/;
  }
  location ^~ /DC1/ {
    proxy_pass http://149.154.175.10:80/;
  }
  location ^~ /DC2/ {
    proxy_pass http://149.154.167.40:80/;
  }
  location ^~ /DC3/ {
    proxy_pass http://149.154.175.117:80/;
  }
  location ^~ /DC4/ {
    proxy_pass http://149.154.175.50:80/;
  }
  location ^~ /DC5/ {
    proxy_pass http://149.154.167.51:80/;
  }
  location ^~ /DC6/ {
    proxy_pass http://149.154.175.100:80/;
  }
  location ^~ /DC7/ {
    proxy_pass http://149.154.167.91:80/;
  }
  location ^~ /DC8/ {
    proxy_pass http://149.154.171.5:80/;
  }
 location / {
    auth_basic "tg";
    auth_basic_user_file /etc/nginx/passwd.htpasswd;
    proxy_pass http://localhost:8000/;
    proxy_read_timeout 90s;
    proxy_connect_timeout 90s;
    proxy_send_timeout 90s;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
  }
}

Mida me lisame nginx-konfiguratsiooni:

  • Muudame juurlocation'i, mis suunab pĂ€ringud porti 8000, millele Webogram vastab.
  • Juurlocation sulgeme basic-auth'iga. See on sĂŒmboolne samm, et kaitsta meie rakendust vÔÔraste silmade ja botide eest. (Samuti, et ei tekiks probleeme blokeerimisega.)
  • Palju location'e, kus on proxy_path Telegrami serveritele - need ongi meie lĂ”pp-punktid, kust me suuname oma pĂ€ringud.

Samuti loome faili /etc/nginx/passwd.htpasswd;, et nginx-il oleks millega kasutaja paroolide kontrollimist teha.

sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg

KĂ€ivitame oma Webogrami instantsi Nginx kaudu proksiatena

TaaskÀivita nginx:

sudo systemctl restart nginx

NĂŒĂŒd on Webogram saadaval ainult aadressil mywebogram.localhost/app/index.html pĂ€rast seda, kui on sisestatud kasutajanimi ja parool, mille mÀÀrasid htpasswd'i kĂ€su loomisel.

JÀÀnud on vaid veidi: teeme projekti vÀheseid muudatusi.

Ava redigeerijas fail ~/webogram/app/js/lib/mtproto.js

Ja kohanda selle algus jÀrgmisele kujule:

/*!
 * Webogram v0.7.0 - messaging web application for MTProto
 * https://github.com/zhukov/webogram
 * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>
 * https://github.com/zhukov/webogram/blob/master/LICENSE
 */

angular.module('izhukov.mtproto', ['izhukov.utils'])

  .factory('MtpDcConfigurator', function () {
    var sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora']

    var dcOptions = Config.Modes.test
      ? [
        {id: 1, host: 'mywebogram.localhost/DC1',  port: 80},
        {id: 2, host: 'mywebogram.localhost/DC2',  port: 80},
        {id: 3, host: 'mywebogram.localhost/DC3', port: 80}
      ]
      : [
        {id: 1, host: 'mywebogram.localhost/DC4',  port: 80},
        {id: 2, host: 'mywebogram.localhost/DC5',  port: 80},
        {id: 3, host: 'mywebogram.localhost/DC6', port: 80},
        {id: 4, host: 'mywebogram.localhost/DC7',  port: 80},
        {id: 5, host: 'mywebogram.localhost/DC8',   port: 80}
      ]

    var chosenServers = {}

    function chooseServer (dcID, upload) {
      if (chosenServers[dcID] === undefined) {
        var chosenServer = false,
          i, dcOption

        if (Config.Modes.ssl || !Config.Modes.http) {
          var subdomain = sslSubdomains[dcID - 1] + (upload ? '-1' : '')
          var path = Config.Modes.test ? 'apiw_test1' : '/apiw1/'
          chosenServer = 'https://mywebogram.localhost/' + subdomain + path
          return chosenServer
        }
       for (i = 0; i < dcOptions.length; i++) {
          dcOption = dcOptions[i]
          if (dcOption.id == dcID) {
            chosenServer = 'http://' + dcOption.host + '/apiw1'
            break
          }
        }
        chosenServers[dcID] = chosenServer
      }
...
 

PĂ€rast seda on vajalik uuendada rakenduse lehte brauseris.

Ava brauseri konsol ja vaata rakenduse vĂ”rgu pĂ€ringuid. Kui kĂ”ik töötab ja XHR pĂ€ringud suunatakse sinu serverisse - tĂ€hendab, et kĂ”ik on Ă”igesti seadistatud ja Webogram on nĂŒĂŒd nginx'i kaudu suunatud.

KĂ€ivitame oma Webogrami instantsi Nginx kaudu proksiatena

Loodan, et see Ôpetus on kasulik veel kellelegi peale minu.

Suur tÀnu kÔigile, kes lÔpuni lugesid.

Kui kellelgi on raskusi vĂ”i olen teinud mĂ”ningaid ebatĂ€psusi — vastan hea meelega ja pĂŒĂŒan teid aidata kommentaarides vĂ”i privaatmessage'is.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster