Peb tsa peb qhov Webogram piv txwv nrog proxying ntawm nginx

Hlo Habr!

Tsis ntev los no kuv pom kuv tus kheej nyob rau hauv ib qho xwm txheej uas yuav tsum tau ua haujlwm hauv kev sib koom tes nrog kev nkag tsis tiav hauv Is Taws Nem thiab, raws li koj tuaj yeem kwv yees los ntawm lub npe, Telegram raug thaiv hauv nws. Kuv paub tseeb tias qhov xwm txheej no paub ntau yam.

Kuv tuaj yeem ua yam tsis muaj tus xa xov tam sim, tab sis nws yog Telegram uas kuv xav tau rau kev ua haujlwm. Nws tsis tuaj yeem nruab tus neeg siv khoom ntawm lub tshuab ua haujlwm, thiab tsis tuaj yeem siv lub laptop tus kheej. Lwm qhov kev daws teeb meem zoo li yog siv nws official web version, tab sis raws li koj tuaj yeem twv, nws kuj tsis muaj. Kuv tam sim hla tawm qhov kev xaiv ntawm kev tshawb nrhiav daim iav tsis raug cai (Kuv vam tias yuav pom tseeb yog vim li cas).

Luckily, Webogram yog qhov qhib qhov project uas nws qhov chaws muaj nyob rau hauv github nws tus sau (Rau qhov ua tsaug ntau rau nws!)
Kev teeb tsa thiab tso tawm nws tus kheej tsis yooj yim, txawm li cas los xij, nyob rau hauv cov xwm txheej ntawm kev ua haujlwm hauv lub network nrog thaiv kev nkag mus rau Telegram servers, koj yuav muaj feem yuav poob siab dua li kev ua tiav, txij li lub vev xaib xa ntawv thov rau Telegram servers los ntawm tus neeg siv lub tshuab.

Luckily, qhov no yog qhov yooj yim haum (tab sis tsis pom tseeb) kho. Kuv xav ceeb toom rau koj tias kuv tsis yog tus sau qhov kev daws teeb meem no. Kuv tswj kom pom nws hauv ceg, uas tau tham txog ib qho teeb meem zoo ib yam li kuv. Kev daws tau pom zoo los ntawm tus neeg siv github tecknoj, nws pab kuv ntau heev, txawm li cas los xij, kuv paub tseeb tias nws tuaj yeem pab lwm tus, yog li kuv txiav txim siab sau cov lus qhia no.

Hauv qab qhov kev txiav koj yuav pom kev teeb tsa ib ntus ntawm koj daim iav Webogram thiab teeb tsa kev tso npe nws thov rau Telegram servers siv nginx.

Ua piv txwv, kuv tau xaiv qhov tshiab thiab kho tshiab Ubuntu Server 18.04.3.

Ceeb toom: Qhov kev qhia no yuav tsis suav nrog cov lus qhia ntawm kev teeb tsa lub npe hauv nginx. Koj yuav tsum ua qhov no koj tus kheej. Cov kev qhia xav tias koj twb tau teeb tsa lub npe nrog ssl, thiab tus neeg rau zaub mov nws tus kheej uas koj npaj yuav teeb tsa nws muaj kev nkag mus rau Telegram servers (txhua txoj kev koj nyiam)

Cia peb xav tias tus ip ntawm tus neeg rau zaub mov no yog 10.23.0.3, thiab lub npe sau npe yog mywebogram.localhost

Raws li cov lus cog tseg no, kuv yuav muab piv txwv ntawm kev teeb tsa. Tsis txhob hnov ​​​​qab hloov cov txiaj ntsig rau koj tus kheej.

Yog li cia li pib tau:

Txhawm rau khiav Webogram, peb xav tau nodejs. Los ntawm lub neej ntawd, yog tias peb nruab nws los ntawm Ubuntu repositories, peb yuav tau txais nodejs version 8.x. Peb xav tau 12.x:

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

Peb xaiv qhov chaw uas peb Webogram yuav ua raws.

Piv txwv li, cia peb muab tso rau hauv lub hauv paus ntawm lub tsev directory. Ua li no, clone lub official repository rau peb server:

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

Cov kauj ruam tom ntej yog txhawm rau nruab tag nrho cov kev vam meej uas yuav tsum tau ua los khiav daim ntawv thov:

cd webogram && npm install

Wb sim sim khiav. Khiav qhov hais kom ua:

npm start

Tom qab ntawd, peb sim qhib nws hauv qhov browser

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

Yog hais tias txog qhov no koj tau ua txhua yam kom raug, nplooj ntawv tso cai Webogram yuav qhib.

Tam sim no peb yuav tsum teeb tsa daim ntawv thov kom khiav raws li kev pabcuam. Ua li no, cia peb tsim cov ntaub ntawv

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

qhib nws hauv txhua tus editor thiab muab nws cov tsos hauv qab no (sau koj txoj hauv kev mus rau 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

Tom qab ntawd peb khiav cov lus txib hauv qab no:

Siv cov kev hloov pauv

sudo systemctl daemon-reload

Qhib autorun:

sudo systemctl enable webogram.service

Cia peb pib qhov kev pabcuam:

sudo systemctl start webogram.service

Tom qab ua tiav cov kauj ruam, Webogram yuav txuas ntxiv muaj nyob rau ntawm chaw nres nkoj 8000.

Txij li thaum peb yuav teeb tsa kev nkag mus rau peb lub Webogram ntawm nginx, peb yuav kaw qhov chaw nres nkoj 8000 rau kev thov los ntawm sab nraud.

Peb siv udf qhov hluav taws xob rau qhov no (los yog ib txoj kev yooj yim rau koj):

sudo ufw deny 8000

Nyob rau hauv rooj plaub koj tseem txiav txim siab siv udf, tab sis nws yog neeg xiam oob khab ntawm lub server, ntxiv cov cai ntxiv (kom txhua yam tsis sib nrug) thiab pab udf:

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

Tom ntej no, cia peb pib hloov nginx configuration.

Raws li kuv tau ceeb toom saum toj no, nws xav tias qhov sau nrog ssl twb tau teeb tsa ntawm koj lub server. Kuv tsuas yog kos koj cov xim rau qhov yuav tsum tau ntxiv rau cov ntaub ntawv sau npe rau nws ua haujlwm kom raug:


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

Dab tsi peb ntxiv rau nginx config:

  • Peb hloov qhov chaw hauv paus, uas yuav tso npe thov rau qhov chaw nres nkoj 8000, uas Webogram teb
  • Peb kaw qhov chaw hauv paus siv qhov yooj yim-auth. Qhov no yog ib qho piv txwv nkaus xwb los kaw peb daim ntawv thov los ntawm prying ob lub qhov muag thiab bots. (Thiab kuj kom tsis txhob muaj teeb meem nrog kev thaiv)
  • Ib pawg ntawm cov chaw nrog proxy_path ntawm Telegram server yog raws nraim peb qhov kawg ntawm qhov uas peb yuav tso npe rau peb qhov kev thov

Tsis tas li, cia peb tsim cov ntaub ntawv /etc/nginx/passwd.htpasswd;yog li ntawd nginx muaj ib yam dab tsi los xyuas cov neeg siv passwords nrog.

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

Peb tsa peb qhov Webogram piv txwv nrog proxying ntawm nginx

Restart nginx:

sudo systemctl restart nginx

Tam sim no Webogram tsuas yog muaj nyob ntawm mywebogram.localhost/app/index.html tom qab tus ID nkag mus thiab lo lus zais uas koj tau teev tseg thaum tsim cov lus txib htpasswd nkag.

Muaj me ntsis sab laug: peb yuav hloov me me rau qhov project nws tus kheej.

Qhib cov ntaub ntawv hauv tus editor ~/webogram/app/js/lib/mtproto.js

Thiab coj nws pib mus rau daim ntawv hauv qab no:

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

Tom qab ntawd, koj yuav tsum rov ua dua nplooj ntawv thov hauv browser.

Qhib koj lub browser console thiab saib daim ntawv thov kev thov network. Yog tias txhua yam ua haujlwm thiab XHR thov mus rau koj lub server, tom qab ntawd txhua yam ua tiav raug, thiab Webogram tam sim no raug xa tawm ntawm nginx.

Peb tsa peb qhov Webogram piv txwv nrog proxying ntawm nginx

Kuv vam tias qhov kev qhia no yuav muaj txiaj ntsig zoo rau lwm tus ntawm kuv.

Ua tsaug ntau rau sawv daws nyeem kom tag.

Yog tias leej twg muaj teeb meem lossis kuv ua qhov tsis raug, kuv yuav zoo siab los teb thiab sim pab koj hauv cov lus lossis hauv PM.

Tau qhov twg los: www.hab.com

Ntxiv ib saib