~/ / AI 文章 / 在 VPS 上跑本機 LLM / 在 Ollama 前面放 nginx:基本驗證、HTTPS 與串流設定
在 Ollama 前面放 nginx:基本驗證、HTTPS 與串流設定
Ollama 預設只在伺服器本機監聽,這也是最安全的位置。當其他機器必須連到它時,Ollama FAQ 建議使用 nginx 之類的代理伺服器。本文依據 nginx 文件建立這樣的設定:密碼、HTTPS、對串流回應有影響的設定,以及關上其他入口的防火牆。
發布: · 約 7 分鐘讀完 · 已於 2026-10-26 對照 Ollama 與 nginx 的官方文件確認。指令的預設值會因 nginx 版本而異,請確認你所使用的版本。
Ollama FAQ 怎麼說
Ollama FAQ 指出,Ollama 會執行一個 HTTP 伺服器,可以透過 Nginx 之類的代理伺服器對外提供。其範例監聽 80 埠、設定 server_name、用 proxy_pass http://localhost:11434 轉送請求,並把 Host 標頭設為 localhost:11434。
我們查閱的那個 FAQ 頁面並未說明 Ollama 伺服器本身有任何驗證機制。因此密碼必須由它前面的代理來負責。Ollama 預設綁定 127.0.0.1 的 11434 埠,所以同一台伺服器上的 nginx 不必更改這個位址就能連到它。
用基本驗證加上密碼
ngx_http_auth_basic_module 會檢查使用者名稱與密碼來限制存取。主要由兩個指令負責:auth_basic,其字串會作為 realm 使用,預設為 off;以及 auth_basic_user_file,用來指定密碼檔。
| Directive | 預設值 | 文件的說明 |
|---|---|---|
| auth_basic string | off; | off | 參數會作為驗證用的 realm。值 off 會取消從上一層繼承來的設定。 |
| auth_basic_user_file file; | 無 | 檔案中每行一筆 name:password,以 # 開頭的行是註解。 |
- 支援的密碼類型:以 crypt() 加密的密碼與 apr1 雜湊,兩者都可用 Apache 的 htpasswd 工具或 openssl passwd 產生。
- 也支援 {SCHEME}data 語法。該頁面指出 PLAIN 只是範例,不應使用;SHA 是未加鹽的 SHA-1,容易受到彩虹表攻擊,同樣不應使用。SSHA 則是加鹽的 SHA-1。
- 文件中的範例:location / { auth_basic "closed site"; auth_basic_user_file conf/htpasswd; }
該頁面提到了 htpasswd 與 openssl passwd,但沒有給出指令。常見的用法是我們補充的,並非出自該頁面:htpasswd -c /etc/nginx/ollama.htpasswd alice 會提示輸入密碼,openssl passwd -apr1 則會印出雜湊值,可貼在使用者名稱與冒號之後。
啟用 HTTPS
我們的解讀,並非文件中的敘述:基本驗證每次請求都會送出密碼,所以只應在 HTTPS 之後使用。依據 nginx 文件,伺服器需要在監聽 socket 上加上 ssl 參數,並指定憑證與私密金鑰的位置。
| Directive | 文件中的範例 |
|---|---|
| listen | listen 443 ssl; |
| server_name | server_name www.example.com; |
| ssl_certificate | ssl_certificate www.example.com.crt; |
| ssl_certificate_key | ssl_certificate_key www.example.com.key; |
- nginx 預設使用 ssl_protocols TLSv1.2 TLSv1.3 與 ssl_ciphers HIGH:!aNULL:!MD5,因此一般不需要另外明確設定。
- 私密金鑰應存放在存取受限的檔案中,但 nginx 的 master 程序必須能夠讀取它。
- 如果瀏覽器對來自知名機構的憑證顯示錯誤,可能是伺服器需要一併送出中繼憑證。在合併後的檔案中,伺服器憑證必須排在串接的憑證之前,否則 nginx 會因 key values mismatch 錯誤而無法啟動。
- Let's Encrypt 的入門頁面指出,如果你的服務供應商不會代你取得憑證,而你又能管理自己的伺服器,就可以執行 ACME 用戶端,並且它建議大多數人使用 Certbot。
串流與較慢回應的設定
模型是一段一段地寫出回答,而第一段可能要等一陣子才會出現,例如在大型模型載入記憶體的時候。有三個 nginx 設定會決定從外部看起來是什麼樣子。
| Directive | 預設值 | 文件的說明 |
|---|---|---|
| proxy_buffering | on | 停用緩衝時,回應一收到就會立即同步傳給用戶端。啟用時,nginx 會先把回應存入緩衝區。 |
| proxy_read_timeout | 60s | 逾時只針對兩次連續讀取操作之間的間隔設定,而不是整個回應。如果被代理的伺服器在這段時間內沒有傳送任何資料,連線就會被關閉。 |
| proxy_http_version | 自 nginx 1.29.7 起為 1.1 | 1.29.7 之前的預設值是 1.0。建議使用 1.1 或 2 版以支援 keepalive 連線。 |
我們的解讀,並非文件中的敘述:若想看到回答邊寫邊出現,請在 Ollama 的 location 中把 proxy_buffering 設為 off;如果模型在載入時可能超過一分鐘都沒有輸出,就調高 proxy_read_timeout。明確設定 proxy_http_version 1.1 在所有版本上都無害。
組合起來
這份設定把上面的指令組合起來,對應一個伺服器名稱。它是我們根據文件中記載的指令組合而成的,因此在重新載入之前,請先用 nginx -t 測試。
| Line | 原因 |
|---|---|
| server { | 為 Ollama 的名稱設一個 server 區塊 |
| listen 443 ssl; | HTTPS |
| server_name ollama.example.com; | 換成你自己的名稱 |
| ssl_certificate /etc/ssl/ollama.crt; | 憑證,中繼憑證接在其後 |
| ssl_certificate_key /etc/ssl/ollama.key; | 私密金鑰,只開放必要的讀取權限 |
| auth_basic "ollama"; | 開啟密碼驗證 |
| auth_basic_user_file /etc/nginx/ollama.htpasswd; | 使用者資料存放的位置 |
| location / { | 所有請求都送往 Ollama |
| proxy_pass http://localhost:11434; | 出自 Ollama FAQ |
| proxy_set_header Host localhost:11434; | 出自 Ollama FAQ |
| proxy_http_version 1.1; | 建議用於 keepalive |
| proxy_buffering off; | 讓回答以串流方式送出 |
| proxy_read_timeout 300s; | 容許第一段回應較慢 |
| } | location 結束 |
| } | server 結束 |
關上其他入口
只有在別人無法透過其他途徑連到 Ollama 或它背後的應用程式時,代理才有意義。讓 Ollama 保持在預設位址,並用防火牆只放行你會用到的位址。
| 工作 | Ubuntu 文件中的指令 |
|---|---|
| 啟用防火牆 | sudo ufw enable |
| 允許某個埠 | sudo ufw allow 22 |
| 允許某個位址連到某個埠 | sudo ufw allow proto tcp from 192.168.0.2 to any port 22 |
| 允許整個子網路 | 把位址換成 192.168.0.0/24 |
| 查看狀態 | sudo ufw status |
Ubuntu 的頁面指出 UFW 起初是停用的。頁面中沒有提醒可能會把自己鎖在 SSH 之外。我們的建議:在對需要遠端連線的伺服器啟用防火牆之前,先允許你的 SSH 埠,並且只對需要的位址開放 443 埠。
資料來源
接著閱讀
- 在 VPS 上用 Docker 執行 Open WebUI,並連接 Ollama在自己的伺服器上用 Docker 執行 Open WebUI 並連接 Ollama:指令、第一個帳號、兩種連線類型與更新方式。
- 在自己的程式中呼叫本機模型:Ollama 的結構化輸出與 OpenAI-compatible API用 JSON Schema 限制本機模型的輸出,並從 OpenAI 風格的用戶端呼叫 Ollama:官方文件怎麼說,以及哪些功能不支援。
- 本機模型能做什麼?Ollama 的 tools、thinking、vision 與 embedding,以及 VPS 跑得動什麼tools、thinking、vision、embedding:Ollama 模型庫中的標籤代表什麼、哪些模型帶有這些標籤,以及下載大小有多大。
- 在 VPS 上安裝 Ollama 並讓它持續運作:安裝、systemd 服務、設定與更新在 Linux VPS 上安裝 Ollama 並讓它持續運作:依官方文件整理安裝指令、systemd 服務、環境變數、模型儲存位置與更新方式。