ПоднимаСм свой инстанс Webogram с проксированиСм Ρ‡Π΅Ρ€Π΅Π· nginx

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€!

НСдавно я ΠΏΠΎΠΏΠ°Π» Π² ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ сСти с Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ доступом ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ β€” Telegram Π² Π½Π΅ΠΉ Π±Ρ‹Π» Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½. Π£Π²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ данная ситуация Π·Π½Π°ΠΊΠΎΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΈΠΌ.

Π― Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· мСссСндТСров, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Telegram ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½ Π±Ρ‹Π» для Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ»ΠΎΡΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊ β€” Ρ‚ΠΎΠΆΠ΅. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ видится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Π±-Π²Π΅Ρ€ΡΠΈΡŽ, Π½ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ β€” ΠΎΠ½Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π±Ρ‹Π»Π° нСдоступна. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ с поиском Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π΅Ρ€ΠΊΠ°Π»Π° я сразу Π²Ρ‹Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°ΡŽ (надСюсь ΠΏΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ).

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Webogram β€” это opensource-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, исходный ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ доступСн Π² github Π΅Π³ΠΎ Π°Π²Ρ‚ΠΎΡ€Π° (Π—Π° Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ Π΅ΠΌΡƒ спасибо!)
Π‘Π°ΠΌΠ° установка ΠΈ запуск Π½Π΅ прСдставляСт ΠΈΠ· сСбя Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π² условиях эксплуатации Π²Π½ΡƒΡ‚Ρ€ΠΈ сСти с Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ доступом ΠΊ сСрвСрам Telegram вас скорСС ΠΆΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‡Π΅ΠΌ успСх, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Π΅Π±-вСрсия отправляСт запросы Π½Π° сСрвСры Telegram с ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, это довольно просто (Π½ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ) ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Π₯ΠΎΡ‡Ρƒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ я Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. МнС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ Π΅Π³ΠΎ Π² Π²Π΅Ρ‚ΠΊΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»Π°ΡΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° похоТая Π½Π° мою. РСшСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ github tecknojock, ΠΌΠ½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π΅Ρ‰Π΅ ΠΊΠΎΠΌΡƒ Π½ΠΈΠ±ΡƒΠ΄ΡŒ, поэтому Ρ€Π΅ΡˆΠΈΠ»ΡΡ Π½Π° написаниС Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π°.

Под ΠΊΠ°Ρ‚ΠΎΠΌ вас ΠΆΠ΄Π΅Ρ‚ пошаговая настройка своСго Π·Π΅Ρ€ΠΊΠ°Π»Π° Webogram ΠΈ настройка проксирования Π΅Π³ΠΎ запросов Π΄ΠΎ сСрвСров Telegram с использованиСм nginx.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° я Π²Ρ‹Π±Ρ€Π°Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Ubuntu Server 18.04.3.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ инструкций ΠΏΠΎ настройкС Π΄ΠΎΠΌΠ΅Π½Π° Π² nginx. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π’ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ вас ΡƒΠΆΠ΅ настроСн Π΄ΠΎΠΌΠ΅Π½ с ssl, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ сам сСрвСр, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ планируСтся настройка, ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ сСрвСрам Telegram (Π»ΡŽΠ±Ρ‹ΠΌ Π½Π° ваш вкус способом)

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ip Π΄Π°Π½Π½ΠΎΠ³ΠΎ сСрвСра 10.23.0.3, Π° Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ имя mywebogram.localhost

ΠžΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°ΡΡΡŒ ΠΎΡ‚ этих условностСй, я Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния Π½Π° свои.

Π˜Ρ‚Π°ΠΊ, приступим:

Для запуска Webogram, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ nodejs. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² Ubuntu β€” ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ 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.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ доступ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Webogram Ρ‡Π΅Ρ€Π΅Π· 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:

  • ИзмСняСм ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ location, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы Π½Π° ΠΏΠΎΡ€Ρ‚ 8000, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Webogram
  • ΠšΠΎΡ€Π½Π΅Π²ΠΎΠΉ location Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ basic-auth. Π­Ρ‚ΠΎ чисто символичСский шаг, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ посторонних Π³Π»Π°Π· ΠΈ Π±ΠΎΡ‚ΠΎΠ². (А Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ)
  • ΠšΡƒΡ‡Π° location с proxy_path Π½Π° сСрвСра Telegram β€” это ΠΊΠ°ΠΊ Ρ€Π°Π· наши эндпоинты, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наши запросы

Π’Π°ΠΊ ΠΆΠ΅, создадим Ρ„Π°ΠΉΠ» /etc/nginx/passwd.htpasswd;, Ρ‡Ρ‚ΠΎΠ±Ρ‹ nginx Π±Ρ‹Π»ΠΎ с Ρ‡Π΅ΠΌ ΡΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

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

ПоднимаСм свой инстанс Webogram с проксированиСм Ρ‡Π΅Ρ€Π΅Π· nginx

ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Π΅ΠΌ 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.

ПоднимаСм свой инстанс Webogram с проксированиСм Ρ‡Π΅Ρ€Π΅Π· nginx

НадСюсь, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΅Ρ‰Π΅ ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΡ€ΠΎΠΌΠ΅ мСня.

Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ спасибо всСм, ΠΊΡ‚ΠΎ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π» Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°.

Если Ρƒ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ слоТности ΠΈΠ»ΠΈ я допустил ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ нСточности β€” с ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‡Ρƒ ΠΈ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² коммСнтариях ΠΈΠ»ΠΈ лс.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com