Nginx服务、Vite项目如何设置ws(websocket)代理?

这篇具有很好参考价值的文章主要介绍了Nginx服务、Vite项目如何设置ws(websocket)代理?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

最近干活中遇到请求访问地址代理的问题,http请求代理到是没啥问题,主要是WebSocket代理配置,今天折腾了一上午加下午一小时,才将其配置好,主要是部署服务器的时候nginx这一块不太清楚,作为一个初级前端,确实还有待提高。本文主要细致的讲解一下ws代理如何设置,在开发环境主要是vite代理设置方法,生产环境给Nginx设置代理。

请求地址及处理

在代码编写过程中,主要是url应该如何拼写,下面是项目中使用的请求地址:

//动态获取地址
const wsUrl = `ws://${location.host}/wsUrl/test`; 
// 创建连接
const socket = new WebSocket(wsUrl);

这里的地址需要注意/wsUrl,这个是拦截代理的标志(ps:这里也可以写别的路径替换/wsUrl,它不是必须的,但是后面配置需要注意这个标识),在前端用于标识ws请求,在设置代理的过程中主要用于请求拦截标识,实际请求会去掉它。

  • 实际访问后台的地址: ws://IP:Port/test
  • 前端访问的ws请求地址:ws://IP:Port/wsUrl/test

之所以加一层路径,主要还是为了拦截ws请求所用,具体理解可以看下面的配置方法。

Vite项目内配置ws代理设置

在vite的配置文件vite.config.ts/js文件中添加如下代理配置。

{
  base: "/",
  ...
  server:{
    proxy:{
      "/wsUrl":{
        target: "ws://127.0.0.1:8080", //这里是后台ws访问地址
        changeOrigin: true, //允许跨域设置
        ws: true, //websocket代理设置
        rewrite: (path)=> path.replace(/~\/wsUrl/,""), //拦截路径去除
      },
    },
  },
  ...
}

以上就是vite项目内设置ws代理的配置方法,可以看到vite中使用路径重写(rewrite)去除了/wsUrl,经过代理后最终访问的是上述的实际地址,所以这个标识只是用于拦截对应的ws请求。

nginx项目中配置方法

nginx配置文件一般相对位置都在 ./nginx/conf文件夹中,打开nginx.conf文件即可修改代理配置内容。

我使用的是Linux服务,文件位置在/usr/local/nginx/connf/文件夹中,具体位置不同系统镜像文件位置可能略有差异,找到配置文件即可。

nginx设置代理稍有不同,在我配置代理过程中采坑也不少(主要还是菜了),反复测试才有了如下可行结果:

...
http:{
  ...
  server{
    ...
    # WebSocket代理
    location /wsUrl/ {
      rewrite ^/wsUrl/(.*)$ /$1 break; #拦截标识去除
      proxy_pass http://192.168.100.20:8080; #这里是http不是ws,不用怀疑,代理的ip和port写ws访问的实际地址
      proxy_http_version 1.1; #这里必须使用http 1.1
      #下面两个必须设置,请求头设置为ws请求方式
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }
    ...
  }
  ...
}

rewrite这里正则写法不太清楚,但必须是上述格式,好像是匹配替换/wsUrl,不能去掉后面的斜杠(/),编写完成配置文件保存后,需要重启nginx服务,重启后使用上述前端访问地址发起ws请求即可成功连接到代理服务。

小结

设置代理还是需要理解其中运行的逻辑,不管是开发环境代理,还是生产环境代理,本质上都是一样的,通过正则匹配请求对应路径进行拦截,然后拦截后对请求进行处理,在本文演示示例中,主要是去除了/wsUrl路径再转发请求,如果请求后台的路径是/wsUrl/test,其实这里也不需要去除该地址,直接匹配转发请求即可。如果觉得本文对您有帮助烦请点个赞,鼓励一下作者,如果文章中有错误或不合理的地方,欢迎指正!文章来源地址https://www.toymoban.com/news/detail-823161.html

到了这里,关于Nginx服务、Vite项目如何设置ws(websocket)代理?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx配置WS代理

    本文背景如下: Vue+SpringBoot 前后端分离,vue采用Nginx作为服务,涉及内外网使用的场景。 技术使用:Stomp 和 rabbitMQ Nginx增加如下配置: VUE前端配置(注意https和http的区别):

    2024年02月11日
    浏览(47)
  • Nginx共同配置WS(WebSocket)和Http

    首先 WebSocket协议不是超文本传输协议。 尽管WebSocket协议确实使用HTTP请求启动了一个新连接,但它会迅速将连接升级为完整的WebSocket (这需要在初始请求中包含Connection: upgrade头,而不是Connection: keep-alive)。 所以,在nginx配置的时候,先对请求进行升级 配置项: 然后再对nginx代

    2024年02月16日
    浏览(41)
  • Nginx方向代理wss或ws

    说明:如果是内网环境使用,可以手动创建证书使用,如果是公网环境,则必须为公网域名证书或ip证书,使用域名可以去阿里创建免费证书并下载就可以了。 在线测试

    2024年02月08日
    浏览(48)
  • linux配置nginx websocket ws转发,绝对好用

    1:http下面加入 2:http下面 server 加入 我这里配置的 拦截websocket 转发到本地的ws地址8066端口,根据自己的服务器配置

    2024年02月12日
    浏览(43)
  • Nginx配置WebSocket(WS)和WebSocket Secure(WSS)的完整指南

    Nginx是一款广泛使用的高性能Web服务器和反向代理服务器。除了传统的HTTP和HTTPS协议支持外,Nginx还可以配置WebSocket(WS)和WebSocket Secure(WSS),以便实现实时双向通信。本文将提供关于如何在Nginx中配置和使用WebSocket和WebSocket Secure的详细指南。 要开始配置WebSocket和WebSocket

    2024年02月16日
    浏览(50)
  • Nginx反向代理服务流式输出设置

    提问:为什么我部署的服务没有流式响应 最近在重构原有的GPT项目时,遇到gpt回答速度很慢的现象。在使用流式输出的接口时,接口响应速度居然还是达到了30s以上。 分析现象我发现,虽然前端还是流式打印的结果,但是,好像是接口处理完了,再以流式返回到的前端。 因

    2024年02月13日
    浏览(44)
  • nginx代理后,nodejs如何获取用户真实ip地址(包括websocket获取用户真实IP地址)

    因为nginx代理的原因,我们在请求头中获取到的用户ip只是nginx代理的ip,并非用户真实ip,原因是经过反向代理后,由于在客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,可以通过$remote_addr变量拿到的将是反向代理服务器的ip地址。 第一步,修改

    2024年02月13日
    浏览(75)
  • nginx代理websocket无法链接到服务,服务端报错:Handshake failed due to invalid Upgrade header: null

    1、使用nginx代理websocket 2、websocket无法成功连接到服务端 3、服务端报错 4、nginx日志正常,没有发现与该websocket地址有关的报错 1、前端表现如下 1、协议是否使用有误,从上面的截图可以看出,websocket使用的是 wss ,那么nginx代理时,使用的协议是否是 https 检查结果:nginx代理

    2024年02月02日
    浏览(53)
  • vue3.2+vite+代理,使用websocket

    之前以为websocket复杂,想使用插件来实现,查了一番资料,原生写法就很简单。 查询列表,需要实时获取员工上报的数据 Table.vue 因为跨域问题,这里使用了vite的proxy代理功能 vite.config.ts 如果代理设置好,连接成功,以上websocket会打印\\\"连接成功\\\"和输出返回。 完! 项目运行

    2024年02月10日
    浏览(47)
  • Vite4 + Vue3 项目打包并发布Nginx服务器 (前端必看)

    这里因为我们有的小伙伴可能不太需要服务器,单纯学习的话也没有必要去买一个服务器。如果需要把自己的东西部署到公网上,有很多方式,自行百度。你也可以购买阿里云或者腾讯云。逻辑都是一样的,我这里使用的虚拟机+centos系统,我已经提前在自己的机器安装好了。

    2024年02月05日
    浏览(90)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包