Проброс webhook через VPS на localhost
В предыдущей статье я показал пример использования сервиса ngrok. Но если есть свой VPS с настроенным доменом и SSL-сертификатом, для тестовых webhook-запросов удобнее использовать его.
Настройка VPS, домена и SSL в данной заметке не рассматривается.
Настройка Nginx на VPS
Добавляем в Nginx отдельный location, который принимает запрос по нужному пути и проксирует его на порт SSH-туннеля.
server {
server_name your-website.ru www.your-website.ru;
root /var/www/laravel;
index index.php;
location /webhook {
proxy_pass http://localhost:5050; # Перенаправляем на порт туннеля
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# ...
}
Проверяем конфиг и перезагружаем Nginx:
$ nginx -t && service nginx reload nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Обратный SSH-туннель
На своей локальной машине открываем обратный туннель:
$ ssh -R 5050:localhost:3000 -N your-user@your-vps-ip
Соединение не закрываем.
Проверка
На VPS проверяем, что порт туннеля доступен:
$ curl -Is http://localhost:5050 | head -n 1 HTTP/1.1 200 OK
Теперь тестируем публичный webhook.
$ curl -X POST https://your-website.ru/webhook \
-H "Content-Type: application/json" \
-d '{"data":"test"}'
Важно: URL должен совпадать с
locationв Nginx.
На локальной машине приложение должно получить запрос. Если возвращается ошибка, например 502, смотрим логи Nginx:
$ sudo tail -f /var/log/nginx/error.log
После тестирования временный
locationнужно закрыть или удалить.