All streams
Search
Write a publication
Pull to refresh
9
0
John Sitnikov @ecubear

C++/C#/MCU Developer

Send message

Вебсервер на bash+inetd

Reading time1 min
Views1.3K
Понадобилось мне отвечать на http запросы извне и неким образом их обрабатывать (подключались к терминалам экспресс-оплаты). Первое решение было на Nginx+FastCGI(PHP), что было несколько неоправданно тяжеловесно. И тут меня посетили старые воспоминания и благодаря ru_root в ЖЖ и Гуглю было сделано следующее:

[root@mysql-02 /etc]# cat services | grep freecashpayment
freecashpayment 433/tcp
freecashpayment 433/udp

Этим мы объяснили серверу, что на порту 433 у нас теперь живет сервис по фамилии freecashpayment

[root@mysql-02 /etc]# cat inetd.conf | grep freecashpayment
freecashpayment stream tcp nowait root /usr/home/firefly/freecashpayment.sh freecashpayment.sh

Так мы заставляем слушать порт 433 и отвечать на нем скриптом freecashpayment.sh

[root@mysql-02 /usr/home/firefly]# cat freecashpayment.sh
#!/usr/local/bin/bash
read request
while /usr/bin/true; do
read header
[ "$header" == $'\r' ] && break;
done
url="${request#GET }"
url="${url% HTTP/*}"
echo $url


В результате в скрипте в переменной $url у нас имееются все параметры, которые нам прислали в GET-запросе. echo же нам выведет все что надо в ответ.

Мы счааааасливы :)

Information

Rating
Does not participate
Location
Волгоград, Волгоградская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Hardware Engineer
Lead
C#
.NET Core
.NET
Linux
PHP
C++
Software development
Visual Studio
MySQL
English