మేము nginx ద్వారా ప్రాక్సింగ్‌తో మా వెబ్‌గ్రామ్ ఉదాహరణను పెంచుతాము

హే హబ్ర్!

ఇటీవల నేను ఇంటర్నెట్‌కు అసంపూర్ణ ప్రాప్యతతో కార్పొరేట్ నెట్‌వర్క్‌లో పని చేయాల్సిన పరిస్థితిని ఎదుర్కొన్నాను మరియు మీరు టైటిల్ నుండి ఊహించినట్లుగా, టెలిగ్రామ్ దానిలో బ్లాక్ చేయబడింది. ఈ పరిస్థితి చాలా మందికి సుపరిచితమేనని నేను ఖచ్చితంగా అనుకుంటున్నాను.

నేను ఇన్‌స్టంట్ మెసెంజర్‌లు లేకుండా చేయగలను, కానీ నాకు పని కోసం టెలిగ్రామ్ అవసరం. వర్క్ మెషీన్‌లో క్లయింట్‌ను ఇన్‌స్టాల్ చేయడం సాధ్యం కాదు, అలాగే వ్యక్తిగత ల్యాప్‌టాప్‌ను ఉపయోగించడం సాధ్యం కాదు. దీనిని ఉపయోగించడం మరొక పరిష్కారంగా కనిపిస్తోంది అధికారిక వెబ్ వెర్షన్, కానీ మీరు ఊహించినట్లుగా, అది కూడా అందుబాటులో లేదు. నేను అనధికారిక అద్దం కోసం శోధించే ఎంపికను వెంటనే దాటవేస్తాను (స్పష్టమైన కారణాల కోసం నేను ఆశిస్తున్నాను).

అదృష్టవశాత్తూ, వెబ్‌గ్రామ్ అనేది ఓపెన్ సోర్స్ ప్రాజెక్ట్, దీని సోర్స్ కోడ్ అందుబాటులో ఉంది github దాని రచయిత (దీనికి అతనికి చాలా ధన్యవాదాలు!)
ఇన్‌స్టాలేషన్ మరియు ప్రారంభించడం కష్టం కాదు, అయినప్పటికీ, టెలిగ్రామ్ సర్వర్‌లకు బ్లాక్ చేయబడిన యాక్సెస్ ఉన్న నెట్‌వర్క్‌లోని ఆపరేషన్ పరిస్థితులలో, వెబ్ వెర్షన్ వినియోగదారు మెషీన్ నుండి టెలిగ్రామ్ సర్వర్‌లకు అభ్యర్థనలను పంపుతుంది కాబట్టి, మీరు విజయవంతం కాకుండా నిరాశ చెందే అవకాశం ఉంది.

అదృష్టవశాత్తూ, ఇది చాలా సులభమైన (కానీ చాలా స్పష్టంగా లేదు) పరిష్కారం. నేను ఈ పరిష్కారానికి రచయితను కాదని మిమ్మల్ని హెచ్చరించాలనుకుంటున్నాను. నేను దానిని కనుగొనగలిగాను శాఖ, ఇది నా లాంటి సమస్యను చర్చించింది. Github వినియోగదారు సూచించిన పరిష్కారం టెక్నోజోక్, ఇది నాకు చాలా సహాయపడింది, అయినప్పటికీ, ఇది మరొకరికి సహాయపడగలదని నేను ఖచ్చితంగా అనుకుంటున్నాను, కాబట్టి నేను ఈ ట్యుటోరియల్ రాయాలని నిర్ణయించుకున్నాను.

కట్ క్రింద మీరు మీ వెబ్‌గ్రామ్ మిర్రర్ యొక్క దశల వారీ సెటప్ మరియు nginxని ఉపయోగించి టెలిగ్రామ్ సర్వర్‌లకు దాని అభ్యర్థనలను ప్రాక్సీ చేసే సెటప్‌ను కనుగొంటారు.

ఉదాహరణగా, నేను తాజాగా ఇన్‌స్టాల్ చేయబడిన మరియు నవీకరించబడిన ఉబుంటు సర్వర్ 18.04.3ని ఎంచుకున్నాను.

హెచ్చరిక: ఈ ట్యుటోరియల్ nginxలో డొమైన్‌ను సెటప్ చేయడంపై సూచనలను కలిగి ఉండదు. మీరు దీన్ని మీరే చేయాలి. ట్యుటోరియల్ మీరు ఇప్పటికే sslతో డొమైన్‌ను కాన్ఫిగర్ చేసారని మరియు మీరు దానిని కాన్ఫిగర్ చేయాలనుకుంటున్న సర్వర్‌కు టెలిగ్రామ్ సర్వర్‌లకు ప్రాప్యత ఉందని ఊహిస్తుంది (మీకు నచ్చిన విధంగా)

ఈ సర్వర్ యొక్క ip 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

ఈ సమయం వరకు మీరు ప్రతిదీ సరిగ్గా చేసి ఉంటే, వెబ్గ్రామ్ అధికార పేజీ తెరవబడుతుంది.

ఇప్పుడు మనం అప్లికేషన్‌ను సేవగా అమలు చేయడానికి కాన్ఫిగర్ చేయాలి. దీన్ని చేయడానికి, ఫైల్‌ను క్రియేట్ చేద్దాం

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 అభ్యర్థనలు మీ సర్వర్‌కు వెళితే, ప్రతిదీ సరిగ్గా జరుగుతుంది మరియు వెబ్‌గ్రామ్ ఇప్పుడు nginx ద్వారా ప్రాక్సీ చేయబడుతుంది.

మేము nginx ద్వారా ప్రాక్సింగ్‌తో మా వెబ్‌గ్రామ్ ఉదాహరణను పెంచుతాము

ఈ ట్యుటోరియల్ నాకు కాకుండా మరొకరికి ఉపయోగకరంగా ఉంటుందని నేను ఆశిస్తున్నాను.

చివరి వరకు చదివిన ప్రతి ఒక్కరికీ చాలా ధన్యవాదాలు.

ఎవరికైనా ఏవైనా ఇబ్బందులు ఉంటే లేదా నేను ఏవైనా తప్పులు చేసినట్లయితే, నేను సమాధానం ఇవ్వడానికి సంతోషిస్తాను మరియు వ్యాఖ్యలలో లేదా PMలో మీకు సహాయం చేయడానికి ప్రయత్నిస్తాను.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి