موږ د نګینکس له لارې د پراکسي کولو سره زموږ د ویبګرام مثال پورته کوو

اې حبره!

پدې وروستیو کې ما خپل ځان په داسې حالت کې وموند چې په کوم کې دا اړینه وه چې د کارپوریټ شبکې دننه انټرنیټ ته د نامناسب لاسرسي سره کار وکړو او لکه څنګه چې تاسو د سرلیک څخه اټکل کولی شئ ، ټیلیګرام پدې کې بند شوی و. زه ډاډه یم چې دا وضعیت ډیری خلکو ته پیژندل شوی.

زه د فوري میسنجرونو پرته کولی شم، مګر دا ټیلیګرام و چې ما د کار لپاره اړتیا درلوده. دا ممکنه نه وه چې پیرودونکي په کاري ماشین کې نصب کړي، او نه دا ممکنه وه چې شخصي لپ ټاپ وکاروئ. بله حل داسې ښکاري چې دا کارول دي رسمي ویب نسخه، مګر لکه څنګه چې تاسو اټکل کولی شئ ، دا هم شتون نلري. زه سمدلاسه د غیر رسمي عکس لټون کولو اختیار پریږدم (زه د څرګند دلیلونو لپاره امید لرم).

خوشبختانه، ویبگرام د خلاصې سرچینې پروژه ده چې د سرچینې کوډ په کې شتون لري github د دې لیکوال (د هغه لپاره ډیره مننه!)
پخپله نصب کول او لانچ کول ستونزمن ندي ، په هرصورت ، په شبکه کې د عملیاتو شرایطو کې چې د ټیلیګرام سرورونو ته بند شوي لاسرسي سره ، تاسو به د بریا په پرتله ډیر نا امید اوسئ ، ځکه چې د ویب نسخه د کارونکي ماشین څخه د ټیلیګرام سرورونو ته غوښتنې لیږي.

خوشبختانه ، دا یو خورا ساده (مګر خورا څرګند ندی) فکس دی. زه غواړم تاسو ته خبرداری ورکړم چې زه د دې حل لیکوال نه یم. ما په دې کې موندلی وم څانګه، کوم چې زما په څیر د یوې ستونزې په اړه بحث وکړ. حل د ګیتوب کارونکي لخوا وړاندیز شوی ټیکنوجک، دا زما سره ډیره مرسته وکړه، په هرصورت، زه ډاډه یم چې دا کولی شي د بل چا سره مرسته وکړي، نو ما پریکړه وکړه چې دا ټیوټوریل ولیکم.

د کټ لاندې به تاسو د خپل ویبګرام عکس ګام په ګام ترتیب ومومئ او د نګینکس په کارولو سره د ټیلیګرام سرورونو ته د هغې غوښتنې پراکسي تنظیم کړئ.

د مثال په توګه ، ما یو تازه نصب شوی او تازه شوی اوبنټو سرور 18.04.3 غوره کړ.

پاملرنه: په دې ټیوټوریل کې به په نګینکس کې د ډومین تنظیم کولو لارښوونې شاملې نه وي. تاسو باید دا پخپله وکړئ. ټیوټوریل داسې انګیري چې تاسو دمخه د ایس ایس ایل سره ډومین تنظیم کړی دی ، او دا چې پخپله سرور چې تاسو یې د تنظیم کولو پلان لرئ د ټیلیګرام سرورونو ته لاسرسی لري (په هر ډول چې تاسو یې غواړئ)

راځئ فرض کړو چې د دې سرور ip 10.23.0.3 دی، او د ډومین نوم mywebogram.localhost دی

د دې کنوانسیونونو پراساس ، زه به د تشکیلاتو مثالونه وړاندې کړم. مه هیروئ چې ارزښتونه په خپل ځان بدل کړئ.

نو اجازه راکړې چې:

د ویبګرام چلولو لپاره، موږ نوډز ته اړتیا لرو. په ډیفالټ ، که موږ دا د اوبنټو ذخیره کولو څخه نصب کړو ، نو موږ به د نوډج نسخه 8.x ترلاسه کړو. موږ 12.x ته اړتیا لرو:

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

موږ هغه ځای غوره کوو چیرې چې زموږ ویبگرام به میشته وي.

د مثال په توګه، راځئ چې دا د کور لارښود په ریښه کې ځای په ځای کړو. د دې کولو لپاره، زموږ سرور ته رسمي ذخیره کلون کړئ:

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

بل ګام د غوښتنلیک چلولو لپاره اړین ټول انحصارونه نصب کول دي:

cd webogram && npm install

راځئ چې د ازموینې چلولو هڅه وکړو. کمانډ چل کړئ:

npm start

له هغې وروسته، موږ هڅه کوو چې دا په براوزر کې خلاص کړو

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

که تر دې وخته پورې تاسو هر څه په سمه توګه ترسره کړي وي، د ویبګرام واک پاڼه به پرانیزي.

اوس موږ اړتیا لرو چې د خدمت په توګه چلولو لپاره غوښتنلیک تنظیم کړو. د دې کولو لپاره، راځئ چې یو فایل جوړ کړو

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

په هر مدیر کې یې پرانیزئ او لاندې بڼه یې ورکړئ (د کاري لارښود ته خپله لاره دننه کړئ)

[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

بیا موږ لاندې کمانډونه چلوو:

د بدلونونو پلي کول

sudo systemctl daemon-reload

اتومات فعال کړئ:

sudo systemctl enable webogram.service

راځئ چې خدمت پیل کړو:

sudo systemctl start webogram.service

د مرحلو بشپړولو وروسته ، ویبگرام به په 8000 پورټ کې شتون ته دوام ورکړي.

څرنګه چې موږ به د نګینکس له لارې زموږ ویبګرام ته لاسرسی تنظیم کړو، موږ به د بهر څخه د غوښتنو لپاره 8000 بندر بند کړو.

د دې لپاره موږ د udf افادیت (یا ستاسو لپاره مناسبه طریقه کاروو):

sudo ufw deny 8000

په هغه حالت کې چې تاسو لاهم د udf کارولو پریکړه کوئ، مګر دا په سرور کې غیر فعال شوی، نور قواعد اضافه کړئ (تر څو هر څه جلا نشي) او udf فعال کړئ:

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

بیا، راځئ چې د نګینکس ترتیب بدلولو پیل وکړو.

لکه څنګه چې ما پورته خبرداری ورکړ، داسې انګیرل کیږي چې د ایس ایس ایل سره یو ډومین لا دمخه ستاسو په سرور کې ترتیب شوی. زه به یوازې ستاسو پام هغه څه ته واړوم چې د ډومین ترتیب کولو فایل کې د سم کار کولو لپاره اضافه کولو ته اړتیا لري:


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

هغه څه چې موږ د nginx ترتیب کې اضافه کوو:

  • موږ د ریښې ځای بدلوو، کوم چې به د 8000 پورټ ته د پراکسي غوښتنه وکړي، کوم چې ویبگرام ځواب ورکوي
  • موږ د بنسټیز سند په کارولو سره د ریښې ځای بندوو. دا یو خالص سمبولیک ګام دی چې زموږ غوښتنلیک د سترګو او بوټو څخه بند کړئ. (او همدارنګه د بلاک کولو سره د ستونزو څخه مخنیوي لپاره)
  • د ټیلیګرام سرور کې د پراکسي_پاټ سره یو شمیر ځایونه په حقیقت کې زموږ پای ټکي دي چې له لارې به یې موږ خپلې غوښتنې پراکسي کړو

همدارنګه، راځئ چې یو فایل جوړ کړو /etc/nginx/passwd.htpasswd;نو دا چې nginx د کارن پاسورډونو چک کولو لپاره یو څه لري.

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

موږ د نګینکس له لارې د پراکسي کولو سره زموږ د ویبګرام مثال پورته کوو

nginx بیا پیل کړئ:

sudo systemctl restart nginx

اوس ویبګرام به یوازې په کې شتون ولري mywebogram.localhost/app/index.html د ننوتلو او پټنوم وروسته چې تاسو د htpasswd کمانډ رامینځته کولو پرمهال تعریف کړی و ننوتئ.

لږ څه پاتې دي: موږ به پخپله پروژه کې کوچني بدلونونه وکړو.

فایل په مدیر کې خلاص کړئ ~/webogram/app/js/lib/mtproto.js

او خپل پیل لاندې شکل ته راوړو:

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

له دې وروسته ، تاسو اړتیا لرئ په براوزر کې د غوښتنلیک پا pageه تازه کړئ.

خپل د براوزر کنسول خلاص کړئ او د غوښتنلیک شبکې غوښتنې وګورئ. که هرڅه کار کوي او د XHR غوښتنې ستاسو سرور ته ځي، نو هر څه په سمه توګه ترسره شوي، او ویبگرام اوس د نګینکس له لارې پراکسي شوی.

موږ د نګینکس له لارې د پراکسي کولو سره زموږ د ویبګرام مثال پورته کوو

زه امید لرم چې دا لارښود به زما پرته بل چا ته ګټور وي.

د هرچا څخه ډیره مننه چې تر پایه یې لوستل.

که څوک کومه ستونزه ولري یا ما کومه غلطي کړې وي، زه به په ځواب کې خوشحاله یم او هڅه به وکړم چې په نظرونو یا PM کې ستاسو سره مرسته وکړم.

سرچینه: www.habr.com

Add a comment