Първоначално конфигурацията на моя блог беше планирана като чисто IPv6 проект чрез WireGuard, тъй като всичко се хоства на домашен сървър (между другото, безплатни IPv6 адреси можете да получите от route64.org). За да подобря достъпността, добавих външно IPv4 прокси (благодаря на @Larvitz).
При това обаче веднага възникнаха проблеми със SSL: Тъй като първоначално и A, и AAAA записите минаваха през проксито, валидирането на Let's Encrypt на моя сървър се провали.
Решението: „IPv6 хакът“
Решението беше изрично да насоча AAAA записа директно към WireGuard IP адреса на моя сървър, вместо да го прекарвам и него през проксито.
- Домейн:
blog.burningboard.org
- A-запис (Прокси):
194.28.98.217
- AAAA-запис (Сървър):
2a11:6c7:f05:a8::2 (WireGuard)
Чрез този директен AAAA запис към моя WireGuard IP адрес, Let’s Encrypt продължава да достига до сървъра ми директно чрез IPv6 (тъй като AAAA записът се приоритизира по подразбиране) и издава SSL сертификата. IPv4 трафикът се препраща към мен криптиран от проксито.
Финалната конфигурация
За да може комуникацията да работи гладко, трябваше да коригираме Caddy сървърите:
1. На моя сървър (NixOS, blog.nix)
За да пристигат правилно реалните IP адреси на посетителите и да не бъдат презаписани от IP адреса на проксито, то трябва да бъде маркирано като доверено:
services.caddy.globalConfig = ''
servers {
trusted_proxies static 2a06:9801:1c:1000::10
}
'';
2. На външното прокси (Caddy)
За да може проксито да се свързва правилно с моя сървър чрез HTTPS, то трябва да изпраща името на хоста (SNI):
reverse_proxy [https://[2a11:6c7:f05:a8::2]:443](https://[2a11:6c7:f05:a8::2]:443) {
header_up Host {host}
transport http {
tls_server_name blog.burningboard.org
}
}
Блогът вече е достъпен чрез IPv4 и IPv6, сигурно криптиран, а домашният ми IP адрес остава скрит! 🚀
Най-важното на първо място: Обичайните Markdown файлове остават основата – аз просто съм голям фен на това лесно решение. Но под капака се случиха много неща:
Промених доста неща по настройките:
📂 MD файлове: Структурата на блога остава проста, базирана на Markdown.
🌍 По-глобален от всякога: Моят блог вече поддържа преводи на 43 езика. Да, включително клингонски! 🖖 (Qapla'!)

Планът беше за напълно автоматичен превод в реално време, базиран на разпознаването на езика на браузъра. Спойлер: Проработи само частично. Човек забелязва: Изкуственият интелект е впечатляващ, но все още не е точно „там“, където бихме искали да бъде.
Решението: Сега просто превеждам всяка публикация предварително на всички зададени езици, което е и значително по-добре за търсачките (SEO). Ако автоматичното разпознаване не проработи, можете ръчно да зададете предпочитания от вас език чрез иконата на земното кълбо, който след това се запазва съвсем лесно чрез бисквитка (cookie).
Преводите вече се извършват с Gemini 3 Flash, което дава изненадващо добри резултати. Въпреки това, човек трябва да следи внимателно работата на AI: При първото масово изпълнение погрешно бяха преведени и таговете, което, разбира се, не беше планирано така.
Кодът все още е наличен (просто ми пишете, ако проявявате интерес) 👍 Имайте предвид обаче, че системата вече изисква собствен Gemini API ключ 🔑.
Набързо прехвърлих блога си от WriteFreely към собствена разработка: MD-Blog (MD, разбира се, означава Markdown). Поводът беше неуспешна актуализация на старата система – но в крайна сметка това се оказа перфектният тласък да опростя всичко радикално и да получа пълен контрол върху дизайна.
В основата са обикновени Markdown файлове в папка data/, които се преобразуват в модерен HTML в реално време. Резултатът е светкавично бърз, работи без база данни и благодарение на собствената дизайн система (включително тъмен режим) сега изглежда точно така, както си го представях. Дори модерен бутон за споделяне в Mastodon вече е интегриран директно.
Ако проявявате интерес към кода или олекотената конфигурация, не се колебайте да се свържете с мен в Mastodon!