首页 > 系统相关 >nginx 根路径同时代理 http ws sse 三种请求

nginx 根路径同时代理 http ws sse 三种请求

时间:2024-10-28 14:43:22浏览次数:6  
标签:set http header server nginx ws proxy HTTP

HTTP(HyperText Transfer Protocol):超文本传输协议,是用于在客户端(通常是web浏览器)和服务器之间传输数据的协议。HTTP是Web的基础,用于请求和传输网页、图像、视频等资源。它采用请求-响应模型,支持多种方法(如GET、POST等),并可通过HTTP/1.1和HTTP/2等版本进行优化,以提高性能和用户体验。

WebSocket:WebSocket是一种在单个TCP连接上进行全双工通信的协议。它允许客户端和服务器之间实现实时双向数据传输。WebSocket通过握手过程建立连接,并在一次握手后保持该连接,从而减少了HTTP请求的开销,适合实时应用如在线聊天、股票实时更新等。

SSE(Server-Sent Events):服务器推送事件是一种通过HTTP协议向浏览器推送实时事件的技术。与WebSocket不同,SSE是单向的,数据从服务器流向客户端。它使用 text/event-stream MIME类型,适用于需要实时更新但不需要客户端响应的场合,如实时新闻推送、股票价格更新等。SSE易于使用并支持自动重连。

利用 map 实现

map 定义的就是一个字典(k,v),通过不同key,映射不同value值。

http {
    map $http_content_type $connection_header {
        default "upgrade";
        "text/event-stream" "keep-alive";
    }

    upstream http_backend {
        server 127.0.0.1:80;
    }

    server {
        listen 9123;
        # server_name your_domain_name;

        location / {
            proxy_pass http://http_backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_header;
            proxy_cache off;
        }
    }
}

使用 if 和变量实现

if 表达式里面不能直接包含指令 proxy_set_header Connection keep-alive,会报错,但是可以包含变量间接实现。

upstream http_backend {
    server 127.0.0.1:80;
}

server {
    listen 9123;
    # server_name your_domain_name;

    location / {
        set $connection_header "upgrade";

        if ($http_content_type ~* "text/event-stream") {
            set $connection_header "keep-alive";
        }

        proxy_pass http://http_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_header;
        proxy_cache off;
    }
}

标签:set,http,header,server,nginx,ws,proxy,HTTP
From: https://www.cnblogs.com/DHclly/p/18510592

相关文章

  • 异常:找不到模块“@/views/HouseDetail.vue”或其相应的类型声明。ts(2307)
    原因:在配置Vue项目路由,特别是使用TS时,可能会遇到模块声明错误。为了解决‘找不到模块’的ts(2307)错误,可以在src目录下创建vite-env.d.ts文件,然后引入特定代码来声明*.vue文件为Vue组件,允许通过import导入。这样通常能解决无法识别模块的问题。解决:在src目录下创建vite-env.d.ts......
  • 电脑没激活windows有什么影响
    电脑没激活windows有以下影响:1、功能限制;2、系统更新问题;3、版权与合法性;4、用户体验受损;5、安全隐患。在没有激活Windows的情况下,某些个性化功能将被限制,系统的定期更新也会受到影响。此外,未激活的Windows系统涉及版权和合法性问题,可能导致软件受到限制或罚款。一、功能限制......
  • Nginx
    Nginx基础source--->全网最全Nginx八股文讲解(25秋招走起~)-CSDN博客面试题source--->40道Nginx精选面试题|二哥的Java进阶之路(javabetter.cn)什么是Nginx?Nginx有哪些优点?Nginx应用场景?Nginx怎么处理请求的?Nginx是如何实现高并发的?什么是正向代理?什么是......
  • centos7 zabbix监控nginx的pv和uv和status_code
    zabbix监控nginx的pv:pv)cat/var/log/nginx/access.log|awk'{print$1}'|wc-l;;zabbix-get验证:[root@bogon~]#zabbix_get-s192.168.253.231-kpv_uv[pv]100zabbix监控nginx的uvuv)cat/var/log/nginx/access.log|awk'{prin......
  • ELK收集nginx日志
    配置nginx正则表达式路径:/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns正则表达式:URIPARAM1[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*NGINXACCESS%{IPORHOST:client_ip}(%{USER:ident}|-)(%{USER:auth}|-)\[%......
  • win7升级win10或直接安装Windows 10系统保姆级别教程
    一、准备工作1、安装说明:本教程适用能正常启动的64位操作系统的电脑安装win7及以上皆可,若电脑无法正常启动(或电脑是32位的)请选择用U盘安装Windows10系统。2、注意事项:安装系统后,电脑桌面和C盘的文件会全部消失(其它磁盘的文件不受影响)安装系统前请提前备份,建议安装前先完整......
  • HTTP相关返回值异常如何解决(上篇)
    ​今天我们讲讲HTTP相关返回值异常如何解决(实例持续更新中)一、HTTP介绍HTTP(超文本传输协议,HypertextTransferProtocol)是用于在网络上进行数据交换的应用层协议。它是万维网(WWW)的基础,允许客户端(通常是网页浏览器)与服务器之间进行通信。以下是对HTTP的一些基本介绍:基本概......
  • python系列【亲测有效-只到了图形化连接桌面】:Python 调用windows系统远程桌面应用
    Python调用windows系统远程桌面应用Python调用windows系统远程桌面应用使用pyautogui模块实现远程桌面应用的调用总结参考链接Python调用windows系统远程桌面应用远程桌面应用是一种方便用户在远程设备上访问和控制本地桌面的技术,对于远程办公、远程......
  • 高效自动化运维:Python在Linux与Windows环境下的应用
    高效自动化运维:Python在Linux与Windows环境下的应用目录......
  • 如何解决VMware 安装Windows10系统出现Time out EFI Network
    一、问题描述使用VMware17安装windows10出现如下图所示TimeoutEFINetwork…Windows10镜像为微软官方下载的ISO格式镜像;二、问题分析VMware17默认的固件类型是UEFI(E),而微软官网下载的Windows10ISO格式镜像不支持UEFI(E),支持BIOS(B),将固件类型更改为BIOS(B)即可。三......