toolkitbox

~/ / 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.

DirectiveMặc địnhTài liệu nói gì
auth_basic string | off;offTham 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.

DirectiveVí dụ từ tài liệu
listenlisten 443 ssl;
server_nameserver_name www.example.com;
ssl_certificatessl_certificate www.example.com.crt;
ssl_certificate_keyssl_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.

DirectiveMặc địnhTài liệu nói gì
proxy_bufferingonKhi 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_timeout60sTimeout 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_version1.1 kể từ nginx 1.29.7Trướ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òngLý 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àmLệnh từ tài liệu Ubuntu
Bật tường lửasudo ufw enable
Cho phép một cổngsudo ufw allow 22
Cho phép một địa chỉ vào một cổngsudo ufw allow proto tcp from 192.168.0.2 to any port 22
Cho phép cả một mạng conthay địa chỉ bằng 192.168.0.0/24
Kiểm tra trạng tháisudo 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