当前位置: 首页 > news >正文

【原创】在高性能服务器上,使用受限用户运行Nginx,充当反向代理服务器[未完待续]

1 起因

在公共高性能服务器上运行Ollama+DeepSeek,如果按照默认配置启动Ollama程序,则自己在远程无法连接你启动的Ollama服务。

如果修改掉默认的配置,则会遇到你的Ollama被他人完全控制的安全风险。

不过,我们可以使用一个方向代理,并增加一些限制的方式,让我们从远程来访问。同时可以阻止未授权的人的访问。

现在的问题是,我们使用的高性能服务器是公共的,我们没有root权限。意味着我们很多软件我们不能安装。

不过,Nginx可以以普通用户的身份编译、安装和运行。然后使用这个Nginx做反向代理,添加安全验证。

  • 安装Nginx时,需要加载SSL模块,方可启用HTTPS。
  • 编译SSL模块时,需要 IPC::Cmd
  • 编译IPC::Cmd时,需要Perl
  • 为了使用Perl,则需要安装perlbrew

这里共有四项内容。

2 安装perlbrew

要使用这个工具来安装perl。

项目
https://github.com/gugod/App-perlbrew

用途:
Manage perl installations in your $HOME

最终文件
https://raw.githubusercontent.com/gugod/App-perlbrew/master/perlbrew-install

安装指令

curl -kL https://install.perlbrew.pl | bash
perlbrew --notest install perl-5.34.0
source ~/perl5/perlbrew/etc/bashrc

安装Perl

安装Perl,下面这一句执行的时间比较长。

perlbrew switch perl-5.34.0

可以再打开一个窗口执行如下指令,观察执行日志

tail -f ~/perl5/perlbrew/build.perl-5.34.0.log

cpanm

curl -L https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7048.tar.gz -o App-cpanminus-1.7048.tar.gz
tar -xzf App-cpanminus-1.7048.tar.gz
cd App-cpanminus-1.7048
perl Makefile.PL INSTALL_BASE=~/perl5
make
make install

参数

export PATH=$HOME/perl5/bin:$PATH
echo 'export PERL5LIB=$PERL5LIB:~/perl5/lib/perl5/' >> ~/.bashrc
echo 'eval "$(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)"' >> ~/.bashrc
source ~/.bashrc

IPC::Cmd

打开网站 https://metacpan.org/pod/IPC::Cmd
下载 https://cpan.metacpan.org/authors/id/B/BI/BINGOS/IPC-Cmd-1.04.tar.gz
在这里插入图片描述

解压

tar zxvf IPC-Cmd-1.04.tar.gz

配置

cd IPC-Cmd-1.04/

编译

perl Makefile.PL INSTALL_BASE=~/perl5
make
make install

发布

export PERL5LIB=$PERL5LIB:~/perl5/lib/perl5/

测试

$ cpan IPC::Cmd
Loading internal logger. Log::Log4perl recommended for better logging
Reading '/public/home/xxxxxx/.cpan/Metadata'Database was generated on Sat, 15 Mar 2025 00:17:01 GMT
IPC::Cmd is up to date (1.04).

下载编译OpenSSL。、

下载

这里打开 https://openssl-library.org/source/
选择下载 openssl-3.4.1.tar.gz
在这里插入图片描述

解压

tar zxvf openssl-3.4.1.tar.gz

配置

cd openssl-3.4.1/
./config 
[000000@gpu04 openssl-3.4.1]$ ./config 
Configuring OpenSSL version 3.4.1 for target linux-x86_64
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created Makefile.in
Created Makefile
Created include/openssl/configuration.h**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL.md file first)      ***
***                                                                ***
**********************************************************************

2 安装Nginx

首先下载Nginx源码

https://nginx.org/en/download.html
注意,不要选版本太高的。公共服务器一般操作系统比较老,如果版本太高,可能编译不了(编译器版本太低)。

这里,我选择 https://nginx.org/download/nginx-1.27.4.tar.gz
在这里插入图片描述
如果你喜欢高版本的话,可以试试高版本的,基本流程都一样。

一般情况下高性能服务器只能在内网使用,不通外网,如果通外网的话,需要使用内网的代理服务器。

下载好源码后,将其上载到服务器。

解压

tar zxvf nginx-1.27.4.tar.gz 

配置

这里一定要加上参数–prefix,否则就是系统目录,没权限写。接下来配置失败。

 cd nginx-1.27.4/
./configure --prefix=$HOME/nginx

执行结果如下:

......
Configuration summary+ using system PCRE library+ OpenSSL library is not used+ using system zlib library
......

可以看到没使用OpenSSL,那么 将来就不能使用https代理了。安全性不足。接下来还需加上OpenSSL库
添加 --with-http_ssl_module 模块。

这里可以用系统的ssl模块。我们也可以用自己编译的。这里我们用自己编译的。

./configure --prefix=$HOME/nginx --with-http_ssl_module --with-openssl=$HOME/openssl-3.4.1

编译

这里基本上不会出错,稍等一会儿即可完成。

make

安装

这一步也没啥。

make install

运行Nginx

[000000@gpu04 sbin]$ ./nginx -V
nginx version: nginx/1.27.4
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 3.4.1 11 Feb 2025
TLS SNI support enabled
configure arguments: --prefix=/public/home/000000/nginx --with-http_ssl_module --with-openssl=/public/home/000000/openssl-3.4.1

直接运行如下命令,一般会出错。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;
}

http://www.mrgr.cn/news/94445.html

相关文章:

  • Java高级-04.反射-获取成员变量和方法对象并使用
  • QT中读取QSetting文件
  • Android 高版本 DownloadManager 封装工具类,支持 APK 断点续传与自动安装
  • C++ primer plus 类和对象下
  • VSCode C/C++ 开发环境完整配置及常见问题(自用)
  • 神经网络中常用语言特性(python)(待完善)
  • 软考计算机知识-流水线
  • 【AWS入门】2025 AWS亚马逊云科技账户注册指南
  • 解释VLA和具身智能之间的关系
  • 插入排序算法的SIMD优化
  • JavaScript基础篇:六、 函数基础
  • 模版题目的集合
  • 《AI浪潮中的璀璨新星:Meta Llama、Ollama与DeepSeek的深度剖析》:此文为AI自动生成
  • Machine Learning: 十大基本机器学习算法
  • 【春招笔试】2025.03.12-小米春招笔试
  • MySQL -- 表的约束
  • 数据结构概览
  • 云服务器新手配置内网穿透服务(frp)
  • steam 赛题
  • JavaScript基础篇:四、 运算符与表达式