起因
在公共高性能服務器上運行Ollama+DeepSeek,如果按照默認配置啟動Ollama程序,則自己在遠程無法連接你啟動的Ollama服務。
如果修改配置,則會遇到你的Ollama被他人完全控制的安全風險。
不過,我們可以使用一個方向代理,并增加一些限制的方式,讓我們從遠程來訪問。同時可以阻止未授權的人的訪問。
現在的問題是,我們使用的高性能服務器是公共的,我們沒有root權限。意味著我們很多軟件我們不能安裝。
不過,Nginx可以以普通用戶的身份編譯、安裝和運行。然后使用這個Nginx做反向代理,添加安全驗證。
安裝Nginx
首先下載Nginx源碼
https://nginx.org/en/download.html
注意,不要選版本太高的。公共服務器一般操作系統比較老,如果版本太高,可能編譯不了(編譯器版本太低)。
這里,我選擇 https://nginx.org/download/nginx-1.25.3.tar.gz
如果你喜歡高版本的話,可以試試高版本的,基本流程都一樣。
一般情況下高性能服務器只能在內網使用,不通外網,如果通外網的話,需要使用內網的代理服務器。
下載好源碼后,將其上載到服務器。
解壓
tar -xvzf nginx-1.25.3.tar.gz
配置
cd nginx-1.25.3/
./configure --prefix=$HOME/nginx
接下來,可能會報錯。報錯的原因往往是缺少某個模塊。如果為了快速完成,可以不包含哪些模塊,根據提示添加參數。
我這里有兩個模塊沒找到,根據提示不用這兩個模塊。
記得添加 --with-http_ssl_module 模塊
./configure --prefix=$HOME/nginx --with-http_ssl_module --without-http_rewrite_module --without-http_gzip_module
修正
./configure --prefix=$HOME/nginx --without-http_rewrite_module --without-http_gzip_module --with-http_ssl_module --with-openssl=/usr/include/openssl
openssl源碼
https://openssl-library.org/source/
tar zxvf
./configure --prefix=$HOME/nginx --without-http_rewrite_module --without-http_gzip_module --with-http_ssl_module --with-openssl=/public/home/10201401498/openssl-3.0.16
編譯
這里基本上不會出錯,稍等一會兒即可完成。
make
安裝
這一步也沒啥。
make install
運行Nginx
直接運行如下命令,一般會出錯。80端口,沒權限用。
$HOME/nginx/sbin/nginxnginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
結束進程
執行如下指令,找到自己運行的nginx程序
ps aux | grep nginx
根據進程號,全部殺掉
kill -9 12345
kill -9 12121
修改配置
vi $HOME/nginx/conf/nginx.conf
做如下修改,將監聽的80端口改成8088或其他高于1024的端口號。
erver {listen 8088; # 改為 8080 或其他高于 1024 的端口server_name localhost;location / {root html;index index.html index.htm;}
}
再次運行
$HOME/nginx/sbin/nginx
然后,沒啥結果
測試
執行如下指令,有結果輸出,說明Nginx運行成功。
curl http://127.0.0.1:8088
設置反向代理
編輯配置文件1
vi $HOME/nginx/conf/nginx.conf
在http節中,添加如下內容:
map $http_authorization $is_authorized {default 0; # 默認未授權"Bearer YOUR_FIXED_TOKEN_HERE" 1; # 替換為你的固定 Bearer Token}
添加PATH
export PATH=$HOME/nginx/sbin:$PATH
vi $HOME/nginx/conf/deepseek.0x99.top.conf
server
{listen 8088;listen 8443 ssl http2 ;server_name deepseek.0x99.top;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/deepseek.0x99.top;#CERT-APPLY-CHECK--START# 用于SSL證書申請時的文件驗證相關配置 -- 請勿刪除include /www/server/panel/vhost/nginx/well-known/ds.0x88.top.conf;#CERT-APPLY-CHECK--END#SSL-START SSL相關配置,請勿刪除或修改下一行帶注釋的404規則#error_page 404/404.html;#HTTP_TO_HTTPS_STARTif ($server_port !~ 8443){rewrite ^(/.*)$ https://$host$1 permanent;}#HTTP_TO_HTTPS_ENDssl_certificate /www/server/panel/vhost/cert/deepseek.0x99.top/fullchain.pem;ssl_certificate_key /www/server/panel/vhost/cert/deepseek.0x99.top/privkey.pem;ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;ssl_prefer_server_ciphers on;ssl_session_tickets on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;add_header Strict-Transport-Security "max-age=31536000";error_page 497 https://$host$request_uri;#SSL-END#ERROR-PAGE-START 錯誤頁配置,可以注釋、刪除或修改error_page 404 /404.html;#error_page 502 /502.html;#ERROR-PAGE-END#PHP-INFO-START PHP引用配置,可以注釋或修改#清理緩存規則location ~ /purge(/.*) {proxy_cache_purge cache_one $host$1$is_args$args;#access_log /www/wwwlogs/ds.0x88.top_purge_cache.log;}# 檢查是否授權if ($is_authorized != 1) {return 401 "Unauthorized: Invalid Bearer Token"; # 返回 401 錯誤}#引用反向代理規則,注釋后配置的反向代理將無效include /www/server/panel/vhost/nginx/proxy/deepseek.0x99.top/*.conf;include enable-php-00.conf;#PHP-INFO-END#REWRITE-START URL重寫規則引用,修改后將導致面板設置的偽靜態規則失效include /www/server/panel/vhost/rewrite/deepseek.0x99.top.conf;#REWRITE-END#禁止訪問的文件或目錄location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md){return 404;}#一鍵申請SSL證書驗證目錄相關設置location ~ \.well-known{allow all;}#禁止在證書驗證目錄放入敏感文件if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {return 403;}access_log /www/wwwlogs/deepseek.0x99.top.log;error_log /www/wwwlogs/deepseek.0x99.top.log;
}