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

Nginx反代Ollama接口跨域、无法逐字输出问题

场景

本地部署deepseek模型,用的Ollama管理,内网穿透到公网,在通过nginx反代ollama接口。


问题描述

  1. 跨域问题
  • nginx转发时请求头中需要加入origin,并且origin还要和ollama接口同源(协议、ip、端口一致)。
proxy_set_header origin http://ip:11434;
  1. 无法逐字输出
  • 关键配置:禁用缓冲和缓存
proxy_buffering off;
proxy_cache off;
  • 确保流式传输的实时性
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;

完整配置

server {listen 80;server_name 域名;return 301 https://$server_name$request_uri;
}
server {listen 443 ssl;server_name 域名;#ssl证书配置ssl_certificate      /opt/nginx/conf/ssl/xxx/fullchain.pem;ssl_certificate_key  /opt/nginx/conf/ssl/xxx/key.pem;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;# 反代到 Ollama APIlocation /api/ {# Ollama 默认端口是 11434proxy_pass  http://服务器IP:11434;  # 请求时的origin请求头proxy_set_header origin http://服务器IP:11434;# 关闭 Nginx 的响应缓冲,强制数据实时传输到客户端proxy_buffering off;# 使用 HTTP/1.1 以支持长连接,避免 HTTP/1.0 的短连接问题proxy_cache off;# 确保流式传输的实时性proxy_set_header Connection '';proxy_http_version 1.1;# 关闭 Nginx 的分块编码处理(根据实际情况调整)chunked_transfer_encoding off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 添加 CORS 头部add_header 'Access-Control-Allow-Origin' '*' always;add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;# 处理预检请求 (OPTIONS)if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' 0;return 204;}}
}

相关文章:

Nginx反代Ollama接口跨域、无法逐字输出问题

场景 本地部署deepseek模型,用的Ollama管理,内网穿透到公网,在通过nginx反代ollama接口。 问题描述 跨域问题 nginx转发时请求头中需要加入origin,并且origin还要和ollama接口同源(协议、ip、端口一致)。…...

大学资产管理系统中的下载功能设计与实现

大学资产管理系统是高校信息化建设的重要组成部分,它负责记录和管理学校内所有固定资产的信息。随着信息技术的发展,下载功能成为提高资产管理效率的关键环节之一。 系统架构的设计是实现下载功能的基础。一个良好的系统架构能够确保数据的高效传输和存储…...

股指入门:股指期货是什么意思?在哪里可以做股指期货交易?

股指期货是一种以股票指数为标的物的期货合约,也可以称为股票指数期货或期指。 股指期货是什么意思? 股指期货是一种金融衍生品,其标的资产是股票市场上的股指,例如标普500指数、道琼斯工业平均指数、上证50指数等。 股指期货允…...

< OS 有关 > 利用 google-drive-ocamlfuse 工具,在 Ubuntu 24 系统上 加载 Google DRIVE 网盘

Created by Dave On 8Feb.2025 起因: 想下载 StableDiffusion,清理系统文件时把 i/o 搞到 100%,已经删除到 apt 缓存,还差 89MB,只能另想办法。 在网上找能不能挂在 Google 网盘,百度网盘,或 …...

Golang的引用类型和指针

在Golang中,引用类型和指针是两个容易混淆的概念,但它们有本质的区别。理解它们的区别对于编写高效、正确的Go代码至关重要。 1. 引用类型 引用类型是Go语言中某些内置类型的统称,它们的值在传递时共享底层数据,而不是复制数据。…...

51单片机之冯·诺依曼结构

一、概述 8051系列单片机将作为控制应用最基本的内容集成在一个硅片上,其内部结构如图4-1所示。作为单一芯片的计算机,它的内部结构与一台计算机的主机非常相似。其中微处理器相当于计算机中的CPU,由运算器和控制器两个部分构成;…...

32. C 语言 安全函数( _s 尾缀)

本章目录 前言什么是安全函数?安全函数的特点主要的安全函数1. 字符串操作安全函数2. 格式化输出安全函数3. 内存操作安全函数4. 其他常用安全函数 安全函数实例示例 1:strcpy_s 和 strcat_s示例 2:memcpy_s示例 3:strtok_s 总结 …...

Android T(13) 源码分析 — BufferQueue 的分析

Android T(13) 源码分析 — BufferQueue 的分析 文章目录 Android T(13) 源码分析 — BufferQueue 的分析前言摘要一、Java 层的 BufferQueue 分析二、原生层的 BufferQueue 分析1、BLASTBufferQueue 的创建2、BLASTBufferQueue 的更新3、Surface 的创建 总结 前言 该系列文章…...

Vite+TS项目中配置路径别名

在使用 Vite 和 TypeScript 的项目中配置路径别名,可以简化模块导入路径,提高代码的可读性和维护性。以下是详细的步骤和示例代码: 1. 配置 Vite 别名 前置条件 下载types/node 下面引入的path会用到 npm install types/node --save-dev原…...

看盘细节系列 篇二:集合竞价的9点18分大单打到3%以下或以上,9点19分撤单

文章目录 系列文章现象原因分析时间点含义正常情况测试市场反应诱导跟风操纵股价意图系列文章 看盘细节系列 篇一:集合竞价尾盘突变 现象 集合竞价中 9 点 18 分通过一笔大单或连续几笔大单将股价打到 3% 以下或以上,9 点 19 分又迅速撤单。从而在分时图上留下一根长长的上…...

Java继承简介

继承的本质:是代码的复用,重复使用已经定义好的方法和域(即全局变量) 要掌握继承首先要了解Java方法的重载和重写 方法的重载和重写 方法的重载 当前方法名相同,但是参数类型不同,发生重载 类比数学函…...

redis之哨兵集群搭建

一:哨兵集群工作概览图 1.监控:sentinel通过心跳监控redis的master和slave实例是否正常工作 2.故障转移:假如master出现故障,sentinel会选举一个slave作为新的master,当故障实例恢复后身份会变成slave,会以…...

保姆级AI开发环境搭建

目录 windows下环境搭建1. Python环境搭建2. 下载vLLM2.1 安装CUDA2.2 安装Pytorch2.3 安装vllm 3. 部署Deepseek(huggingface)3.1 DeepSeek的优化建议 4. ollama快速部署Deepseek4.1 下载Ollama4.2 配置Ollma4.2 运行模型4.3 其他Ollama命令 linux下环境…...

Arduino 型号的对比

常见 Arduino 型号的对比表格 涵盖了不同型号的关键参数和特点,方便你根据项目需求进行选择: 型号Arduino UnoArduino Mega 2560Arduino LeonardoArduino NanoArduino Due微控制器ATmega328PATmega2560ATmega32U4ATmega328P 或 ATmega168SAM3X8E&#…...

Kafka系列之:定位topic只能保存最新数据的原因

Kafka系列之:定位topic只能保存最新数据的原因 一、背景二、定位排查方向三、深入排查一、背景 kafka topic保存的数据少,topic只能保存最新的数据二、定位排查方向 能想到的定位排查方向:topic能存储的数据量、topic数据保存的时间、topic数据大小./bin/kafka-configs.sh -…...

AtCoder Beginner Contest 391(A~E题题解)

A - Lucky Direction 思路&#xff1a;纯模拟的一个水题 #include <bits/stdc.h> using namespace std; #define int long long string s; signed main() { cin>>s;for(int i0;i<s.size();i){char cs[i];if(cN){cout<<"S";}else if(c…...

mysql mvcc 锁 关系

多版本并发控制&#xff08;MVCC&#xff09;是一种用于数据库并发控制的机制&#xff0c;它可以在保证数据一致性的同时&#xff0c;提高数据库的并发性能。下面结合 MVCC 机制&#xff0c;详细阐述常见的四种事务隔离级别&#xff08;读未提交、读已提交、可重复读、串行化&a…...

安卓手机基于 Termux 安装 AList 并设置开机自启的详细教程

安装 AList 安装 Termux&#xff1a; 点击下载 更新软件包&#xff1a;打开 Termux&#xff0c;运行以下命令以更新软件包列表并升级已安装的软件包&#xff1a; bash复制 pkg update && pkg upgrade安装 AList&#xff1a;运行以下命令安装 AList&#xff1a; bash复…...

LeetCode:503.下一个更大元素II

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;503.下一个更大元素II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[…...

实验5 配置OSPFv2验证

实验5 配置OSPFv2验证 1.实验目的 &#xff08;1&#xff09;OSPFv2 验证的类型和意义。 &#xff08;2&#xff09;配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 &#xff08;3&#xff09;配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…...

3步掌握文字转手写工具:免费高效实用指南

3步掌握文字转手写工具&#xff1a;免费高效实用指南 【免费下载链接】text-to-handwriting So your teacher asked you to upload written assignments? Hate writing assigments? This tool will help you convert your text to handwriting xD 项目地址: https://gitcod…...

so-vits-svc声压级标准化终极指南:避免音质损伤的10个关键步骤

so-vits-svc声压级标准化终极指南&#xff1a;避免音质损伤的10个关键步骤 【免费下载链接】so-vits-svc SoftVC VITS Singing Voice Conversion 项目地址: https://gitcode.com/gh_mirrors/so/so-vits-svc 你是否在使用so-vits-svc进行语音转换时&#xff0c;遇到过输出…...

破解AutoDock Vina金属对接难题:3种专业方案实战深度解析

破解AutoDock Vina金属对接难题&#xff1a;3种专业方案实战深度解析 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina AutoDock Vina作为最广泛使用的开源分子对接引擎之一&#xff0c;在处理含金属元素的蛋白…...

Tracepoint性能优化揭秘:从DECLARE_EVENT_CLASS看Linux内核如何节省50%内存开销

Tracepoint性能优化揭秘&#xff1a;从DECLARE_EVENT_CLASS看Linux内核如何节省50%内存开销 在Linux内核的性能调优领域&#xff0c;Tracepoint机制作为静态跟踪的核心基础设施&#xff0c;其性能表现直接影响着系统监控和故障诊断的效率。本文将深入剖析DECLARE_EVENT_CLASS共…...

Proteus8.9 安装避坑指南:从下载到稳定运行的完整流程

1. 为什么选择Proteus8.9&#xff1f; Proteus作为电子设计自动化&#xff08;EDA&#xff09;领域的经典工具&#xff0c;在单片机仿真和电路设计方面一直备受工程师和学生青睐。8.9版本之所以成为众多用户的首选&#xff0c;主要在于它对新型单片机的支持更加完善。比如STC15…...

Python实战:5分钟搞定分数傅里叶变换(FRFT)的数值计算与可视化

Python实战&#xff1a;5分钟搞定分数傅里叶变换&#xff08;FRFT&#xff09;的数值计算与可视化 在信号处理领域&#xff0c;傅里叶变换早已成为工程师们的标准工具&#xff0c;但你是否想过&#xff0c;在时域和频域之间还存在无数个"中间态"&#xff1f;这就是分…...

Electron应用自动更新全解析:如何用electron-updater搭建私有更新服务器(附Vue2示例)

Electron应用私有化自动更新体系构建指南 当你的Electron应用从开发阶段进入生产环境&#xff0c;如何确保用户始终使用最新版本&#xff1f;本文将带你从零构建一套企业级私有更新体系&#xff0c;涵盖服务端部署策略、客户端配置优化以及用户体验设计三大核心模块。 1. 更新服…...

5个高效方案解决League-Toolkit启动故障

5个高效方案解决League-Toolkit启动故障 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 问题现象&#xff1a;跨平台启动异常图谱…...

WiFi信号弱?5分钟搞懂dBi、dBm和dB的区别,选对天线不踩坑

WiFi信号弱&#xff1f;5分钟搞懂dBi、dBm和dB的区别&#xff0c;选对天线不踩坑 每次视频会议卡成PPT&#xff0c;游戏延迟飙红&#xff0c;或是刷剧总在关键时刻转圈——这些糟心体验八成是WiFi信号在作祟。很多人第一反应是升级千兆宽带&#xff0c;却忽略了无线信号从路由器…...

罗斯蒙特RoseMount手操器TREXLFPKL9S1

罗斯蒙特475手操器是一款由艾默生&#xff08;Emerson&#xff09;推出的高性能现场通讯设备&#xff0c;广泛应用于工业自动化领域&#xff0c;用于配置、校准和诊断HART及Foundation Fieldbus协议的智能仪表设备。它具备彩色图形界面、蓝牙通信、强大的现场诊断功能和可用户升…...