Skip to content

Свой мини-Nginx на неблокирующих сокетах и с асинхронным вводом/выводом

Notifications You must be signed in to change notification settings

evsyukoov/WebServ

Repository files navigation

WebServ

Свой мини-Nginx на неблокирующих сокетах и с асинхронным вводом/выводом

Установка и запуск (Мак ос)

git clone https://github.com/evsyukoov/WebServ.git

cd WebServ && make

./webserv ./conf/main.conf

Конфигурационный файл

Конфиги лежат в папке conf и путь к конфигу передается бинарнику при запуске

Возожности конфига

Синтаксис конфига взят из nginx.

Директива Server

Тут распологается конфигурация одного сервера на указанном порту

Директива listen

Нужно указать порт на котором будет слушать сервер

Директива default_error_page

Отвечает за ту страницу которую сервер будет отдавать клиенту в случае ошибки.

Если директива не указана будет отдаваться страница ошибки по дефолту.

Директива location

Аналогично одноименной директиве nginx в случае запроса клиента по указанному адресу возьмет root и index из данного location.

Директива root

см. Nginx

Директива index

см. Nginx

Директива limit_except

Список доступных методов в данном локейшне, если директива отсутствует допустимы все методы.

Директива autoindex

autoindex on/off - включить/выключить индексацию папок.

Директива max_body

Максимальный размер тела которое клиент может отправить по данному location

Директива cgi

В случае пост запроса на файл с таким расширением сервер отдает тело запроса на обработку

в дочерний процесс (CGI)

Директива scrypt

Путь к скрипту который запустится в дочернем процессе. В случае если скрипт является интерпретируемой

программой указывается интерпретатор (например /usr/bin/php)

Методы

Поддерживаемые методы: GET, HEAD, POST, PUT

Краткая справка по особенностям реализации ядра сервера

В реализации сервера используются неблокирующие сокеты и функция select(), в которую передается

текущий набор клиентских сокетов.

Мониторинг доступности сокета на чтение/запись производится в select().

Обработка запросов клиентов происходит асинхронно.

Тело может запроса принимается стандартно, если есть Content-Length хедер или чанками

если есть Transfer-Encoding: chunked

About

Свой мини-Nginx на неблокирующих сокетах и с асинхронным вводом/выводом

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published