Свой мини-Nginx на неблокирующих сокетах и с асинхронным вводом/выводом
git clone https://github.com/evsyukoov/WebServ.git
cd WebServ && make
./webserv ./conf/main.conf
Конфиги лежат в папке conf и путь к конфигу передается бинарнику при запуске
Синтаксис конфига взят из nginx.
Тут распологается конфигурация одного сервера на указанном порту
Нужно указать порт на котором будет слушать сервер
Отвечает за ту страницу которую сервер будет отдавать клиенту в случае ошибки.
Если директива не указана будет отдаваться страница ошибки по дефолту.
Аналогично одноименной директиве nginx в случае запроса клиента по указанному адресу возьмет root и index из данного location.
см. Nginx
см. Nginx
Список доступных методов в данном локейшне, если директива отсутствует допустимы все методы.
autoindex on/off - включить/выключить индексацию папок.
Максимальный размер тела которое клиент может отправить по данному location
В случае пост запроса на файл с таким расширением сервер отдает тело запроса на обработку
в дочерний процесс (CGI)
Путь к скрипту который запустится в дочернем процессе. В случае если скрипт является интерпретируемой
программой указывается интерпретатор (например /usr/bin/php)
Поддерживаемые методы: GET, HEAD, POST, PUT
В реализации сервера используются неблокирующие сокеты и функция select(), в которую передается
текущий набор клиентских сокетов.
Мониторинг доступности сокета на чтение/запись производится в select().
Обработка запросов клиентов происходит асинхронно.
Тело может запроса принимается стандартно, если есть Content-Length хедер или чанками
если есть Transfer-Encoding: chunked