toolkitbox

~/ / AI 기사 / VPS에서 로컬 LLM / Ollama 앞에 nginx 두기: 기본 인증, HTTPS, 스트리밍 설정

Ollama 앞에 nginx 두기: 기본 인증, HTTPS, 스트리밍 설정

Ollama는 기본적으로 서버 자체에서만 연결을 받으며, 이것이 가장 안전한 위치입니다. 다른 머신이 접속해야 할 때 Ollama FAQ는 nginx 같은 프록시 서버를 안내합니다. 이 글은 nginx 문서를 바탕으로 비밀번호, HTTPS, 스트리밍 응답에 중요한 설정, 그리고 나머지 문을 닫는 방화벽까지 그 구성을 차례로 만들어 갑니다.

게시: · 읽는 데 약 8분 · 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-1인 SHA도 레인보 테이블 공격에 취약하므로 사용해서는 안 됩니다. 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 문서에 따르면 서버에는 수신 소켓의 ssl 매개변수와 인증서 및 개인 키의 위치가 필요합니다.

Directive문서의 예시
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;
  • nginx는 기본적으로 ssl_protocols TLSv1.2 TLSv1.3과 ssl_ciphers HIGH:!aNULL:!MD5를 사용하므로, 일반적으로 이를 명시적으로 설정할 필요는 없습니다.
  • 개인 키는 접근이 제한된 파일에 저장해야 하지만, nginx의 마스터 프로세스가 읽을 수 있어야 합니다.
  • 널리 알려진 인증 기관의 인증서인데도 브라우저에서 오류가 나면, 서버가 중간 인증서를 함께 보내야 할 수 있습니다. 결합한 파일에서는 서버 인증서가 체인 인증서보다 앞에 있어야 하며, 그렇지 않으면 nginx가 key values mismatch 오류와 함께 시작되지 않습니다.
  • Let's Encrypt의 시작하기 페이지에 따르면, 호스팅 업체가 인증서를 대신 발급해 주지 않고 서버를 직접 관리할 수 있다면 ACME 클라이언트를 실행할 수 있으며, 대부분의 사용자에게는 Certbot을 권장한다고 합니다.

스트리밍 응답과 느린 응답을 위한 설정

모델은 답변을 조금씩 써 내려가며, 예를 들어 큰 모델이 메모리에 로드되는 동안에는 첫 조각이 도착하기까지 시간이 걸릴 수 있습니다. 이것이 바깥에서 어떻게 보이는지는 세 가지 nginx 설정이 결정합니다.

Directive기본값문서의 설명
proxy_bufferingon버퍼링을 비활성화하면 응답은 받는 즉시 클라이언트에 동기적으로 전달됩니다. 활성화하면 nginx가 먼저 응답을 버퍼에 저장합니다.
proxy_read_timeout60s타임아웃은 응답 전체가 아니라 연속된 두 번의 읽기 작업 사이에만 적용됩니다. 프록시 대상 서버가 이 시간 안에 아무것도 전송하지 않으면 연결이 닫힙니다.
proxy_http_versionnginx 1.29.7부터 1.11.29.7 이전의 기본값은 1.0이었습니다. keepalive 연결에는 버전 1.1 또는 2가 권장됩니다.

문서의 서술이 아닌 우리의 해석입니다. 답변이 쓰이는 대로 화면에 나타나게 하려면 Ollama location에서 proxy_buffering을 off로 하고, 모델이 로드되는 동안 1분 넘게 응답이 없을 수 있다면 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번 포트는 필요한 주소에서만 허용하세요.

출처

다음에 읽기