]> Sergey Matveev's repositories - stargrave-blog.git/commit
godlighty заменил lighttpd
authorSergey Matveev <stargrave@stargrave.org>
Sun, 3 Oct 2021 17:02:46 +0000 (20:02 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 3 Oct 2021 20:02:44 +0000 (23:02 +0300)
commitbc087ee7e3be4177e83bc39ae3b1497e336ec5da
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parentda90a0d8af37f51a8b53c3abc6cac3e89bb1d6b0
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 заголовок к нему :-)