අපි nginx හරහා ප්‍රොක්සි කිරීම සමඟ අපගේ Webogram උදාහරණය ඉහළ නංවන්නෙමු

හෙලෝ, හබ්ර්!

අන්තර්ජාලයට අසම්පූර්ණ ප්‍රවේශයක් සහිත ආයතනික ජාලයක් තුළ වැඩ කිරීමට අවශ්‍ය වූ තත්වයකට මම මෑතකදී මුහුණ දුන් අතර, මාතෘකාවෙන් ඔබට අනුමාන කළ හැකි පරිදි, ටෙලිග්‍රාම් එහි අවහිර කර ඇත. මෙම තත්වය බොහෝ දෙනෙකුට හුරුපුරුදු බව මට විශ්වාසයි.

මට ක්ෂණික පණිවිඩකරුවන් නොමැතිව කළ හැකිය, නමුත් මට වැඩ සඳහා අවශ්‍ය වූයේ ටෙලිග්‍රාම් ය. සේවාලාභියා වැඩ යන්ත්‍රයක ස්ථාපනය කිරීමට නොහැකි වූ අතර පුද්ගලික ලැප්ටොප් පරිගණකයක් භාවිතා කිරීමට නොහැකි විය. එය භාවිතා කිරීම තවත් විසඳුමක් බව පෙනේ නිල වෙබ් අනුවාදය, නමුත් ඔබට අනුමාන කළ හැකි පරිදි, එය ද නොතිබුණි. මම වහාම නිල නොවන කැඩපතක් සෙවීමේ විකල්පය හරස් කරමි (පැහැදිලි හේතු සඳහා මම බලාපොරොත්තු වෙමි).

වාසනාවකට මෙන්, Webogram යනු මූලාශ්‍ර කේතය ලබා ගත හැකි විවෘත මූලාශ්‍ර ව්‍යාපෘතියකි github එහි කතුවරයා (ඒ සඳහා ඔහුට බොහෝ ස්තූතියි!)
ස්ථාපනය සහ දියත් කිරීම අපහසු නැත, කෙසේ වෙතත්, ටෙලිග්‍රාම් සේවාදායකයන්ට අවහිර කළ ප්‍රවේශයක් ඇති ජාලයක් තුළ ක්‍රියාත්මක වන තත්වයන් තුළ, වෙබ් අනුවාදය පරිශීලකයාගේ යන්ත්‍රයෙන් ටෙලිග්‍රාම් සේවාදායකයන් වෙත ඉල්ලීම් යවන බැවින්, ඔබ සාර්ථක වීමට වඩා කලකිරීමට පත්වීමට ඉඩ ඇත.

වාසනාවකට මෙන්, මෙය තරමක් සරල (නමුත් ඉතා පැහැදිලි නොවේ) නිවැරදි කිරීමකි. මෙම විසඳුමේ කතුවරයා මා නොවන බව මම ඔබට අනතුරු ඇඟවීමට කැමැත්තෙමි. මම එය සොයා ගැනීමට සමත් විය ශාඛාව, මගේ හා සමාන ගැටලුවක් ගැන සාකච්ඡා කළා. github පරිශීලකයා විසින් යෝජනා කරන ලද විසඳුම tecknojock, එය මට ගොඩක් උදව් කළා, කෙසේ වෙතත්, එය වෙනත් කෙනෙකුට උපකාර කළ හැකි බව මට විශ්වාසයි, එබැවින් මම මෙම නිබන්ධනය ලිවීමට තීරණය කළෙමි.

කප්පාදුවට පහළින් ඔබට ඔබේ වෙබ්ග්‍රෑම් දර්පණයේ පියවරෙන් පියවර සැකසුම සහ nginx භාවිතයෙන් ටෙලිග්‍රාම් සේවාදායකයන්ට එහි ඉල්ලීම් ප්‍රොක්සි කිරීමේ සැකසුම සොයාගත හැකිය.

උදාහරණයක් ලෙස, මම අලුතින් ස්ථාපනය කර යාවත්කාලීන කරන ලද Ubuntu Server 18.04.3 තෝරා ගත්තෙමි.

Внимание: මෙම නිබන්ධනයට nginx හි වසමක් පිහිටුවීම පිළිබඳ උපදෙස් ඇතුළත් නොවේ. ඔබ මෙය ඔබම කළ යුතුයි. නිබන්ධනය උපකල්පනය කරන්නේ ඔබ දැනටමත් ssl සමඟ වසමක් වින්‍යාස කර ඇති බවත්, ඔබ එය වින්‍යාස කිරීමට අදහස් කරන සේවාදායකයටම ටෙලිග්‍රාම් සේවාදායකයන් වෙත ප්‍රවේශය ඇති බවත්ය (ඔබ කැමති ඕනෑම ආකාරයකින්)

අපි උපකල්පනය කරමු මෙම සේවාදායකයේ ip එක 10.23.0.3, සහ ඩොමේන් නාමය mywebogram.localhost වේ.

මෙම සම්මුතීන් මත පදනම්ව, මම සැකසුම් සඳහා උදාහරණ දෙන්නෙමි. අගයන් ඔබේම ලෙස වෙනස් කිරීමට අමතක නොකරන්න.

එබැවින් අපි ආරම්භ කරමු:

Webogram ධාවනය කිරීමට, අපට 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

අපගේ Webogram පදනම් වන ස්ථානය අපි තෝරා ගනිමු.

උදාහරණයක් ලෙස, අපි එය නිවාස නාමාවලියේ මූලයේ තබමු. මෙය සිදු කිරීම සඳහා, අපගේ සේවාදායකයට නිල ගබඩාව ක්ලෝන කරන්න:

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

ඊළඟ පියවර වන්නේ යෙදුම ක්‍රියාත්මක කිරීමට අවශ්‍ය සියලුම පරායත්තතා ස්ථාපනය කිරීමයි:

cd webogram && npm install

අපි ටෙස්ට් ධාවනයක් උත්සාහ කරමු. විධානය ක්‍රියාත්මක කරන්න:

npm start

ඊට පසු, අපි එය බ්රවුසරයේ විවෘත කිරීමට උත්සාහ කරමු

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

මේ මොහොත දක්වා ඔබ සියල්ල නිවැරදිව කර ඇත්නම්, Webogram අවසර පිටුව විවෘත වේ.

දැන් අපි යෙදුම සේවාවක් ලෙස ධාවනය කිරීමට වින්‍යාසගත කළ යුතුයි. මෙය සිදු කිරීම සඳහා, අපි ගොනුවක් නිර්මාණය කරමු

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

පියවර සම්පූර්ණ කිරීමෙන් පසුව, Webogram වරාය 8000 මත දිගටම පවතිනු ඇත.

අපි nginx හරහා අපගේ Webogram වෙත ප්‍රවේශය පිහිටුවන බැවින්, පිටතින් එන ඉල්ලීම් සඳහා අපි වරාය 8000 වසා දමමු.

අපි මේ සඳහා udf උපයෝගීතාව භාවිතා කරමු (හෝ ඔබට පහසු ඕනෑම ක්‍රමයක්):

sudo ufw deny 8000

ඔබ තවමත් udf භාවිතා කිරීමට තීරණය කරන්නේ නම්, නමුත් එය සේවාදායකයේ අක්‍රිය කර ඇත්නම්, තවත් නීති එකතු කරන්න (සියල්ල කඩා නොවැටෙන පරිදි) සහ udf සක්‍රීය කරන්න:

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

ඊළඟට, අපි nginx වින්‍යාසය වෙනස් කිරීමට පටන් ගනිමු.

මා ඉහත අනතුරු ඇඟවූ පරිදි, ඔබගේ සේවාදායකයේ ssl සහිත වසමක් දැනටමත් වින්‍යාස කර ඇති බව උපකල්පනය කෙරේ. වසම් වින්‍යාස ගොනුව නිවැරදිව ක්‍රියා කිරීම සඳහා එයට එකතු කළ යුතු දේ ගැන පමණක් මම ඔබේ අවධානය යොමු කරමි:


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 config එකට එකතු කරන දේ:

  • Webogram ප්‍රතිචාර දක්වන පෝට් 8000 වෙත ඉල්ලීම් ප්‍රොක්සි කරන මූල ස්ථානය අපි වෙනස් කරමු.
  • අපි මූලික සත්‍යාපනය භාවිතයෙන් මූල ස්ථානය වසා දමමු. මෙය පිරික්සීමේ ඇස් සහ බොට් වලින් අපගේ යෙදුම වසා දැමීමේ තනිකරම සංකේතාත්මක පියවරකි. (එමෙන්ම අවහිර කිරීමේ ගැටළු මඟහරවා ගැනීම සඳහා)
  • ටෙලිග්‍රාම් සේවාදායකයේ proxy_path සහිත ස්ථාන සමූහයක් හරියටම අපගේ අවසාන ලක්ෂ්‍ය වන අතර එමඟින් අපි අපගේ ඉල්ලීම් ප්‍රොක්සි කරන්නෙමු.

ඒ වගේම අපි file එකක් හදමු /etc/nginx/passwd.htpasswd;එබැවින් nginx හට පරිශීලක මුරපද පරීක්ෂා කිරීමට යමක් තිබේ.

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

අපි nginx හරහා ප්‍රොක්සි කිරීම සමඟ අපගේ Webogram උදාහරණය ඉහළ නංවන්නෙමු

nginx නැවත ආරම්භ කරන්න:

sudo systemctl restart nginx

දැන් Webogram පමණක් ලබා ගත හැක 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 ඉල්ලීම් ඔබගේ සේවාදායකයට ගියහොත්, සියල්ල නිවැරදිව සිදු කර ඇති අතර, Webogram දැන් nginx හරහා ප්‍රොක්සි කර ඇත.

අපි nginx හරහා ප්‍රොක්සි කිරීම සමඟ අපගේ Webogram උදාහරණය ඉහළ නංවන්නෙමු

මෙම නිබන්ධනය මට හැර වෙනත් කෙනෙකුට ප්‍රයෝජනවත් වනු ඇතැයි මම බලාපොරොත්තු වෙමි.

අවසානය දක්වා කියවූ සැමට බොහෝම ස්තුතියි.

යමෙකුට කිසියම් දුෂ්කරතාවයක් ඇත්නම් හෝ මම කිසියම් සාවද්‍යතාවයක් ඇත්නම්, මම පිළිතුරු දීමට සතුටු වන අතර අදහස් දැක්වීමේදී හෝ PM මඟින් ඔබට උදව් කිරීමට උත්සාහ කරමි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න