{"id":490,"date":"2026-09-23T13:00:00","date_gmt":"2026-09-23T11:00:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/?p=490"},"modified":"2026-10-26T11:17:35","modified_gmt":"2026-10-26T10:17:35","slug":"self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/","title":{"rendered":"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy"},"content":{"rendered":"<p>Inferenz bezeichnet hier das Erzeugen einer Antwort durch das Modell. Ein lokales Sprachmodell kann diese Verarbeitung auf kontrollierter Hardware ausf\u00fchren. Selbsthosting allein garantiert jedoch weder Isolation noch Datenschutzkonformit\u00e4t oder die Leistung eines Clouddienstes. Die lokale Ollama-API besitzt keine eingebaute Authentifizierung. Ein Reverse-Proxy nimmt Anfragen f\u00fcr Ollama entgegen, pr\u00fcft Zugangsdaten und \u00fcbernimmt die verschl\u00fcsselte TLS-Verbindung; Netzwerkgrenzen, ausgehende Verbindungen, Speicherung und Anwendungsverhalten bleiben eigenst\u00e4ndige Aufgaben.<\/p>\n<h2>1. Die tats\u00e4chliche Grenze festlegen<\/h2>\n<p>Das Beispiel ver\u00f6ffentlicht nur einen minimalen Generierungsendpunkt \u00fcber nginx. Loopback bezeichnet die eigene lokale Netzwerkadresse des Rechners, hier 127.0.0.1. Der Proxy lauscht auf der IPv4-Loopback-Adresse des Docker-Hosts, nicht auf s\u00e4mtlichen Netzwerkschnittstellen. F\u00fcr entfernte Zugriffe ist ein gesondert geplanter VPN- oder privater Netzwerkzugang erforderlich. Der Ollama-Container ver\u00f6ffentlicht keinen Port. Docker-Host und Container im selben Backend-Netz k\u00f6nnen Ollama weiterhin direkt erreichen; fremde Anwendungen geh\u00f6ren daher nicht in dieses Netz.<\/p>\n<p>Eine normale Docker-Bridge erlaubt ausgehenden Verkehr. Modell-Downloads funktionieren deshalb, eine vollst\u00e4ndige Netztrennung besteht aber nicht. <code>OLLAMA_NO_CLOUD=1<\/code> deaktiviert Ollama-Cloudfunktionen in unterst\u00fctzenden Versionen; zus\u00e4tzlich muss ein lokales Modell ausgew\u00e4hlt sein. Die Einstellung sperrt keine externen Werkzeuge, Weboberfl\u00e4chen oder Host-Verbindungen. Strikter Offlinebetrieb ben\u00f6tigt kontrollierte Modellbereitstellung und unabh\u00e4ngig durchgesetzte Ausgangssperren.<\/p>\n<figure class=\"lw-diagram\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-490-ollama-20261024.png\" width=\"1120\" height=\"580\" alt=\"Nur der Proxy-Port ist auf Loopback ver\u00f6ffentlicht. Backend-Netzzugang und ausgehender Verkehr ben\u00f6tigen eigene Kontrollen.\"><figcaption>Nur der Proxy-Port ist auf Loopback ver\u00f6ffentlicht. Backend-Netzzugang und ausgehender Verkehr ben\u00f6tigen eigene Kontrollen.<\/figcaption><\/figure>\n<p>Das Netzwerkbeispiel setzt eine aktuelle Docker Engine im normalen NAT-Bridge-Modus voraus. Docker dokumentiert bei Versionen vor 28.0.0 eine Erreichbarkeit von Loopback-Freigaben durch Nachbarrechner; eigene Direct-Routing-Einstellungen ben\u00f6tigen ebenfalls eine gesonderte Pr\u00fcfung.<\/p>\n<h2>2. Container und Zertifikate vorbereiten<\/h2>\n<p>Die folgende <code>compose.yaml<\/code> ist eine Ausgangskonfiguration f\u00fcr CPU-Inferenz, keine vollst\u00e4ndige Unternehmensinstallation. <code>OLLAMA_IMAGE<\/code> und <code>NGINX_IMAGE<\/code> m\u00fcssen gepr\u00fcfte Image-Referenzen enthalten, vorzugsweise unver\u00e4nderliche Digests. Vor der Modellwahl sind Speicherbedarf, Kontextl\u00e4nge, Modelllizenz und Rechnerarchitektur zu pr\u00fcfen.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"yaml\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">YAML<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-yaml\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-attr\">services<\/span>:\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">ollama<\/span>:\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">image<\/span>: ${OLLAMA_IMAGE:?Set a reviewed Ollama image tag or digest}\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">restart<\/span>: unless-stopped\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">environment<\/span>:\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-attr\">OLLAMA_HOST<\/span>: 0.0.0.0:11434\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-attr\">OLLAMA_NO_CLOUD<\/span>: <span class=\"cbb-string\">\"1\"<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">volumes<\/span>:\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-operator\">-<\/span> ollama_data:\/root\/.ollama\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">networks<\/span>:\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-operator\">-<\/span> llm_backend\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">auth_proxy<\/span>:\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">image<\/span>: ${NGINX_IMAGE:?Set a reviewed nginx image tag or digest}\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">restart<\/span>: unless-stopped\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">ports<\/span>:\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-operator\">-<\/span> <span class=\"cbb-string\">\"127.0.0.1:8443:443\"<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">volumes<\/span>:\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-operator\">-<\/span> .\/nginx.conf:\/etc\/nginx\/nginx.conf:ro\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-operator\">-<\/span> .\/certs:\/etc\/nginx\/certs:ro\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-operator\">-<\/span> .\/htpasswd:\/etc\/nginx\/.htpasswd:ro\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">depends_on<\/span>:\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-operator\">-<\/span> ollama\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">networks<\/span>:\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-operator\">-<\/span> llm_backend\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">networks<\/span>:\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">llm_backend<\/span>:\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">driver<\/span>: bridge\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">volumes<\/span>:\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">ollama_data<\/span>:<\/span><\/code><\/pre><\/figure>\n<p>Vor dem Start m\u00fcssen <code>nginx.conf<\/code>, Passwortdatei und Zertifikate vorhanden sein. Das Zertifikat muss <code>llm.example.internal<\/code> als Subject Alternative Name enthalten; der Client ben\u00f6tigt das Zertifikat der ausstellenden CA. <code>htpasswd -cB .\/htpasswd api_user<\/code> erstellt interaktiv eine neue Passwortdatei mit bcrypt. Die Option <code>-c<\/code> \u00fcberschreibt eine vorhandene Datei und entf\u00e4llt deshalb bei sp\u00e4teren Konto\u00e4nderungen. Dateirechte m\u00fcssen nginx das Lesen erlauben und fremden Zugriff begrenzen; private Schl\u00fcssel ben\u00f6tigen entsprechenden Schutz.<\/p>\n<p>NVIDIA-Beschleunigung erfordert zus\u00e4tzlich eine kompatible GPU, Treiber, NVIDIA Container Toolkit und eine GPU-Reservierung im Ollama-Dienst. Quantisierung allein macht CPU-Ausf\u00fchrung nicht GPU-beschleunigt. <code>depends_on<\/code> ordnet den Containerstart, best\u00e4tigt aber keine Modellbereitschaft. Ein neu erzeugtes Backend kann au\u00dferdem einen Proxy-Neustart erfordern, weil diese einfache Upstream-Konfiguration die Dienstadresse beim nginx-Start aufl\u00f6st.<\/p>\n<h2>3. Den Proxy auf die ben\u00f6tigte Operation begrenzen<\/h2>\n<p>Diese <code>nginx.conf<\/code> erlaubt nur authentifizierte POST-Anfragen an <code>\/api\/generate<\/code>. Andere Pfade liefern 404; andere Methoden am erlaubten Pfad werden abgewiesen. Modellverwaltung bleibt au\u00dferhalb der gemeinsamen API. Vor der Weiterleitung entfernt der Proxy die Basic-Zugangsdaten.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"nginx\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">nginx<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-nginx\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">events<\/span> {<span class=\"cbb-keyword\"> worker_connections<\/span> <span class=\"cbb-number\">1024<\/span>; }\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">http<\/span> {\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">    upstream<\/span> ollama_backend {<span class=\"cbb-keyword\"> server<\/span> ollama:11434; }\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">    server<\/span> {\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">        listen<\/span> <span class=\"cbb-number\">443<\/span> ssl;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">        server_name<\/span> llm.example.internal;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">        ssl_certificate<\/span> \/etc\/nginx\/certs\/server.crt;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">        ssl_certificate_key<\/span> \/etc\/nginx\/certs\/server.key;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">        ssl_protocols<\/span> TLSv1.2 TLSv1.3;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">        client_max_body_size<\/span> <span class=\"cbb-number\">1m<\/span>;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">        location<\/span> <span class=\"cbb-operator\">=<\/span> \/api\/generate {\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            limit_except<\/span> POST {<span class=\"cbb-keyword\"> deny<\/span> all; }\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            auth_basic<\/span> <span class=\"cbb-string\">\"Local inference\"<\/span>;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            auth_basic_user_file<\/span> \/etc\/nginx\/.htpasswd;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            proxy_pass<\/span> http:\/\/ollama_backend;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            proxy_http_version<\/span> <span class=\"cbb-number\">1.1<\/span>;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            proxy_set_header<\/span> Host ollama:11434;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            proxy_set_header<\/span> Authorization <span class=\"cbb-string\">\"\"<\/span>;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            proxy_set_header<\/span> Connection <span class=\"cbb-string\">\"\"<\/span>;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            proxy_buffering<\/span> <span class=\"cbb-constant\">off<\/span>;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            proxy_cache<\/span> <span class=\"cbb-constant\">off<\/span>;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            proxy_connect_timeout<\/span> <span class=\"cbb-number\">5s<\/span>;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            proxy_read_timeout<\/span> <span class=\"cbb-number\">600s<\/span>;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">            proxy_send_timeout<\/span> <span class=\"cbb-number\">60s<\/span>;\n<\/span><span class=\"cbb-line\">        }\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">        location<\/span> \/ {<span class=\"cbb-keyword\"> return<\/span> <span class=\"cbb-number\">404<\/span>; }\n<\/span><span class=\"cbb-line\">    }\n<\/span><span class=\"cbb-line\">}<\/span><\/code><\/pre><\/figure>\n<p>Basic Auth authentifiziert ein Dienstkonto, nicht individuelle Dokumentberechtigungen. Starke Zugangsdaten, Kontosperrung, Anfragen- und Parallelit\u00e4tsgrenzen sowie Logaufbewahrung ben\u00f6tigen weiterhin ein Betriebskonzept. Das Anfragelimit von 1 MiB ist beispielhaft und kann f\u00fcr Bilder zu klein sein. Eine kompromittierte berechtigte Anwendung kann weiterhin aufwendige Anfragen stellen oder verf\u00fcgbare Modelle ausw\u00e4hlen.<\/p>\n<h2>4. Die Verbindung mit Zertifikatspr\u00fcfung testen<\/h2>\n<p>Nach dem Dienststart kann <code>docker compose exec ollama ollama pull llama3.1:8b<\/code> ein Modell bereitstellen. Die Kennung bezeichnet ein beispielhaftes lokales Modell und ist keine Hardwareempfehlung. Pull l\u00e4dt ein Modell herunter; <code>ollama run<\/code> startet zus\u00e4tzlich eine interaktive Sitzung. Der folgende curl-Aufruf l\u00e4uft auf dem Docker-Host, fragt das Passwort ab und pr\u00fcft das Serverzertifikat anhand der angegebenen CA:<\/p>\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">curl<\/span> <span class=\"cbb-attr\">--cacert<\/span> .\/certs\/ca.crt   <span class=\"cbb-attr\">--resolve<\/span> llm.example.internal:<span class=\"cbb-number\">8443<\/span>:127.0.0.1   <span class=\"cbb-attr\">--user<\/span> api_user   <span class=\"cbb-attr\">--header<\/span> <span class=\"cbb-string\">'Content-Type: application\/json'<\/span>   <span class=\"cbb-attr\">--data<\/span> <span class=\"cbb-string\">'{\"model\":\"llama3.1:8b\",\"prompt\":\"Return the word test.\",\"stream\":false}'<\/span>   https:\/\/llm.example.internal:<span class=\"cbb-number\">8443<\/span>\/api\/generate<\/span><\/code><\/pre><\/figure>\n<p>Der Testprompt enth\u00e4lt keine Unternehmensdaten. Eine Aufforderung zur Zusammenfassung einer Richtlinie stellt eine fehlende Richtlinie nicht automatisch bereit. Zur Pr\u00fcfung geh\u00f6ren fehlende und falsche Zugangsdaten, eine g\u00fcltige Anfrage, gesperrte Verwaltungspfade, Streaming, ein ausgefallenes Backend und die tats\u00e4chliche Portfreigabe. Syntaxpr\u00fcfungen wie <code>docker compose config<\/code> und <code>nginx -t<\/code> sind Voraussetzungen, aber kein Beleg einer wirksamen Sicherheitsgrenze.<\/p>\n<div class=\"lw-faq\">\n<h2>Fragen und Antworten<\/h2>\n<h3>Funktionieren Open WebUI oder OpenAI-kompatible Clients unver\u00e4ndert?<\/h3>\n<p>Nein. Der minimale Zugang ver\u00f6ffentlicht ausschlie\u00dflich den nativen Generierungsendpunkt. Eine Weboberfl\u00e4che ben\u00f6tigt weitere gepr\u00fcfte Endpunkte und einen Netzwerkweg zum Proxy ohne direkten Backend-Zugang. Benutzername und Passwort innerhalb einer URL sind keine allgemein funktionierende Anbindung und k\u00f6nnen in Konfiguration oder Logs sichtbar werden. OpenAI-kompatible Clients senden \u00fcblicherweise Bearer-Authentifizierung; nginx Basic Auth erwartet ein anderes Schema. Die Anbindung erfordert eine ausdr\u00fcckliche Authentifizierungsanpassung oder einen Zugang mit passender Tokenpr\u00fcfung sowie die ben\u00f6tigten <code>\/v1\/<\/code>-Pfade. API-Kompatibilit\u00e4t umfasst nur einen Teil der Funktionen.<\/p>\n<h3>Begrenzen 600 Sekunden die gesamte Antwort?<\/h3>\n<p>Nein. <code>proxy_read_timeout<\/code> begrenzt die Pause zwischen Lesevorg\u00e4ngen vom Backend. Streaming-Fragmente k\u00f6nnen die Gesamtdauer dar\u00fcber hinaus verl\u00e4ngern; ein generiertes Token entspricht nicht zwingend einem Netzwerk-Lesevorgang. Ohne Streaming k\u00f6nnen Modellladen und Generierung die erste Antwort verz\u00f6gern. Der Verbindungsaufbau hat mit f\u00fcnf Sekunden eine eigene Frist. Passende Timeouts m\u00fcssen unter der vorgesehenen Last ermittelt werden.<\/p>\n<h3>Garantiert Selbsthosting Datenschutz?<\/h3>\n<p>Nein. Zugriffsrechte, Rechtsgrundlage, Aufbewahrung, Sicherungen, Anwendungslogs und externe Integrationen bleiben relevant. Ein lokales Backend entspricht au\u00dferdem nicht dem vollst\u00e4ndigen Produkt ChatGPT. Das Ergebnis ist ein definierter Inferenzdienst mit pr\u00fcfbarem Zugangsweg, keine Garantie f\u00fcr Konformit\u00e4t, Qualit\u00e4t oder vollst\u00e4ndige Isolation.<\/p>\n<\/div><div class=\"lw-quellen\"><h2>Quellen<\/h2><ul><li><a href=\"https:\/\/github.com\/ollama\/ollama\/blob\/main\/README.md\" target=\"_blank\" rel=\"noopener noreferrer\">Ollama: Dokumentation<\/a><\/li><li><a href=\"https:\/\/docs.ollama.com\/faq\" target=\"_blank\" rel=\"noopener noreferrer\">Ollama: h\u00e4ufige Fragen<\/a><\/li><li><a href=\"https:\/\/docs.ollama.com\/api\/authentication\" target=\"_blank\" rel=\"noopener noreferrer\">Ollama: Authentifizierung<\/a><\/li><li><a href=\"https:\/\/docs.ollama.com\/api\/openai-compatibility\" target=\"_blank\" rel=\"noopener noreferrer\">Ollama: API-Kompatibilit\u00e4t<\/a><\/li><li><a href=\"https:\/\/docs.docker.com\/engine\/network\/port-publishing\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker: Ports ver\u00f6ffentlichen<\/a><\/li><li><a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_proxy_module.html\" target=\"_blank\" rel=\"noopener noreferrer\">nginx: Proxy-Modul<\/a><\/li><li><a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_auth_basic_module.html\" target=\"_blank\" rel=\"noopener noreferrer\">nginx: Basic-Authentifizierung<\/a><\/li><li><a href=\"https:\/\/curl.se\/docs\/sslcerts.html\" target=\"_blank\" rel=\"noopener noreferrer\">curl: TLS-Zertifikate pr\u00fcfen<\/a><\/li><li><a href=\"https:\/\/www.edpb.europa.eu\/sme\/be-compliant\/secure-personal-data_en\" target=\"_blank\" rel=\"noopener noreferrer\">EDSA: personenbezogene Daten sch\u00fctzen<\/a><\/li><li><a href=\"https:\/\/httpd.apache.org\/docs\/2.4\/programs\/htpasswd.html\" target=\"_blank\" rel=\"noopener noreferrer\">Apache: htpasswd<\/a><\/li><\/ul><\/div>","protected":false},"excerpt":{"rendered":"<p>Ein lokaler Ollama-Dienst hinter einem nginx-Proxy mit Zugangskontrolle und TLS: Compose-Beispiel f\u00fcr CPU-Betrieb, begrenzte API-Freigabe und Pr\u00fcfung der Netzwerkerreichbarkeit. GPU-Beschleunigung erfordert zus\u00e4tzliche Konfiguration.<\/p>\n","protected":false},"author":1,"featured_media":30126,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92638],"tags":[92406,92205,92337,92418,92211,92340,92235,92071],"class_list":["post-490","post","type-post","status-publish","format-standard","hentry","category-tutorials-de-cloud-ai-de","tag-artificial-intelligence-de","tag-homelab-de","tag-linux-de","tag-llm-de","tag-self-hosting-de","tag-server-administration-de","tag-tutorial-de","tag-web-security-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Ollama hinter Nginx betreiben: Container, GPU-Anbindung, Authentifizierung, API-Zugriff und Pr\u00fcfung von Netzwerk- und TLS-Grenzen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Ollama hinter Nginx betreiben: Container, GPU-Anbindung, Authentifizierung, API-Zugriff und Pr\u00fcfung von Netzwerk- und TLS-Grenzen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-23T11:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T10:17:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-489-490.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy\",\"datePublished\":\"2026-09-23T11:00:00+00:00\",\"dateModified\":\"2026-10-26T10:17:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/\"},\"wordCount\":857,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-489-490.png\",\"keywords\":[\"Artificial Intelligence\",\"Homelab\",\"Linux\",\"LLM\",\"Self-Hosting\",\"Server Administration\",\"Tutorial\",\"Web Security\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/\",\"name\":\"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-489-490.png\",\"datePublished\":\"2026-09-23T11:00:00+00:00\",\"dateModified\":\"2026-10-26T10:17:35+00:00\",\"description\":\"Ollama hinter Nginx betreiben: Container, GPU-Anbindung, Authentifizierung, API-Zugriff und Pr\u00fcfung von Netzwerk- und TLS-Grenzen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-489-490.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-489-490.png\",\"width\":1200,\"height\":630,\"caption\":\"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/cloud-ai-de\\\/tutorials-de-cloud-ai-de\\\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy | Lukas Wojcik","description":"Ollama hinter Nginx betreiben: Container, GPU-Anbindung, Authentifizierung, API-Zugriff und Pr\u00fcfung von Netzwerk- und TLS-Grenzen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/","og_locale":"en_US","og_type":"article","og_title":"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy | Lukas Wojcik","og_description":"Ollama hinter Nginx betreiben: Container, GPU-Anbindung, Authentifizierung, API-Zugriff und Pr\u00fcfung von Netzwerk- und TLS-Grenzen.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-23T11:00:00+00:00","article_modified_time":"2026-10-26T10:17:35+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-489-490.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy","datePublished":"2026-09-23T11:00:00+00:00","dateModified":"2026-10-26T10:17:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/"},"wordCount":857,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-489-490.png","keywords":["Artificial Intelligence","Homelab","Linux","LLM","Self-Hosting","Server Administration","Tutorial","Web Security"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/","name":"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-489-490.png","datePublished":"2026-09-23T11:00:00+00:00","dateModified":"2026-10-26T10:17:35+00:00","description":"Ollama hinter Nginx betreiben: Container, GPU-Anbindung, Authentifizierung, API-Zugriff und Pr\u00fcfung von Netzwerk- und TLS-Grenzen.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-489-490.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-489-490.png","width":1200,"height":630,"caption":"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/cloud-ai-de\/tutorials-de-cloud-ai-de\/self-hosted-large-language-model-llm-mit-ollama-hinter-einem-auth-proxy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=490"}],"version-history":[{"count":9,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/490\/revisions"}],"predecessor-version":[{"id":26464,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/490\/revisions\/26464"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/30126"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=490"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}