nginx வழியாக ப்ராக்ஸி செய்வதன் மூலம் எங்கள் வெபோகிராம் நிகழ்வை உயர்த்துகிறோம்

ஹே ஹப்ர்!

இணையத்திற்கான முழுமையற்ற அணுகலுடன் கார்ப்பரேட் நெட்வொர்க்கிற்குள் வேலை செய்ய வேண்டிய சூழ்நிலையில் சமீபத்தில் நான் என்னைக் கண்டேன், தலைப்பிலிருந்து நீங்கள் யூகிக்கக்கூடியது போல, டெலிகிராம் அதில் தடுக்கப்பட்டது. இந்த நிலைமை பலருக்கு நன்கு தெரிந்திருக்கும் என்று நான் நம்புகிறேன்.

உடனடி தூதர்கள் இல்லாமல் என்னால் செய்ய முடியும், ஆனால் டெலிகிராம் தான் எனக்கு வேலைக்குத் தேவைப்பட்டது. ஒரு வேலை இயந்திரத்தில் கிளையண்டை நிறுவுவது சாத்தியமில்லை, தனிப்பட்ட மடிக்கணினியைப் பயன்படுத்தவும் முடியவில்லை. மற்றொரு தீர்வு அதைப் பயன்படுத்துவதாகத் தெரிகிறது அதிகாரப்பூர்வ இணைய பதிப்பு, ஆனால் நீங்கள் யூகித்தபடி, அதுவும் கிடைக்கவில்லை. அதிகாரப்பூர்வமற்ற கண்ணாடியைத் தேடும் விருப்பத்தை நான் உடனடியாகக் கடந்துவிட்டேன் (வெளிப்படையான காரணங்களுக்காக நான் நம்புகிறேன்).

அதிர்ஷ்டவசமாக, வெபோகிராம் என்பது ஒரு திறந்த மூல திட்டமாகும், அதன் மூல குறியீடு கிடைக்கிறது -மகிழ்ச்சியா அதன் ஆசிரியர் (அவருக்கு நன்றிகள் பல!)
நிறுவல் மற்றும் தொடங்குவது கடினம் அல்ல, இருப்பினும், டெலிகிராம் சேவையகங்களுக்கான அணுகல் தடுக்கப்பட்ட நெட்வொர்க்கில் செயல்படும் சூழ்நிலைகளில், நீங்கள் வெற்றியை விட ஏமாற்றமடைவீர்கள், ஏனெனில் வலை பதிப்பு பயனரின் கணினியிலிருந்து டெலிகிராம் சேவையகங்களுக்கு கோரிக்கைகளை அனுப்புகிறது.

அதிர்ஷ்டவசமாக, இது மிகவும் எளிமையான (ஆனால் மிகவும் வெளிப்படையானது அல்ல) பிழைத்திருத்தமாகும். இந்த தீர்வின் ஆசிரியர் நான் அல்ல என்பதை எச்சரிக்க விரும்புகிறேன். நான் அதை கண்டுபிடிக்க முடிந்தது கிளை, இது என்னுடையது போன்ற ஒரு பிரச்சனையை விவாதித்தது. கிதுப் பயனரால் பரிந்துரைக்கப்பட்ட தீர்வு டெக்னோஜாக், இது எனக்கு நிறைய உதவியது, இருப்பினும், இது வேறு ஒருவருக்கு உதவ முடியும் என்று நான் நம்புகிறேன், எனவே இந்த டுடோரியலை எழுத முடிவு செய்தேன்.

வெட்டுக்குக் கீழே உங்கள் வெபோகிராம் கண்ணாடியின் படிப்படியான அமைப்பையும், nginx ஐப் பயன்படுத்தி டெலிகிராம் சேவையகங்களுக்கு அதன் கோரிக்கைகளை ப்ராக்ஸி செய்யும் அமைப்பையும் காணலாம்.

உதாரணமாக, நான் புதிதாக நிறுவப்பட்ட மற்றும் புதுப்பிக்கப்பட்ட உபுண்டு சர்வர் 18.04.3 ஐ தேர்வு செய்தேன்.

எச்சரிக்கை: இந்த டுடோரியலில் nginx இல் டொமைனை அமைப்பதற்கான வழிமுறைகள் இருக்காது. இதை நீங்களே செய்ய வேண்டும். டுடோரியல் நீங்கள் ஏற்கனவே ssl உடன் ஒரு டொமைனை உள்ளமைத்துள்ளீர்கள் என்றும், அதை நீங்கள் கட்டமைக்கத் திட்டமிடும் சர்வரிலேயே டெலிகிராம் சேவையகங்களுக்கான அணுகல் உள்ளது என்றும் (நீங்கள் விரும்பும் விதத்தில்)

இந்த சர்வரின் ஐபி 10.23.0.3 என்றும் டொமைன் பெயர் mywebogram.localhost என்றும் வைத்துக்கொள்வோம்.

இந்த மரபுகளின் அடிப்படையில், உள்ளமைவுகளின் உதாரணங்களை தருகிறேன். மதிப்புகளை உங்கள் சொந்தமாக மாற்ற மறக்காதீர்கள்.

எனவே தொடங்குவோம்:

Webogram ஐ இயக்க, நமக்கு nodejகள் தேவை. முன்னிருப்பாக, உபுண்டு களஞ்சியங்களில் இருந்து நிறுவினால், 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

இது வரை நீங்கள் எல்லாவற்றையும் சரியாகச் செய்திருந்தால், Webogram அங்கீகாரப் பக்கம் திறக்கும்.

இப்போது நாம் ஒரு சேவையாக இயக்க பயன்பாட்டை உள்ளமைக்க வேண்டும். இதைச் செய்ய, ஒரு கோப்பை உருவாக்குவோம்

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

படிகளை முடித்த பிறகு, Webogram போர்ட் 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 உள்ளமைவை மாற்ற ஆரம்பிக்கலாம்.

நான் மேலே எச்சரித்தபடி, 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 கட்டமைப்பில் நாம் என்ன சேர்க்கிறோம்:

  • நாங்கள் ரூட் இருப்பிடத்தை மாற்றுகிறோம், இது போர்ட் 8000 க்கு கோரிக்கைகளை ப்ராக்ஸி செய்யும், அதில் Webogram பதிலளிக்கும்
  • அடிப்படை அங்கீகாரத்தைப் பயன்படுத்தி ரூட் இருப்பிடத்தை மூடுகிறோம். துருவியறியும் கண்கள் மற்றும் போட்களிலிருந்து எங்கள் விண்ணப்பத்தை மூடுவதற்கு இது முற்றிலும் குறியீட்டு படியாகும். (தடுப்பதில் சிக்கல்களைத் தவிர்க்கவும்)
  • டெலிகிராம் சர்வரில் ப்ராக்ஸி_பாத் கொண்ட சில இடங்கள் எங்கள் இறுதிப் புள்ளிகளாகும், இதன் மூலம் நாங்கள் எங்கள் கோரிக்கைகளை ப்ராக்ஸி செய்வோம்

மேலும், ஒரு கோப்பை உருவாக்குவோம் /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 கோரிக்கைகள் உங்கள் சேவையகத்திற்குச் சென்றால், எல்லாம் சரியாக முடிந்துவிடும், மேலும் Webogram இப்போது nginx வழியாக ப்ராக்ஸி செய்யப்படுகிறது.

nginx வழியாக ப்ராக்ஸி செய்வதன் மூலம் எங்கள் வெபோகிராம் நிகழ்வை உயர்த்துகிறோம்

இந்த பயிற்சி என்னைத் தவிர வேறு யாருக்காவது பயனுள்ளதாக இருக்கும் என்று நம்புகிறேன்.

இறுதிவரை படித்த அனைவருக்கும் நன்றிகள் பல.

யாருக்காவது ஏதேனும் சிரமங்கள் இருந்தால் அல்லது நான் ஏதேனும் தவறுகள் செய்திருந்தால், நான் மகிழ்ச்சியுடன் பதிலளிப்பேன் மற்றும் கருத்துகளில் அல்லது PM இல் உங்களுக்கு உதவ முயற்சிப்பேன்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்