[{"data":1,"prerenderedAt":946},["ShallowReactive",2],{"content-query-nAeabJXk8z":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"layout":10,"crumb":11,"summary":12,"group":13,"order":14,"port":15,"updated":16,"cta":17,"related":25,"faq":44,"body":60,"_type":939,"_id":940,"_source":941,"_file":942,"_stem":943,"_extension":944,"sitemap":945},"/localhost/11434","localhost",false,"","localhost:11434: Ollama's default port and API explained","Ollama's default port is 11434. How to check the Ollama API on localhost:11434, change it with OLLAMA_HOST, fix CORS with OLLAMA_ORIGINS and expose it safely.","reference","localhost:11434","Ollama local LLM API (OLLAMA_HOST, OLLAMA_ORIGINS).","Data, AI and automation",11,11434,"2026-10-28",{"eyebrow":18,"title":19,"text":20,"to":21,"label":22,"secondaryTo":23,"secondaryLabel":24},"Webhook Relay Tunnels","Reach your Ollama box over HTTPS, carefully","relay connect can give a home GPU machine a stable HTTPS URL with no inbound ports or public IP. Ollama has no authentication of its own, so tunnel an authenticating reverse proxy in front of 11434, never the bare API.","/tunnels/","Explore Tunnels","/blog/self-hosted-ai-agent-webhooks/","Self-hosted AI agent webhooks",[26,29,32,35,38,41],{"title":27,"to":28},"localhost:8888 (Jupyter)","/localhost/8888/",{"title":30,"to":31},"localhost:5678 (n8n)","/localhost/5678/",{"title":33,"to":34},"127.0.0.1 and the loopback address","/localhost/127-0-0-1/",{"title":36,"to":37},"401 vs 403","/http-errors/401-vs-403/",{"title":39,"to":40},"What is a reverse proxy?","/glossary/reverse-proxy/",{"title":42,"to":43},"What is a tunnel?","/glossary/tunnel/",[45,48,51,54,57],{"q":46,"a":47},"What is Ollama's default port?","Ollama listens on port 11434. By default it binds to 127.0.0.1:11434, so the API at http://localhost:11434 is only reachable from the same machine.",{"q":49,"a":50},"How do I check that Ollama is running?","Open http://localhost:11434 in a browser or run curl http://localhost:11434. A running server answers with the text Ollama is running. curl http://localhost:11434/api/tags lists the models you have pulled.",{"q":52,"a":53},"How do I make Ollama listen on all interfaces?","Set the OLLAMA_HOST environment variable to 0.0.0.0 or 0.0.0.0:11434 for the Ollama server process and restart it. On Linux add it to the systemd service with systemctl edit ollama.service, on macOS use launchctl setenv OLLAMA_HOST 0.0.0.0 and restart the app, and on Windows set it as a user environment variable.",{"q":55,"a":56},"What is OLLAMA_ORIGINS?","OLLAMA_ORIGINS is a comma-separated list of extra browser origins allowed to call the Ollama API. Set it when a web app or browser extension running on another origin gets blocked by CORS. It controls browsers only and is not authentication.",{"q":58,"a":59},"Is it safe to expose Ollama to the internet?","Not on its own. Ollama has no built-in authentication, so anyone who can reach port 11434 can run your models, pull or delete models, and use your GPU. Put an authenticating reverse proxy in front of it, or keep it private and reach it over SSH or a VPN.",{"type":61,"children":62,"toc":932},"root",[63,102,109,114,232,307,320,326,443,449,467,637,664,709,715,720,752,771,777,789,846,886,907,926],{"type":64,"tag":65,"props":66,"children":67},"element","p",{},[68,92,94,100],{"type":64,"tag":69,"props":70,"children":71},"strong",{},[72,75,82,84,90],{"type":73,"value":74},"text","Ollama's default port is 11434: the Ollama server listens on ",{"type":64,"tag":76,"props":77,"children":79},"code",{"className":78},[],[80],{"type":73,"value":81},"127.0.0.1:11434",{"type":73,"value":83}," and serves its REST API at ",{"type":64,"tag":76,"props":85,"children":87},{"className":86},[],[88],{"type":73,"value":89},"http://localhost:11434",{"type":73,"value":91},".",{"type":73,"value":93}," Open that URL and a running server replies with the plain text ",{"type":64,"tag":76,"props":95,"children":97},{"className":96},[],[98],{"type":73,"value":99},"Ollama is running",{"type":73,"value":101},". If the connection is refused, the Ollama server isn't running; if it works locally but not from another machine, it's still bound to loopback.",{"type":64,"tag":103,"props":104,"children":106},"h2",{"id":105},"what-runs-on-port-11434",[107],{"type":73,"value":108},"What runs on port 11434",{"type":64,"tag":65,"props":110,"children":111},{},[112],{"type":73,"value":113},"Only Ollama. The useful endpoints:",{"type":64,"tag":115,"props":116,"children":117},"table",{},[118,137],{"type":64,"tag":119,"props":120,"children":121},"thead",{},[122],{"type":64,"tag":123,"props":124,"children":125},"tr",{},[126,132],{"type":64,"tag":127,"props":128,"children":129},"th",{},[130],{"type":73,"value":131},"Endpoint",{"type":64,"tag":127,"props":133,"children":134},{},[135],{"type":73,"value":136},"What it does",{"type":64,"tag":138,"props":139,"children":140},"tbody",{},[141,164,181,198,215],{"type":64,"tag":123,"props":142,"children":143},{},[144,154],{"type":64,"tag":145,"props":146,"children":147},"td",{},[148],{"type":64,"tag":76,"props":149,"children":151},{"className":150},[],[152],{"type":73,"value":153},"GET /",{"type":64,"tag":145,"props":155,"children":156},{},[157,159],{"type":73,"value":158},"Health check, returns ",{"type":64,"tag":76,"props":160,"children":162},{"className":161},[],[163],{"type":73,"value":99},{"type":64,"tag":123,"props":165,"children":166},{},[167,176],{"type":64,"tag":145,"props":168,"children":169},{},[170],{"type":64,"tag":76,"props":171,"children":173},{"className":172},[],[174],{"type":73,"value":175},"GET /api/tags",{"type":64,"tag":145,"props":177,"children":178},{},[179],{"type":73,"value":180},"Lists pulled models",{"type":64,"tag":123,"props":182,"children":183},{},[184,193],{"type":64,"tag":145,"props":185,"children":186},{},[187],{"type":64,"tag":76,"props":188,"children":190},{"className":189},[],[191],{"type":73,"value":192},"POST /api/generate",{"type":64,"tag":145,"props":194,"children":195},{},[196],{"type":73,"value":197},"Single-prompt completion",{"type":64,"tag":123,"props":199,"children":200},{},[201,210],{"type":64,"tag":145,"props":202,"children":203},{},[204],{"type":64,"tag":76,"props":205,"children":207},{"className":206},[],[208],{"type":73,"value":209},"POST /api/chat",{"type":64,"tag":145,"props":211,"children":212},{},[213],{"type":73,"value":214},"Chat completion",{"type":64,"tag":123,"props":216,"children":217},{},[218,227],{"type":64,"tag":145,"props":219,"children":220},{},[221],{"type":64,"tag":76,"props":222,"children":224},{"className":223},[],[225],{"type":73,"value":226},"POST /v1/chat/completions",{"type":64,"tag":145,"props":228,"children":229},{},[230],{"type":73,"value":231},"OpenAI-compatible API",{"type":64,"tag":233,"props":234,"children":238},"pre",{"className":235,"code":236,"language":237,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark","curl http://localhost:11434/api/chat -d '{\n  \"model\": \"llama3.2\",\n  \"messages\": [{ \"role\": \"user\", \"content\": \"Hello\" }],\n  \"stream\": false\n}'\n","bash",[239],{"type":64,"tag":76,"props":240,"children":241},{"__ignoreMap":7},[242,271,280,289,298],{"type":64,"tag":243,"props":244,"children":247},"span",{"class":245,"line":246},"line",1,[248,254,260,266],{"type":64,"tag":243,"props":249,"children":251},{"style":250},"--shiki-default:#B392F0",[252],{"type":73,"value":253},"curl",{"type":64,"tag":243,"props":255,"children":257},{"style":256},"--shiki-default:#9ECBFF",[258],{"type":73,"value":259}," http://localhost:11434/api/chat",{"type":64,"tag":243,"props":261,"children":263},{"style":262},"--shiki-default:#79B8FF",[264],{"type":73,"value":265}," -d",{"type":64,"tag":243,"props":267,"children":268},{"style":256},[269],{"type":73,"value":270}," '{\n",{"type":64,"tag":243,"props":272,"children":274},{"class":245,"line":273},2,[275],{"type":64,"tag":243,"props":276,"children":277},{"style":256},[278],{"type":73,"value":279},"  \"model\": \"llama3.2\",\n",{"type":64,"tag":243,"props":281,"children":283},{"class":245,"line":282},3,[284],{"type":64,"tag":243,"props":285,"children":286},{"style":256},[287],{"type":73,"value":288},"  \"messages\": [{ \"role\": \"user\", \"content\": \"Hello\" }],\n",{"type":64,"tag":243,"props":290,"children":292},{"class":245,"line":291},4,[293],{"type":64,"tag":243,"props":294,"children":295},{"style":256},[296],{"type":73,"value":297},"  \"stream\": false\n",{"type":64,"tag":243,"props":299,"children":301},{"class":245,"line":300},5,[302],{"type":64,"tag":243,"props":303,"children":304},{"style":256},[305],{"type":73,"value":306},"}'\n",{"type":64,"tag":65,"props":308,"children":309},{},[310,312,318],{"type":73,"value":311},"OpenAI SDKs work by setting the base URL to ",{"type":64,"tag":76,"props":313,"children":315},{"className":314},[],[316],{"type":73,"value":317},"http://localhost:11434/v1",{"type":73,"value":319}," and any non-empty API key.",{"type":64,"tag":103,"props":321,"children":323},{"id":322},"fix-localhost11434-refused-to-connect",[324],{"type":73,"value":325},"Fix \"localhost:11434 refused to connect\"",{"type":64,"tag":327,"props":328,"children":329},"ol",{},[330,365,386,419],{"type":64,"tag":331,"props":332,"children":333},"li",{},[334,339,341,347,349,355,357,363],{"type":64,"tag":69,"props":335,"children":336},{},[337],{"type":73,"value":338},"Start the server.",{"type":73,"value":340}," The desktop app on macOS and Windows runs it in the background; on Linux it's usually the ",{"type":64,"tag":76,"props":342,"children":344},{"className":343},[],[345],{"type":73,"value":346},"ollama",{"type":73,"value":348}," systemd service (",{"type":64,"tag":76,"props":350,"children":352},{"className":351},[],[353],{"type":73,"value":354},"systemctl status ollama",{"type":73,"value":356},"). Or run ",{"type":64,"tag":76,"props":358,"children":360},{"className":359},[],[361],{"type":73,"value":362},"ollama serve",{"type":73,"value":364}," in a terminal.",{"type":64,"tag":331,"props":366,"children":367},{},[368,377,379,384],{"type":64,"tag":69,"props":369,"children":370},{},[371],{"type":64,"tag":76,"props":372,"children":374},{"className":373},[],[375],{"type":73,"value":376},"address already in use",{"type":73,"value":378}," when you run ",{"type":64,"tag":76,"props":380,"children":382},{"className":381},[],[383],{"type":73,"value":362},{"type":73,"value":385}," means the app or service is already running. That's fine: use it, or stop it first.",{"type":64,"tag":331,"props":387,"children":388},{},[389,394,396,401,403,409,411,417],{"type":64,"tag":69,"props":390,"children":391},{},[392],{"type":73,"value":393},"From Docker.",{"type":73,"value":395}," A container's ",{"type":64,"tag":76,"props":397,"children":399},{"className":398},[],[400],{"type":73,"value":5},{"type":73,"value":402}," is the container. On Docker Desktop, call ",{"type":64,"tag":76,"props":404,"children":406},{"className":405},[],[407],{"type":73,"value":408},"http://host.docker.internal:11434",{"type":73,"value":410},". On Linux, add ",{"type":64,"tag":76,"props":412,"children":414},{"className":413},[],[415],{"type":73,"value":416},"--add-host=host.docker.internal:host-gateway",{"type":73,"value":418}," and set Ollama to listen on more than loopback.",{"type":64,"tag":331,"props":420,"children":421},{},[422,427,429,435,437,442],{"type":64,"tag":69,"props":423,"children":424},{},[425],{"type":73,"value":426},"Open WebUI and similar UIs",{"type":73,"value":428}," need ",{"type":64,"tag":76,"props":430,"children":432},{"className":431},[],[433],{"type":73,"value":434},"OLLAMA_BASE_URL",{"type":73,"value":436}," (or their equivalent) pointing at an address the container can reach, not ",{"type":64,"tag":76,"props":438,"children":440},{"className":439},[],[441],{"type":73,"value":5},{"type":73,"value":91},{"type":64,"tag":103,"props":444,"children":446},{"id":445},"change-the-port-or-listen-address-ollama_host",[447],{"type":73,"value":448},"Change the port or listen address: OLLAMA_HOST",{"type":64,"tag":65,"props":450,"children":451},{},[452,458,460,465],{"type":64,"tag":76,"props":453,"children":455},{"className":454},[],[456],{"type":73,"value":457},"OLLAMA_HOST",{"type":73,"value":459}," sets where the server binds. Set it for the ",{"type":64,"tag":69,"props":461,"children":462},{},[463],{"type":73,"value":464},"server process",{"type":73,"value":466},", then restart it:",{"type":64,"tag":233,"props":468,"children":470},{"className":235,"code":469,"language":237,"meta":7,"style":7},"# one-off\nOLLAMA_HOST=0.0.0.0:11434 ollama serve\n\n# Linux systemd service\nsudo systemctl edit ollama.service\n#   [Service]\n#   Environment=\"OLLAMA_HOST=0.0.0.0:11434\"\nsudo systemctl restart ollama\n\n# macOS app\nlaunchctl setenv OLLAMA_HOST \"0.0.0.0:11434\"   # then quit and reopen Ollama\n",[471],{"type":64,"tag":76,"props":472,"children":473},{"__ignoreMap":7},[474,483,512,521,529,552,561,570,592,600,609],{"type":64,"tag":243,"props":475,"children":476},{"class":245,"line":246},[477],{"type":64,"tag":243,"props":478,"children":480},{"style":479},"--shiki-default:#6A737D",[481],{"type":73,"value":482},"# one-off\n",{"type":64,"tag":243,"props":484,"children":485},{"class":245,"line":273},[486,491,497,502,507],{"type":64,"tag":243,"props":487,"children":489},{"style":488},"--shiki-default:#E1E4E8",[490],{"type":73,"value":457},{"type":64,"tag":243,"props":492,"children":494},{"style":493},"--shiki-default:#F97583",[495],{"type":73,"value":496},"=",{"type":64,"tag":243,"props":498,"children":499},{"style":256},[500],{"type":73,"value":501},"0.0.0.0:11434",{"type":64,"tag":243,"props":503,"children":504},{"style":250},[505],{"type":73,"value":506}," ollama",{"type":64,"tag":243,"props":508,"children":509},{"style":256},[510],{"type":73,"value":511}," serve\n",{"type":64,"tag":243,"props":513,"children":514},{"class":245,"line":282},[515],{"type":64,"tag":243,"props":516,"children":518},{"emptyLinePlaceholder":517},true,[519],{"type":73,"value":520},"\n",{"type":64,"tag":243,"props":522,"children":523},{"class":245,"line":291},[524],{"type":64,"tag":243,"props":525,"children":526},{"style":479},[527],{"type":73,"value":528},"# Linux systemd service\n",{"type":64,"tag":243,"props":530,"children":531},{"class":245,"line":300},[532,537,542,547],{"type":64,"tag":243,"props":533,"children":534},{"style":250},[535],{"type":73,"value":536},"sudo",{"type":64,"tag":243,"props":538,"children":539},{"style":256},[540],{"type":73,"value":541}," systemctl",{"type":64,"tag":243,"props":543,"children":544},{"style":256},[545],{"type":73,"value":546}," edit",{"type":64,"tag":243,"props":548,"children":549},{"style":256},[550],{"type":73,"value":551}," ollama.service\n",{"type":64,"tag":243,"props":553,"children":555},{"class":245,"line":554},6,[556],{"type":64,"tag":243,"props":557,"children":558},{"style":479},[559],{"type":73,"value":560},"#   [Service]\n",{"type":64,"tag":243,"props":562,"children":564},{"class":245,"line":563},7,[565],{"type":64,"tag":243,"props":566,"children":567},{"style":479},[568],{"type":73,"value":569},"#   Environment=\"OLLAMA_HOST=0.0.0.0:11434\"\n",{"type":64,"tag":243,"props":571,"children":573},{"class":245,"line":572},8,[574,578,582,587],{"type":64,"tag":243,"props":575,"children":576},{"style":250},[577],{"type":73,"value":536},{"type":64,"tag":243,"props":579,"children":580},{"style":256},[581],{"type":73,"value":541},{"type":64,"tag":243,"props":583,"children":584},{"style":256},[585],{"type":73,"value":586}," restart",{"type":64,"tag":243,"props":588,"children":589},{"style":256},[590],{"type":73,"value":591}," ollama\n",{"type":64,"tag":243,"props":593,"children":595},{"class":245,"line":594},9,[596],{"type":64,"tag":243,"props":597,"children":598},{"emptyLinePlaceholder":517},[599],{"type":73,"value":520},{"type":64,"tag":243,"props":601,"children":603},{"class":245,"line":602},10,[604],{"type":64,"tag":243,"props":605,"children":606},{"style":479},[607],{"type":73,"value":608},"# macOS app\n",{"type":64,"tag":243,"props":610,"children":611},{"class":245,"line":14},[612,617,622,627,632],{"type":64,"tag":243,"props":613,"children":614},{"style":250},[615],{"type":73,"value":616},"launchctl",{"type":64,"tag":243,"props":618,"children":619},{"style":256},[620],{"type":73,"value":621}," setenv",{"type":64,"tag":243,"props":623,"children":624},{"style":256},[625],{"type":73,"value":626}," OLLAMA_HOST",{"type":64,"tag":243,"props":628,"children":629},{"style":256},[630],{"type":73,"value":631}," \"0.0.0.0:11434\"",{"type":64,"tag":243,"props":633,"children":634},{"style":479},[635],{"type":73,"value":636},"   # then quit and reopen Ollama\n",{"type":64,"tag":65,"props":638,"children":639},{},[640,642,647,649,654,656,662],{"type":73,"value":641},"On Windows, add ",{"type":64,"tag":76,"props":643,"children":645},{"className":644},[],[646],{"type":73,"value":457},{"type":73,"value":648}," under user environment variables and restart Ollama from the tray. The same variable tells the ",{"type":64,"tag":76,"props":650,"children":652},{"className":651},[],[653],{"type":73,"value":346},{"type":73,"value":655}," CLI which server to talk to, so ",{"type":64,"tag":76,"props":657,"children":659},{"className":658},[],[660],{"type":73,"value":661},"OLLAMA_HOST=gpu-box:11434 ollama list",{"type":73,"value":663}," queries a remote machine.",{"type":64,"tag":65,"props":665,"children":666},{},[667,669,675,677,683,685,691,693,699,701,707],{"type":73,"value":668},"To free the port: ",{"type":64,"tag":76,"props":670,"children":672},{"className":671},[],[673],{"type":73,"value":674},"lsof -i :11434",{"type":73,"value":676}," then ",{"type":64,"tag":76,"props":678,"children":680},{"className":679},[],[681],{"type":73,"value":682},"kill -9 PID",{"type":73,"value":684}," on macOS and Linux, or ",{"type":64,"tag":76,"props":686,"children":688},{"className":687},[],[689],{"type":73,"value":690},"netstat -ano | findstr :11434",{"type":73,"value":692}," and ",{"type":64,"tag":76,"props":694,"children":696},{"className":695},[],[697],{"type":73,"value":698},"taskkill /PID \u003Cpid> /F",{"type":73,"value":700}," on Windows. If it's the systemd service, stop it with ",{"type":64,"tag":76,"props":702,"children":704},{"className":703},[],[705],{"type":73,"value":706},"systemctl stop ollama",{"type":73,"value":708}," instead or it restarts.",{"type":64,"tag":103,"props":710,"children":712},{"id":711},"cors-ollama_origins",[713],{"type":73,"value":714},"CORS: OLLAMA_ORIGINS",{"type":64,"tag":65,"props":716,"children":717},{},[718],{"type":73,"value":719},"Ollama allows browser requests from localhost origins by default. A web app on another origin, or a browser extension, gets a 403 or CORS error until you add it:",{"type":64,"tag":233,"props":721,"children":723},{"className":235,"code":722,"language":237,"meta":7,"style":7},"OLLAMA_ORIGINS=\"https://my-app.example.com,chrome-extension://*\" ollama serve\n",[724],{"type":64,"tag":76,"props":725,"children":726},{"__ignoreMap":7},[727],{"type":64,"tag":243,"props":728,"children":729},{"class":245,"line":246},[730,735,739,744,748],{"type":64,"tag":243,"props":731,"children":732},{"style":488},[733],{"type":73,"value":734},"OLLAMA_ORIGINS",{"type":64,"tag":243,"props":736,"children":737},{"style":493},[738],{"type":73,"value":496},{"type":64,"tag":243,"props":740,"children":741},{"style":256},[742],{"type":73,"value":743},"\"https://my-app.example.com,chrome-extension://*\"",{"type":64,"tag":243,"props":745,"children":746},{"style":250},[747],{"type":73,"value":506},{"type":64,"tag":243,"props":749,"children":750},{"style":256},[751],{"type":73,"value":511},{"type":64,"tag":65,"props":753,"children":754},{},[755,757,762,764,769],{"type":73,"value":756},"This controls which ",{"type":64,"tag":69,"props":758,"children":759},{},[760],{"type":73,"value":761},"browsers",{"type":73,"value":763}," may call the API. It isn't authentication: ",{"type":64,"tag":76,"props":765,"children":767},{"className":766},[],[768],{"type":73,"value":253},{"type":73,"value":770}," ignores CORS completely.",{"type":64,"tag":103,"props":772,"children":774},{"id":773},"exposing-ollama-safely",[775],{"type":73,"value":776},"Exposing Ollama safely",{"type":64,"tag":65,"props":778,"children":779},{},[780,782,787],{"type":73,"value":781},"Ollama has ",{"type":64,"tag":69,"props":783,"children":784},{},[785],{"type":73,"value":786},"no authentication",{"type":73,"value":788},". Anyone who can reach 11434 can run prompts on your GPU, pull multi-gigabyte models, and delete the ones you have. Scans regularly find many thousands of Ollama servers left open on the internet. Before you make it reachable:",{"type":64,"tag":790,"props":791,"children":792},"ul",{},[793,811,829],{"type":64,"tag":331,"props":794,"children":795},{},[796,801,803,809],{"type":64,"tag":69,"props":797,"children":798},{},[799],{"type":73,"value":800},"Same LAN only:",{"type":73,"value":802}," ",{"type":64,"tag":76,"props":804,"children":806},{"className":805},[],[807],{"type":73,"value":808},"OLLAMA_HOST=0.0.0.0",{"type":73,"value":810}," and a firewall rule that limits 11434 to your subnet.",{"type":64,"tag":331,"props":812,"children":813},{},[814,819,821,827],{"type":64,"tag":69,"props":815,"children":816},{},[817],{"type":73,"value":818},"Remote, personal use:",{"type":73,"value":820}," an SSH tunnel (",{"type":64,"tag":76,"props":822,"children":824},{"className":823},[],[825],{"type":73,"value":826},"ssh -L 11434:localhost:11434 user@gpu-box",{"type":73,"value":828},") or a VPN such as WireGuard. Nothing public.",{"type":64,"tag":331,"props":830,"children":831},{},[832,837,839,844],{"type":64,"tag":69,"props":833,"children":834},{},[835],{"type":73,"value":836},"Remote, shared or for an app:",{"type":73,"value":838}," put a reverse proxy with authentication (Caddy, Nginx or Traefik with an API key or basic auth) in front of Ollama, and expose ",{"type":64,"tag":69,"props":840,"children":841},{},[842],{"type":73,"value":843},"the proxy",{"type":73,"value":845},", not 11434:",{"type":64,"tag":233,"props":847,"children":849},{"className":235,"code":848,"language":237,"meta":7,"style":7},"relay connect --name my-llm http://localhost:8443   # your auth proxy, not Ollama\n",[850],{"type":64,"tag":76,"props":851,"children":852},{"__ignoreMap":7},[853],{"type":64,"tag":243,"props":854,"children":855},{"class":245,"line":246},[856,861,866,871,876,881],{"type":64,"tag":243,"props":857,"children":858},{"style":250},[859],{"type":73,"value":860},"relay",{"type":64,"tag":243,"props":862,"children":863},{"style":256},[864],{"type":73,"value":865}," connect",{"type":64,"tag":243,"props":867,"children":868},{"style":262},[869],{"type":73,"value":870}," --name",{"type":64,"tag":243,"props":872,"children":873},{"style":256},[874],{"type":73,"value":875}," my-llm",{"type":64,"tag":243,"props":877,"children":878},{"style":256},[879],{"type":73,"value":880}," http://localhost:8443",{"type":64,"tag":243,"props":882,"children":883},{"style":479},[884],{"type":73,"value":885},"   # your auth proxy, not Ollama\n",{"type":64,"tag":65,"props":887,"children":888},{},[889,891,897,899,905],{"type":73,"value":890},"If Ollama is bound to loopback, it rejects requests whose ",{"type":64,"tag":76,"props":892,"children":894},{"className":893},[],[895],{"type":73,"value":896},"Host",{"type":73,"value":898}," header isn't a local name with a 403. Have the proxy set ",{"type":64,"tag":76,"props":900,"children":902},{"className":901},[],[903],{"type":73,"value":904},"Host: localhost:11434",{"type":73,"value":906}," when it forwards upstream. Ollama's own docs recommend the same host-header rewrite for tunnels.",{"type":64,"tag":65,"props":908,"children":909},{},[910,912,917,919,925],{"type":73,"value":911},"If you're building an AI agent that reacts to events (a GitHub issue, a Stripe payment), you usually don't need Ollama public at all. Receive the webhooks locally and call Ollama on ",{"type":64,"tag":76,"props":913,"children":915},{"className":914},[],[916],{"type":73,"value":5},{"type":73,"value":918},"; see ",{"type":64,"tag":920,"props":921,"children":922},"a",{"href":23},[923],{"type":73,"value":924},"self-hosted AI agent webhooks",{"type":73,"value":91},{"type":64,"tag":927,"props":928,"children":929},"style",{},[930],{"type":73,"value":931},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":282,"depth":282,"links":933},[934,935,936,937,938],{"id":105,"depth":273,"text":108},{"id":322,"depth":273,"text":325},{"id":445,"depth":273,"text":448},{"id":711,"depth":273,"text":714},{"id":773,"depth":273,"text":776},"markdown","content:localhost:11434.md","content","localhost/11434.md","localhost/11434","md",{"loc":4},1793199810295]