Предположим нам понадобилось обрабатывать трафик из интернета на локальном компьютере, при этом у нас нет публичного IP, но есть выделенный сервер, где крутится наш сайт-визитка. Причин для того, чтобы забрать трафик на локальную машину, может быть много. Возможно одного ядра и 512 мегабайт оперативной памяти на нашем сервере не хватает для необходимых нам операций или мы хостим "ботов", которые используют веб-хуки на локальном компьютере. Либо у нас есть IoT сервер, который таким образом будет общаться с внешним миром.
На нашем выделенном сервере мы должны использовать Nginx для удобства. Но не обязательно. В данной статье будет описан сценарий, когда у нас Nginx
1. Прописываем в конфиг следующий блок
server { server_name ; listen 80; location /proxy_to_local { proxy_set_header X-Forwarded-For $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:3001; } }
2. Теперь нам нужно настроить подключение локальной машины к серверу через SSH. Добавляем наш публичный ключ в authorized_keys.
3. Запускаем SSH клиента на локальной машине слудеющей командой:
localhost $ ssh -vnNT -R 3001:127.0.0.1:3002 <hosting> debug1: Remote connections from LOCALHOST:3001 forwarded to local address 127.0.0.1:3002 debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: pledge: filesystem full
Теперь мы забираем трафик с 3001 порта сервера на 3002 порт локальной машины и можем делать с ним всё что нам нужно.