Við hækka vefritstilvikið okkar með umboði í gegnum nginx

Hæ Habr!

Nýlega lenti ég í aðstæðum þar sem nauðsynlegt var að vinna innan fyrirtækjanets með ófullkominn aðgang að internetinu og eins og þú getur giskað á af titlinum var Telegram lokað á því. Ég er viss um að þetta ástand kannast margir við.

Ég get verið án skyndiboða, en það var Telegram sem ég þurfti í vinnunni. Ekki var hægt að setja biðlarann ​​á vinnuvél, né var hægt að nota persónulega fartölvu. Önnur lausn virðist vera að nota það opinber vefútgáfa, en eins og þú getur giska á, var það líka ófáanlegt. Ég strika strax yfir þann möguleika að leita að óopinberum spegli (vona ég af augljósum ástæðum).

Sem betur fer er Webogram opið uppspretta verkefni þar sem frumkóði er fáanlegur í GitHub Höfundur hennar (sem er honum kærar þakkir fyrir!)
Uppsetningin og ræsingin sjálf er ekki erfið, en við rekstrarskilyrði innan nets með lokaðan aðgang að Telegram netþjónum er líklegra að þú verðir fyrir vonbrigðum en árangri, þar sem vefútgáfan sendir beiðnir til Telegram netþjóna frá vél notandans.

Sem betur fer er þetta frekar einföld (en ekki mjög augljós) leiðrétting. Ég vil vara þig við því að ég er ekki höfundur þessarar lausnar. Mér tókst að finna það inn útibú, sem fjallaði um svipað vandamál og mitt. Lausn sem github notandi lagði til teknojock, það hjálpaði mér mikið, en ég er viss um að það getur hjálpað einhverjum öðrum, svo ég ákvað að skrifa þessa kennslu.

Fyrir neðan klippuna finnurðu skref-fyrir-skref uppsetningu á Webogram speglinum þínum og uppsetningu á umboðsbeiðnum hans til Telegram netþjóna með því að nota nginx.

Sem dæmi valdi ég nýuppsettan og uppfærðan Ubuntu Server 18.04.3.

Viðvörun: Þessi kennsla mun ekki innihalda leiðbeiningar um að setja upp lén í nginx. Þú þarft að gera þetta sjálfur. Kennslan gerir ráð fyrir að þú hafir þegar stillt lén með ssl og að þjónninn sjálfur sem þú ætlar að stilla hann á hafi aðgang að Telegram netþjónum (á hvaða hátt sem þú vilt)

Gerum ráð fyrir að ip þessa netþjóns sé 10.23.0.3 og lénið sé mywebogram.localhost

Byggt á þessum samþykktum mun ég gefa dæmi um stillingar. Ekki gleyma að breyta gildunum í þitt eigið.

Svo skulum byrja:

Til að keyra Webogram þurfum við nodejs. Sjálfgefið, ef við setjum það upp frá Ubuntu geymslunum, munum við fá nodejs útgáfu 8.x. Við þurfum 12.x:

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

Við veljum staðinn þar sem vefritið okkar verður staðsett.

Til dæmis skulum við setja það í rót heimamöppunnar. Til að gera þetta, klónaðu opinberu geymsluna á netþjóninn okkar:

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

Næsta skref er að setja upp öll ósjálfstæði sem þarf til að keyra forritið:

cd webogram && npm install

Við skulum prófa prufuhlaup. Keyra skipunina:

npm start

Eftir það reynum við að opna það í vafranum

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

Ef þú hefur gert allt rétt fram að þessu mun vefritsheimildarsíðan opnast.

Nú þurfum við að stilla forritið til að keyra sem þjónustu. Til að gera þetta, búum til skrá

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

opnaðu það í hvaða ritstjóra sem er og gefðu því eftirfarandi útlit (sláðu inn slóðina þína í 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

Síðan keyrum við eftirfarandi skipanir:

Að beita breytingunum

sudo systemctl daemon-reload

Virkja sjálfvirka keyrslu:

sudo systemctl enable webogram.service

Við skulum hefja þjónustuna:

sudo systemctl start webogram.service

Eftir að skrefunum hefur verið lokið mun Webogram halda áfram að vera fáanlegt á port 8000.

Þar sem við munum setja upp aðgang að vefritinu okkar í gegnum nginx, munum við loka port 8000 fyrir beiðnir utan frá.

Fyrir þetta notum við udf tólið (eða hvaða aðferð sem er hentug fyrir þig):

sudo ufw deny 8000

Ef þú ákveður samt að nota udf, en það er óvirkt á þjóninum, bættu við fleiri reglum (svo að allt detti ekki í sundur) og virkjaðu udf:

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

Næst skulum við byrja að breyta nginx stillingum.

Eins og ég varaði við hér að ofan er gert ráð fyrir að lén með ssl sé þegar stillt á netþjóninum þínum. Ég mun aðeins vekja athygli þína á því sem þarf að bæta við lénsstillingarskrána til að hún virki rétt:


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

Það sem við bætum við nginx stillinguna:

  • Við breytum rótarstaðsetningunni, sem mun umboðsbeiðnir í port 8000, sem Webogram svarar
  • Við lokum rótarstaðsetningunni með því að nota basic-auth. Þetta er eingöngu táknrænt skref til að loka forritinu okkar fyrir hnýsnum augum og vélmennum. (Og líka til að forðast vandamál með að loka)
  • Fullt af stöðum með proxy_path á Telegram þjóninum eru einmitt endapunktar okkar þar sem við munum miðla beiðnum okkar

Við skulum líka búa til skrá /etc/nginx/passwd.htpasswd;þannig að nginx hefur eitthvað til að athuga notendalykilorð með.

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

Við hækka vefritstilvikið okkar með umboði í gegnum nginx

Endurræstu nginx:

sudo systemctl restart nginx

Nú verður Webogram aðeins fáanlegt kl mywebogram.localhost/app/index.html eftir að innskráningin og lykilorðið sem þú skilgreindir þegar þú bjóst til htpasswd skipunina er slegið inn.

Það er lítið eftir: við munum gera litlar breytingar á verkefninu sjálfu.

Opnaðu skrána í ritstjóra ~/webogram/app/js/lib/mtproto.js

Og færðu upphaf þess í eftirfarandi form:

/*!
 * Webogram v0.7.0 - messaging web application for MTProto
 * https://github.com/zhukov/webogram
 * Copyright (C) 2014 Igor Zhukov <[email protected]>
 * 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
      }
...
 

Eftir þetta þarftu að endurnýja forritasíðuna í vafranum.

Opnaðu vafraborðið þitt og skoðaðu netbeiðnir forritsins. Ef allt virkar og XHR beiðnir fara á netþjóninn þinn, þá er allt gert rétt og Webogram er nú umboðsmaður í gegnum nginx.

Við hækka vefritstilvikið okkar með umboði í gegnum nginx

Ég vona að þessi kennsla nýtist einhverjum öðrum en mér.

Kærar þakkir til allra sem lásu til enda.

Ef einhver lendir í einhverjum erfiðleikum eða ég gerði einhverjar ónákvæmni, mun ég vera fús til að svara og reyna að hjálpa þér í athugasemdum eða í PM.

Heimild: www.habr.com

Bæta við athugasemd