~/ / Bài viết về AI / LLM cục bộ trên VPS / Đặt nginx phía trước Ollama: xác thực cơ bản, HTTPS và cài đặt streaming
Đặt nginx phía trước Ollama: xác thực cơ bản, HTTPS và cài đặt streaming
Theo mặc định, Ollama chỉ lắng nghe trên chính máy chủ, và đó là nơi an toàn nhất cho nó. Khi một máy khác cần truy cập, FAQ của Ollama chỉ đến một máy chủ proxy như nginx. Bài viết này dựng cấu hình đó từ tài liệu nginx: một mật khẩu, HTTPS, các cài đặt quan trọng với câu trả lời dạng stream, và một tường lửa đóng những cửa còn lại.
Đăng: · 6 phút đọc · Đã đối chiếu với tài liệu chính thức của Ollama và nginx vào ngày 2026-10-26. Giá trị mặc định của các directive phụ thuộc vào phiên bản nginx, vì vậy hãy kiểm tra phiên bản bạn đang chạy.
FAQ của Ollama nói gì
FAQ của Ollama cho biết Ollama chạy một máy chủ HTTP và có thể được mở ra thông qua một máy chủ proxy như Nginx. Ví dụ của FAQ lắng nghe ở cổng 80, đặt một server_name, chuyển tiếp yêu cầu bằng proxy_pass http://localhost:11434 và đặt header Host thành localhost:11434.
Trang FAQ mà chúng tôi đã kiểm tra không mô tả bất kỳ cơ chế xác thực nào cho máy chủ Ollama. Vì vậy mật khẩu phải đến từ proxy đặt phía trước nó. Ollama theo mặc định gắn vào 127.0.0.1 cổng 11434, nên một nginx trên cùng máy chủ có thể truy cập nó mà không phải đổi địa chỉ này.
Mật khẩu bằng xác thực cơ bản
ngx_http_auth_basic_module giới hạn quyền truy cập bằng cách kiểm tra tên người dùng và mật khẩu. Hai directive đảm nhiệm việc này: auth_basic, có chuỗi được dùng làm realm và mặc định là off, và auth_basic_user_file, chỉ định tệp mật khẩu.
| Directive | Mặc định | Tài liệu nói gì |
|---|---|---|
| auth_basic string | off; | off | Tham số được dùng làm realm xác thực. Giá trị off hủy một thiết lập kế thừa từ cấp trước. |
| auth_basic_user_file file; | không có | Tệp có một mục name:password trên mỗi dòng, và các dòng bắt đầu bằng # là chú thích. |
- Các loại mật khẩu được hỗ trợ: mật khẩu mã hóa bằng crypt() và hash apr1, cả hai đều được tạo bằng tiện ích htpasswd của Apache hoặc bằng openssl passwd.
- Cú pháp {SCHEME}data cũng được hỗ trợ. Trang tài liệu nói PLAIN chỉ là ví dụ và không nên dùng, và SHA, một SHA-1 không có salt, cũng không nên dùng vì dễ bị tấn công bằng rainbow table. SSHA là SHA-1 có salt.
- Ví dụ trong tài liệu: location / { auth_basic "closed site"; auth_basic_user_file conf/htpasswd; }
Trang tài liệu nêu tên htpasswd và openssl passwd nhưng không đưa ra lệnh nào. Các dạng thường dùng, là của chúng tôi chứ không phải từ trang tài liệu, là htpasswd -c /etc/nginx/ollama.htpasswd alice, lệnh này sẽ hỏi mật khẩu, và openssl passwd -apr1, lệnh này in ra một hash để dán sau tên người dùng và dấu hai chấm.
Thiết lập HTTPS
Cách đọc của chúng tôi, không phải phát biểu từ tài liệu: xác thực cơ bản gửi mật khẩu theo mỗi yêu cầu, nên chỉ dùng nó phía sau HTTPS. Theo tài liệu nginx, một máy chủ cần tham số ssl trên socket lắng nghe của nó, cùng vị trí của chứng chỉ và khóa riêng.
| Directive | Ví dụ từ tài liệu |
|---|---|
| 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; |
- Theo mặc định nginx dùng ssl_protocols TLSv1.2 TLSv1.3 và ssl_ciphers HIGH:!aNULL:!MD5, nên nhìn chung không cần cấu hình chúng một cách tường minh.
- Khóa riêng nên được lưu trong một tệp có quyền truy cập hạn chế, nhưng tiến trình master của nginx phải đọc được nó.
- Nếu trình duyệt báo lỗi với chứng chỉ từ một tổ chức cấp phát uy tín, máy chủ có thể cần gửi kèm các chứng chỉ trung gian. Chứng chỉ của máy chủ phải đứng trước các chứng chỉ trong chuỗi ở tệp gộp, nếu không nginx sẽ không khởi động được và báo lỗi key values mismatch.
- Trang bắt đầu của Let's Encrypt nói rằng nếu nhà cung cấp của bạn không lấy chứng chỉ giúp bạn và bạn có thể quản trị máy chủ của mình, bạn có thể chạy một ACME client, và họ khuyên dùng Certbot cho hầu hết mọi người.
Cài đặt cho câu trả lời dạng stream và chậm
Một mô hình viết câu trả lời từng phần một, và phần đầu tiên có thể mất một lúc mới đến, chẳng hạn khi một mô hình lớn đang được nạp vào bộ nhớ. Ba cài đặt của nginx quyết định điều này trông như thế nào từ bên ngoài.
| Directive | Mặc định | Tài liệu nói gì |
|---|---|---|
| proxy_buffering | on | Khi tắt buffering, phản hồi được chuyển cho client một cách đồng bộ, ngay khi nhận được. Khi bật, nginx lưu phản hồi vào các buffer trước. |
| proxy_read_timeout | 60s | Timeout chỉ được đặt giữa hai thao tác đọc liên tiếp, không phải cho toàn bộ phản hồi. Nếu máy chủ được proxy không truyền gì trong khoảng thời gian này, kết nối sẽ bị đóng. |
| proxy_http_version | 1.1 kể từ nginx 1.29.7 | Trước 1.29.7 mặc định là 1.0. Phiên bản 1.1 hoặc 2 được khuyến nghị cho các kết nối keepalive. |
Cách đọc của chúng tôi, không phải phát biểu từ tài liệu: để thấy câu trả lời hiện ra khi nó đang được viết, hãy tắt proxy_buffering cho location của Ollama, và nếu mô hình có thể im lặng hơn một phút trong lúc nạp, hãy tăng proxy_read_timeout. Đặt proxy_http_version 1.1 một cách tường minh là vô hại trên mọi phiên bản.
Ghép lại với nhau
Cấu hình này kết hợp các directive ở trên cho một tên máy chủ. Đây là cách ghép của chúng tôi từ các directive đã được ghi trong tài liệu, vì vậy hãy kiểm tra bằng nginx -t trước khi bạn reload.
| Dòng | Lý do |
|---|---|
| server { | một khối server cho tên của Ollama |
| listen 443 ssl; | HTTPS |
| server_name ollama.example.com; | tên của riêng bạn |
| ssl_certificate /etc/ssl/ollama.crt; | chứng chỉ, với các chứng chỉ trung gian đặt sau nó |
| ssl_certificate_key /etc/ssl/ollama.key; | khóa riêng, chỉ cho phép đọc khi cần |
| auth_basic "ollama"; | bật mật khẩu |
| auth_basic_user_file /etc/nginx/ollama.htpasswd; | nơi lưu danh sách người dùng |
| location / { | mọi yêu cầu đều chuyển đến Ollama |
| proxy_pass http://localhost:11434; | từ FAQ của Ollama |
| proxy_set_header Host localhost:11434; | từ FAQ của Ollama |
| proxy_http_version 1.1; | được khuyến nghị cho keepalive |
| proxy_buffering off; | để câu trả lời được stream |
| proxy_read_timeout 300s; | cho phép phần đầu tiên đến chậm |
| } | kết thúc location |
| } | kết thúc server |
Đóng những cửa còn lại
Proxy chỉ có ích nếu người khác không thể truy cập Ollama hay ứng dụng phía sau nó bằng một đường khác. Ollama giữ nguyên địa chỉ mặc định, và tường lửa chỉ cho phép những địa chỉ bạn dùng.
| Việc cần làm | Lệnh từ tài liệu Ubuntu |
|---|---|
| Bật tường lửa | sudo ufw enable |
| Cho phép một cổng | sudo ufw allow 22 |
| Cho phép một địa chỉ vào một cổng | sudo ufw allow proto tcp from 192.168.0.2 to any port 22 |
| Cho phép cả một mạng con | thay địa chỉ bằng 192.168.0.0/24 |
| Kiểm tra trạng thái | sudo ufw status |
Trang Ubuntu nói rằng UFW ban đầu bị tắt. Trang đó không có cảnh báo nào về việc tự khóa mình khỏi SSH. Khuyến nghị của chúng tôi: hãy cho phép cổng SSH của bạn trước khi bật tường lửa trên một máy chủ mà bạn truy cập từ xa, và chỉ cho phép cổng 443 từ những địa chỉ cần dùng.
Nguồn
Đọc tiếp
- Open WebUI trên VPS: chạy bằng Docker và kết nối với OllamaChạy Open WebUI bằng Docker và kết nối với Ollama trên máy chủ của chính bạn: các lệnh, tài khoản đầu tiên, hai kiểu kết nối và cách cập nhật.
- Gọi mô hình cục bộ từ mã của bạn: structured outputs và API tương thích OpenAI trong OllamaRàng buộc đầu ra của mô hình cục bộ bằng JSON Schema và gọi Ollama từ các client kiểu OpenAI: tài liệu chính thức nói gì và điều gì không được hỗ trợ.
- Mô hình chạy cục bộ làm được gì? Tools, thinking, vision và embedding trong Ollama, và những gì chạy vừa trên VPSTools, thinking, vision, embedding: các nhãn trong thư viện Ollama có nghĩa gì, mô hình nào mang nhãn nào và dung lượng tải về lớn đến đâu.
- Cài Ollama trên VPS và giữ cho nó chạy ổn định: cài đặt, dịch vụ systemd, thiết lập và cập nhậtCài Ollama trên VPS Linux và giữ cho nó chạy ổn định: lệnh cài đặt, dịch vụ systemd, biến môi trường, nơi lưu mô hình và cập nhật, theo tài liệu chính thức.