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

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

起因

在公共高性能服务器上运行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/nginx

nginx: [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_START
    if ($server_port !~ 8443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_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.kler.cn/a/584809.html

相关文章:

  • 接口自动化入门 —— JSON中的万能密码--JSONPath解析!
  • 基于javaweb的SpringBoot个人健康管理系统小程序微信小程序设计与实现(源码+文档+部署讲解)
  • Java 实现 Android ViewPager2 顶部导航:动态配置与高效加载指南
  • 【SpringBoot】MD5加盐算法的详解
  • RabbitMQ 实现原理及流程
  • 【数据结构】-哈夫曼树以及其应用
  • 【原创】springboot+vue校园新冠疫情统计管理系统设计与实现
  • git切换版本
  • 根据开始和结束日期,获取每一天和每个月的开始和结束日期的list
  • 深度对话:AI界的奥本海默与通用人工智能(AGI)的未来
  • 如何在Futter开发中做性能优化?
  • 前端面试:React生态有哪些?
  • Unity开发的抖音小游戏接入抖音开放平台中的流量主(抖音小游戏接入广告)
  • ubuntu 设置允许root远程登录
  • 使用联核科技四向穿梭车能给企业带来哪些效益?
  • CSS-基础选择器,字体属性,文本属性介绍
  • 【MySQL】基本操作 —— DDL
  • JVM 解释器和即时编译器有什么区别?
  • USER与多组织关联的SQL查询以及几个关键函数用法
  • Redis 单线程架构:化繁为简的性能哲学