اسان nginx ذريعي پراکسينگ سان اسان جي ويبگرام مثال کي وڌايو

اي حبر!

تازو مون پاڻ کي هڪ اهڙي صورتحال ۾ محسوس ڪيو جنهن ۾ اهو ضروري هو ته ڪارپوريٽ نيٽ ورڪ جي اندر ڪم ڪرڻ سان گڏ انٽرنيٽ تائين نامڪمل رسائي ۽، جيئن توهان عنوان مان اندازو لڳائي سگهو ٿا، ٽيليگرام ان ۾ بند ڪيو ويو. مون کي پڪ آهي ته هن صورتحال ڪيترن ئي کان واقف آهي.

مان بغير فوري پيغامن جي ڪري سگهان ٿو، پر اهو ٽيليگرام هو جنهن جي مون کي ڪم جي ضرورت هئي. اهو ممڪن نه هو ته ڪلائنٽ کي ڪم جي مشين تي نصب ڪرڻ، ۽ نه ئي اهو ممڪن هو ته هڪ ذاتي ليپ ٽاپ استعمال ڪرڻ. ٻيو حل لڳي ٿو ان کي استعمال ڪرڻ سرڪاري ويب ورزن، پر جيئن توهان اندازو لڳائي سگهو ٿا، اهو پڻ دستياب نه هو. مان فوري طور تي غير رسمي آئيني جي ڳولا جي اختيار کي پار ڪريان ٿو (مون کي واضح سببن جي اميد آهي).

خوش قسمت، ويبگرام هڪ اوپن سورس پروجيڪٽ آهي جنهن جو سورس ڪوڊ موجود آهي GitHub ان جو ليکڪ (جنهن لاءِ هن جا ڪيترائي شڪر!)
انسٽاليشن ۽ لانچ پاڻ کي ڏکيو نه آهي، جڏهن ته، نيٽ ورڪ جي اندر آپريشن جي حالتن ۾ ٽيليگرام سرور تائين بند ٿيل رسائي سان، توهان ڪامياب ٿيڻ کان وڌيڪ مايوس ٿي ويندا، ڇاڪاڻ ته ويب ورزن صارف جي مشين کان ٽيليگرام سرورز ڏانهن درخواستون موڪلي ٿو.

خوش قسمت، هي هڪ بلڪل سادو آهي (پر بلڪل واضح ناهي) حل. مان توهان کي ڊيڄارڻ چاهيان ٿو ته مان هن حل جو ليکڪ نه آهيان. مان ان کي ڳولڻ ۾ ڪامياب ٿيس شاخ، جنهن مون وانگر هڪ مسئلي تي بحث ڪيو. حل github استعمال ڪندڙ طرفان تجويز ڪيل ٽيڪنوجڪ، ان مون کي تمام گهڻو مدد ڪئي، تنهن هوندي، مون کي پڪ آهي ته اهو ڪنهن ٻئي جي مدد ڪري سگهي ٿو، تنهن ڪري مون هن سبق لکڻ جو فيصلو ڪيو.

هيٺ ڏنل ڪٽ توهان کي پنهنجي ويبگرام آئيني جو قدم قدم سيٽ اپ ملندو ۽ نينڪس استعمال ڪندي ٽيليگرام سرورز تي ان جي درخواستن کي پراکسي ڪرڻ جو سيٽ اپ.

مثال طور، مون تازو انسٽال ٿيل ۽ اپڊيٽ ڪيو Ubuntu سرور 18.04.3.

خبردار: هي سبق شامل نه هوندو nginx ۾ ڊومين قائم ڪرڻ تي هدايتون. توهان کي اهو پنهنجو پاڻ کي ڪرڻو پوندو. سبق فرض ڪري ٿو ته توهان اڳ ۾ ئي هڪ ڊومين کي ايس ايس ايل سان ترتيب ڏنو آهي، ۽ اهو سرور پاڻ جنهن تي توهان ان کي ترتيب ڏيڻ جو ارادو ڪيو آهي ٽيليگرام سرورز تائين رسائي آهي (ڪنهن به طريقي سان توهان چاهيو ٿا)

اچو ته فرض ڪريون ته هن سرور جو ip 10.23.0.3 آهي، ۽ ڊومين جو نالو آهي mywebogram.localhost

انهن ڪنوينشن جي بنياد تي، مان ترتيب ڏيڻ جا مثال ڏيندس. قدرن کي تبديل ڪرڻ نه وساريو پنھنجي لاءِ.

پوء اچو ته شروع ڪريون

ويبگرام کي هلائڻ لاء، اسان کي ضرورت آهي nodejs. ڊفالٽ طور، جيڪڏهن اسان ان کي Ubuntu repositories مان انسٽال ڪريون ٿا، اسان حاصل ڪنداسين nodejs ورزن 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

ان کي ڪنهن به ايڊيٽر ۾ کوليو ۽ ان کي هيٺيون شڪل ڏيو (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

پوء اسان هيٺ ڏنل حڪمن کي هلائيندا آهيون:

تبديلين کي لاڳو ڪرڻ

sudo systemctl daemon-reload

خودڪار هلائڻ کي فعال ڪريو:

sudo systemctl enable webogram.service

اچو ته خدمت شروع ڪريون:

sudo systemctl start webogram.service

مرحلن کي مڪمل ڪرڻ کان پوء، ويبگرام جاري رهندو بندرگاهه 8000 تي دستياب.

جيئن ته اسان nginx ذريعي اسان جي ويبگرام تائين رسائي قائم ڪنداسين، اسان ٻاهران درخواستن لاء پورٽ 8000 بند ڪنداسين.

اسان ان لاءِ udf افاديت استعمال ڪريون ٿا (يا ڪو به طريقو جيڪو توهان لاءِ آسان آهي):

sudo ufw deny 8000

جيڪڏهن توهان اڃا تائين udf استعمال ڪرڻ جو فيصلو ڪيو آهي، پر اهو سرور تي بند ٿيل آهي، وڌيڪ ضابطا شامل ڪريو (جيئن ته سڀ ڪجهه ڌار نه ٿئي) ۽ udf کي فعال ڪريو:

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

اڳيون، اچو ته nginx ترتيب تبديل ڪرڻ شروع ڪريون.

جيئن مون مٿي خبردار ڪيو، اهو فرض ڪيو ويو آهي ته هڪ ڊومين سان ايس ايس ايل اڳ ۾ ئي ترتيب ڏنل آهي توهان جي سرور تي. مان صرف توهان جو ڌيان ان طرف ڏيندس ته ڊومين جي ٺاھ جوڙ واري فائل ۾ شامل ڪرڻ جي ضرورت پوندي ان کي صحيح ڪم ڪرڻ لاءِ:


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 پورٽ تي پراکسي جي درخواست ڪندو، جنھن تي ويبگرام جواب ڏيندو
  • اسان بنيادي-تصوير استعمال ڪندي روٽ جي جڳھ کي بند ڪريون ٿا. هي هڪ خالص علامتي قدم آهي اسان جي ايپليڪيشن کي بند ڪرڻ لاءِ اکين ۽ بوٽن کان. (۽ پڻ بلاڪ ڪرڻ سان مسئلن کان بچڻ لاء)
  • ٽيليگرام سرور تي proxy_path سان جڳهن جو هڪ گروپ بلڪل اسان جا آخري نقطا آهن جن ذريعي اسان پنهنجي درخواستن کي پراڪس ڪنداسين

انهي سان گڏ، اچو ته هڪ فائل ٺاهي /etc/nginx/passwd.htpasswd;انهي ڪري ته nginx وٽ صارف پاسورڊ چيڪ ڪرڻ لاءِ ڪجهه آهي.

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

اسان nginx ذريعي پراکسينگ سان اسان جي ويبگرام مثال کي وڌايو

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

ان کان پوء، توهان کي برائوزر ۾ ايپليڪيشن پيج کي ريفريش ڪرڻو پوندو.

پنھنجي برائوزر ڪنسول کي کوليو ۽ ايپليڪيشن جي نيٽ ورڪ جي درخواستن کي ڏسو. جيڪڏهن هر شي ڪم ڪري ٿي ۽ XHR درخواستون توهان جي سرور ڏانهن وڃو، پوء هر شي صحيح طريقي سان ٿي چڪو آهي، ۽ ويبگرام هاڻي nginx ذريعي پروڪس ڪيو ويو آهي.

اسان nginx ذريعي پراکسينگ سان اسان جي ويبگرام مثال کي وڌايو

اميد اٿم ته هي سبق مون کان سواءِ ڪنهن ٻئي لاءِ ڪارآمد ثابت ٿيندو.

هر ڪنهن جي وڏي مهرباني جنهن آخر تائين پڙهيو.

جيڪڏهن ڪنهن کي ڪا به مشڪلات آهي يا مون ڪا غلطي ڪئي آهي، آئون جواب ڏيڻ ۾ خوش ٿيندس ۽ تبصرن ۾ يا PM ۾ توهان جي مدد ڪرڻ جي ڪوشش ڪندس.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو