Po ngremë instancën tonë të Webogram me proksim përmes nginx

Përshëndetje, Habr!

SĂ« fundmi u gjenda nĂ« njĂ« situatĂ« ku ishte e nevojshme tĂ« punoja brenda njĂ« rrjeti korporativ me qasje tĂ« pjesshme nĂ« internet dhe siç mund ta imagjinoni nga titulli — Telegram ishte bllokuar. Jam i sigurt se kjo situatĂ« Ă«shtĂ« e njohur pĂ«r shumĂ«.

Mund tĂ« funksionoj pa mesazherĂ«t, por Telegrami kishte rĂ«ndĂ«si pĂ«r punĂ«n time. Instalimi i klientit nĂ« makinĂ«n e punĂ«s nuk ishte njĂ« mundĂ«si, po as pĂ«rdorimi i laptopit personal. NjĂ« zgjidhje tjetĂ«r do tĂ« ishte pĂ«rdorimi i versionit zyrtar nĂ« web, por, siç mund tĂ« imagjinoni — as ai nuk ishte i aksesueshĂ«m. E hoqa menjĂ«herĂ« mundĂ«sinĂ« e gjetjes sĂ« njĂ« pasqyre jozyrtare (shpresoj pĂ«r arsye tĂ« qarta).

Me fat, Webogram është një projekt open-source, kodi burimor i të cilit është i aksesueshëm në github autorët e tij (Faleminderit shumë për këtë!)
Instalimi dhe nisja nuk janë shumë të nd komplikuara, megjithatë, në kushtet e funksionimit brenda një rrjeti me qasje të bllokuar në serverat e Telegramit, më shumë do të prisni zhgënjim sesa sukses, pasi versioni në web bën kërkesa për në serverat e Telegramit nga makina e përdoruesit.

Me fat, kjo është mjaft e thjeshtë (por jo shumë e qartë) për t'u korrigjuar. Dua të paralajmëroj se nuk jam autori i kësaj zgjidhjeje. Më është arritur ta gjej atë në një temë, ku u diskutua një problem i ngjashëm me timin. Zgjidhja e ofruar nga përdoruesi i github tecknojockmë ndihmoi shumë, por jam i sigurt se mund t'i ndihmojë edhe të tjerëve, prandaj vendosa të shkruaj këtë tutorial.

Nën këtë postim do të gjeni një udhëzim hap pas hapi për konfigurimin e pasqyrës suaj Webogram dhe konfigurimin e prokurimit të kërkesave të saj në serverat e Telegramit duke përdorur nginx.

Si një shembull, kam zgjedhur Ubuntu Server 18.04.3 të instaluar dhe të përditësuar vetëm tani.

Kujdes: Në këtë tutorial nuk do të ketë instrukcione për konfigurimin e domenit në nginx. Kjo duhet të bëhet vetë. Tutoriali supozon se keni një domen të konfiguruar me SSL, si dhe vetë serverin, i cili planifikon konfigurimin, duhet të ketë qasje në serverat e Telegramit (si të preferoni ju)

Le të supozojmë se IP e këtij serveri është 10.23.0.3, dhe emri i domenit është mywebogram.localhost

Duke u nisur nga këto supozime, do të sjell shembuj të konfigurimeve. Mos harroni të ndryshoni vlerat sipas nevojës tuaj.

Pra, le të fillojmë:

PĂ«r tĂ« nisur Webogram, na nevojitet nodejs. NĂ«se e instaloni atĂ« nga depozitat e Ubuntu — do tĂ« marrim nodejs version 8.x. Na nevojitet versioni 12.x:

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

Zgjidhni një vend ku do të bazohet Webogrami ynë.

PĂ«r shembull — do ta vendosim nĂ« rrĂ«njĂ«n e direktorisĂ« shtĂ«piake. PĂ«r kĂ«tĂ«, e klonojmĂ« depozitĂ«n zyrtare nĂ« serverin tonĂ«:

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

Hapi tjetĂ«r — tĂ« instaloni tĂ« gjitha varĂ«sitĂ« e nevojshme pĂ«r tĂ« nisur aplikacionin:

cd webogram && npm install

Të provojmë të realizojmë një nisje testuese. Ekzekutoni komandën:

npm start

Pas kësaj, provoni të hapni në shfletues

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

NĂ«se deri nĂ« kĂ«tĂ« pikĂ« keni bĂ«rĂ« gjithçka siç duhet — do t'ju hapet faqja e autorizimit tĂ« Webogram.

Tani na nevojitet të konfiguroni nisjen e aplikacionit si një shërbim. Për këtë, krijoni një skedë

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

hapeni atë në çdo redaktues dhe ajdoni për të pasur pamjen e mëposhtme (shkruani rrugën tuaj deri në 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

Pas kësaj kryeni komandat e mëposhtme:

Apliko ndryshimet

sudo systemctl daemon-reload

Aktivizoni nisjen automatike:

sudo systemctl enable webogram.service

Nisim shërbimin:

sudo systemctl start webogram.service

Pas këtyre veprimeve, Webogram do të vazhdojë të jetë i aksesueshëm në portin 8000.

Duke qenĂ« se do tĂ« konfiguroni qasjen nĂ« Webogram pĂ«rmes nginx — do tĂ« mbyllim portin 8000 pĂ«r kĂ«rkesat nga jashtĂ«.

Për këtë përdorim utilitarin udf (ose çfarëdo mundi që ju përshtatet):

sudo ufw deny 8000

NĂ« rast se vendosni tĂ« pĂ«rdorni edhe udf dhe ai Ă«shtĂ« i fikur nĂ« server — shtojmĂ« disa rregulla tĂ« tjera (qĂ« gjithçka tĂ« mos shkatĂ«rrohet) dhe aktivizojmĂ« udf:

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

Më pas, fillojmë të ndryshojmë konfigurimin e nginx.

Siç e paralajmĂ«rova mĂ« parĂ« — supozohet se nĂ« serverin tuaj ka njĂ« domen tĂ« konfiguruar me SSL. Do tĂ« theksoj vetĂ«m se do t'ju duhet tĂ« shtoni nĂ« skedarin e konfigurimit tĂ« domenit pĂ«r njĂ« funksionim tĂ« saktĂ«:


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;
  }
}

ÇfarĂ« po shtojmĂ« nĂ« konfigurimin nginx:

  • TĂ« modifikojmĂ« vendndodhjen kryesore, e cila do tĂ« prokurojĂ« kĂ«rkesat nĂ« portin 8000, ku Webogram jep pĂ«rgjigje.
  • Vendndodhja kryesore mbyllet me ndihmĂ«n e basic-auth. Ky Ă«shtĂ« njĂ« hap simbolik pĂ«r tĂ« mbrojtur aplikacionin tonĂ« nga sytĂ« e huaj dhe botĂ«ve. (Po ashtu, pĂ«r tĂ« shmangur ndonjĂ« problem me bllokimet)
  • NjĂ« sĂ«rĂ« vendndodhjesh me proxy_path nĂ« serverat Telegram — kĂ«to janĂ« piketat tona, pĂ«rmes tĂ« cilave do tĂ« prokurorojmĂ« kĂ«rkesat tona.

Gjithashtu, do të krijojmë një skedar /etc/nginx/passwd.htpasswd;, për t'i dhënë nginx mundësinë të krahasojë fjalëkalimet e përdoruesve.

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

Po ngremë instancën tonë të Webogram me proksim përmes nginx

Rinisim nginx:

sudo systemctl restart nginx

Tani Webogram do të jetë i aksesueshëm vetëm në adresën mywebogram.localhost/app/index.html pas hyrjes me emrin e përdoruesit dhe fjalëkalimin që keni përcaktuar gjatë krijimit të komandës htpasswd.

Ka mbetur pak: të bëjmë disa ndryshime të vogla në projektin vet.

Hapni në redaktuesin skedarin ~/webogram/app/js/lib/mtproto.js

dhe sillni fillimin e tij në këtë formë:

/*!
 * 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
      }
...
 

Pas kësaj, duhet të rifreskoni faqen me aplikacionin në shfletues.

Hapni konsolĂ«n e shfletuesit dhe shikoni kĂ«rkesat rrjetore tĂ« aplikacionit. NĂ«se gjithçka funksionon, dhe kĂ«rkesat XHR shkojnĂ« nĂ« serverin tuaj — atĂ«herĂ« gjithçka Ă«shtĂ« bĂ«rĂ« siç duhet, dhe Webogram tani prokurohet pĂ«rmes nginx.

Po ngremë instancën tonë të Webogram me proksim përmes nginx

Shpresoj që ky tutorial të jetë i dobishëm për dikë tjetër përveç meje.

Faleminderit shumë të gjithëve që e lexuan deri në fund.

NĂ«se dikush ka pasur vĂ«shtirĂ«si ose unĂ« kam bĂ«rĂ« ndonjĂ« pasaktĂ«si — do tĂ« jem i lumtur tĂ« pĂ«rgjigjem dhe tĂ« pĂ«rpiqem t'ju ndihmoj nĂ« komentet ose nĂ« mesazhe private.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster