[О блоге] [наверх] [пред] [2021-10-03 20:02:46+03:00] [bc087ee7e3be4177e83bc39ae3b1497e336ec5da]
Темы: [go][web]

godlighty заменил lighttpd

http://www.godlighty.stargrave.org/
В 6f81b22ce2138552e3258cac5a04f6221f21cd7f брякнул про то, что вообще
написать свой web-сервер, а не трахаться с nginx/lighttpd, которые ещё и
зависят от мерзкого OpenSSL.

Сказано -- сделано! Полтора дня и web-сервер *моей* мечты готов. Я
всегда говорил что Go это не только для Web-а, но, похоже, фактом того
что я полностью заменил свои web-серверы и даже HTTP/HTTPS-клиенты/прокси
(4d83a1e341b4ef615a0e9c5cfd6db75b757ef22e) на Go реализации, которые по
максимуму используют родные возможности библиотек, только подтвердил это.

TLS, TLS 1.3, session resumption, ГОСТ криптография (с моим gostls13),
SNI, HTTP/1.1, HTTP/2, ETag, Last-Modified, If-* preconditions, Range,
gzip -- всё это из коробки или работает или имеет помощников. Directory
listing наверное самое здоровое что пришлось дописать. Из внешних
зависимостей использовал одну для Zstandard сжатия (проверил напротив
Wget2), одну для human-readable отображения размеров файлов,
golang.org/x зависимости для ограничения соединений, узнавания ctime и
WebDAV.

Но конфигурация вшита в сам сервер. Она представляет исходный код. Но
это не один здоровый handler, а вполне себе аккуратные небольшие
функции, которые по сути только специфику обрабатывают (redirect, CGI),
а в остальном, так как статические файлы, то просто задают словарики с
несколькими ключами настройки. Например добавление знания о сайте
godlighty, включая TLS сертификаты, заняло ровно одну строчку. Только
файлы с описанием расширения и MIME типов у меня сделаны в виде
файликов, а не Go-кода, просто чтобы их, если что, было бы проще
переиспользовать в других местах, ибо корректность типов я там дотошно
корректно старался делать.

Вообще я думал что будет всё *гораздо* геморройнее сделать и тем более
конфигурировать. Но оказалось и проще и красивее, сам удивлён. А ведь
всё началось с того, что я хотел проверять наличие .meta4 файла и
вставлять Link заголовок к нему :-)

    [оставить комментарий]