Mit dem Einsatz von Hugo, das ausschließlich statischen Dateien generiert, konnte ich die Konfiguration von Nginx für meinen Blog sehr einfach gestalten. Vielleicht hilft das anderen Menschen, die Hugo nutzen möchten.
Die am ersten Tag des Umzugs etwas unglück eingerichteten Weiterleitungen der in WordPress verfügbaren Feeds auf die von Hugo habe ich jetzt in schön geschrieben. (Eine gute Beschreibung der Feeds und deren URLs, die in WordPress automatisch erstellt werden, gibt es hier.)
Somit ist die ganze Konfiguration für den Blog in Nginx relativ einfach geworden.
hinweis
Ich bin kein Profi für die Konfiguration von Nginx. Es funktioniert so bei mir, es gibt aber keine Garantie, dass ich da nicht irgendwelchen Blödsinn veranstaltet habe.
Es könnte z. B. sein, dass es nicht sinnvoll ist, die URLs der Feeds der anderen Formate stumpf nach rss (index.xml) weiterzuleiten. Etwas anderes erzeugt Hugo per Voreinstellung aber nicht und ich will das auch nicht ändern.
Falls ich etwas Dummes getan habe, würde ich mich über einen Hinweis freuen. Danke.
hinweis
Es ist bei solchen Angelegenheiten immer gut, wenn man die Logs des Webservers im Blick hat, vor allem Status 404. Dann fällt auf, wenn etwas nicht funktioniert. Zum Testen von Weiterleitungen nutze ich immer curl, denn es merkt sich keine Zustände zu Weiterleitungen, wie das Browser machen.
server.conf
Die Anmerkungen von mir sind inline, da das besser zum Lesen ist:
server {
[…]# Das ganze drumherum an Konfiguration des Blogs in Nginx (TLS,
# Header, Rootverzeichnis, Logs, …) ist in andere Dateien
# ausgegliedert. Hier ist nur der relevante Teil für alle
# Verzeichnisse und Weiterleitungen.
# Weiterleiten der alten Sitemap URLs auf die neue.
# Es steht zwar auch schon in der robots.txt, man
# kann es aber trotzdem machen.
rewrite^/sitemap.xml.gz[/]?$ /sitemap.xmlpermanent;
rewrite^/wp-sitemap-posts-post-2.xml$ /sitemap.xmlpermanent;
rewrite^/wp-sitemap-posts-post-1.xml$ /sitemap.xmlpermanent;
# Bei neu eingerichteten Weiterleitungen der alten Feeds
# zu den Feeds von Hugo verwende ich den HTTP Status
# Code 302 "Found", sobald es sich als gut herausgestellt
# hat, werde ich es auf 301 "Moved permanently" ändern.
rewrite^/feed/(rss|rss2|rdf|atom)[/]?$ /index.xmlredirect;
rewrite^/category/(.*)/feed/(rss|rss2|rdf|atom)[/]?$ /categories/$1/index.xml redirect;
rewrite^/tag/(.*)/feed/(rss|rss2|rdf|atom)[/]?$ /tags/$1/index.xml redirect;
rewrite^/(feed|rss|rss2|rdf|atom)[/]?$ /index.xmlredirect;
rewrite^/category/(.*)/(feed|rss|rss2|rdf|atom)[/]?$ /categories/$1/index.xml redirect;
rewrite^/tag/(.*)/(feed|rss|rss2|rdf|atom)[/]?$ /tags/$1/index.xml redirect;
# Die Taxonomie ist in meinem Theme leicht anders als
# in WordPress:
rewrite^/tag/(.*)$ /tags/$1 redirect;
rewrite^/category/(.*)$ /categories/$1 redirect;
# Umleitungen zu Umlaut-URLs (siehe unten
# im Blogbeitrag)
rewrite^/categories/mobilitaet(.*)$ /categories/mobilität$1 redirect;
rewrite^/tags/mobilitaet(.*)$ /tags/mobilität$1 redirect;
rewrite^/tags/muell(.*)$ /tags/müll$1 redirect;
rewrite^/tags/muellsammeln(.*)$ /tags/müllsammeln$1 redirect;
[…]# Habe das Verzeichnis der WordPress-Installation 1 zu 1
# übernommen. Dort landen per Voreinstellung alle hochgeladenen
# Dateien. Das Verzeichnis bleibt, da noch viele Beiträge
# hier in Hugo das originale HTML von WordPress enthalten
# und eingebettete Bilder von dort geladen werden und/oder
# dorthin verweisen.
location/wp-content/ {
alias/pfad-zu/alten-wordpress-dateien/;
includepfad-zu/static_files.conf;
}
# Alle Dateien bekommen eine maximal mögliche Lebenszeit.
# Siehe nächster Abschnitt, wo die inkludierte Datei zu sehen ist.
location/ {
includepfad-zu/static_files.conf;
}
}
Auch hier sind Anmerkungen wegen der Lesbarkeit inline:
1if($request_uri ~*".(jpg|jpeg|gif|zip|gz|avi|png|mpeg|mpg|txt|mp4|woff|woff2|ttf|eot)$") {
2expires90d;
3 }
4 5 6 7# Das sind die von Hugo erstellen kleinen Varianten
8# von Bildern für Thumbnails.
9if($request_uri ~*".*hu[a-z0-9]{32}.*resize.*$") {
10expires300d;
11break;
12 }
13141516# Das Verzeichnis, in dem JavaScript Assets landen.
17# Sobald sich die Ursprungsdatei ändert, ändert sich
18# auch der Hashwert im Namen, sodass man eine sehr
19# lange Lebenszeit angeben kann.
20if($request_uri ~*"^/js/.*$") {
21expires300d;
22break;
23 }
24252627# Hier gilt das selbe wie auch für die JavaScript
28# Assets oben drüber.
29if($request_uri ~*"^/css/.*$") {
30expires300d;
31break;
32 }
33343536# Eingebundenes CSS und JS für Dinge, die
37# ich relativ oft verändern möchte. Auch Favicons
38# möchte ich relativ schnell ändern können.
39if($request_uri ~*".(css|ico|js)$") {
40expires48h;
41 }
Das wars. Für mich funktioniert das so gut. Anmerkungen bitte per E-Mail.
Es gibt keine Kommentare mehr hier im Blog. Du kannst Anmerkungen zu den Inhalten entweder hier per E-Mail schreiben oder auf SocialMedia. Wenn ich hier Hinweise auf Fehler bekomme, werde ich das gerne in den Blogbeitrag einarbeiten. Was du mir schreibst, bleibt ansonsten privat.
Kommentare
Anmerkungen?
Anmerkung zum Blogbeitrag per E-Mail
Hier klicken, um mir eine E-Mail zu diesem Beitrag zu schicken
Es gibt keine Kommentare mehr hier im Blog. Du kannst Anmerkungen zu den Inhalten entweder hier per E-Mail schreiben oder auf SocialMedia. Wenn ich hier Hinweise auf Fehler bekomme, werde ich das gerne in den Blogbeitrag einarbeiten. Was du mir schreibst, bleibt ansonsten privat.