添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

路径:/etc/nginx/nginx.conf(每个人的路径可能不一样)

编辑nginx.conf,在http区域内一定要添加下面配置:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;

map指令的作用:
该作用主要是根据客户端请求中$http_upgrade的值,来构造改变$connection_upgrade的值,即根据变量$http_upgrade的值创建新的变量$connection_upgrade,创建的规则就是{}里面的东西。其中的规则没有做匹配,因此使用默认的,即$connection_upgrade的值会一直是upgrade。然后如果$http_upgrade为空字符串的话,那值会是close。

2.修改server区域的配置:

路径:/etc/nginx/conf.d/netcore.conf(每个人的路径可能不一样,文件名也是自定义的)

该路径是根据nginx.conf里面的配置来的:

编辑路径下的文件netcore.conf

#之前配的内容:
server {
    listen 80;
    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
#修改为:
server {
    listen 80;
    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_read_timeout 3600s;               

其中proxy_read_timeout默认是60s,60s内不操作websocket就会断开,我们可以把它设置大一点,这里为设置为一个小时。

配置完成后重启下nginx:

nginx -s reload

3.连接测试

以下是websocket的连接测试

websocket连接成功了,但是我发现该站点的post请求方式失败了,返回状态码400。原因是nginx配置导致的。

查看nginx日志

解决方法:我们把websocket和http的location分开来配置,配置如下

server {
    listen 80;
     location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
    #websocket path
    location /api/MessageRelease {
        proxy_pass http://localhost:5000/api/MessageRelease;
        proxy_http_version 1.1;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_read_timeout 3600s;              

配置完成后重启下nginx:

nginx -s reload

这样websocket和http的请求就不会冲突了。

参考文章:

https://www.cnblogs.com/kevingrace/p/9512287.html

https://blog.csdn.net/cm786526/article/details/79939687

https://www.cnblogs.com/piperck/p/7066286.html

1.修改http区域的配置:路径:/etc/nginx/nginx.conf(每个人的路径可能不一样)编辑nginx.conf,在http区域内一定要添加下面配置:map $http_upgrade $connection_upgrade {default upgrade;''close;}map指令的作用:该作用主要是根据客户端请求中$http...
WebSocket协议相比较于HTTP协议成功握手后可以多次进行通讯,直到连接被关闭。但是WebSocket中的握手和HTTP中的握手兼容, 它使用HTTP中的Upgrade协议头将连接从HTTP升级到WebSocket。这使得WebSocket程序可以更容易的使用现已存在的基础设施。 WebSocket工作在HTTP的80和443端口并使用前缀ws://或者wss...
目录nginx proxy_set部分常见配置nginx proxy_set部分常见配置 proxy_set_header Host $host; #用途:设置要发送到代理服务器的HTTP请求头的Host字段。$host变量将被替换为客户端请求中的实际主机名。 proxy_set_header Connection ""; # 用途:清空要发送到代理服务器的HTTP请求头的Connection...
最近在做项目的时候用到了webSocket协议,而且是在微信小程序中用到了webSocket,微信小程序中使用wss协议的时候不能设置端口,只能使用默认的443端口。我擦,我的https已经监听了443端口,webSocket再去监听443,肯定不行啊。要想办法解决,老大把这个问题交给我了,我愉快(手动懵逼)的接收了这个任务。想到了两种办法解决。一种解决办法是把webSocket部署到另一台服务器上,这样成本也太高了。另一种办法,就是使用nginx反向代理。 因为webSocket协议是基于http协议升级的(见下图),所以可以使用nginx反向代理webSocket. webSocket
1. 背景 一个项目,使用nginx进行代理回源,新版本提交给测试同学后反馈说,回源Host不对。 第一反应:不应该啊,这个版本我没改回源Host相关的内容啊,是不是你环境问题?哈哈,典型的开发人员思维。不过也只是自己这么想了一下,还是赶紧解决问题了。 首先看了下代码提交记录,lua代码没有修改回源Host,排除;在回源的location中,增加了两行配置。然后就没有其他改动了。难道是location中的配置导致的? 配置文件结构如下: http { upstream origin_upstre
proxy_pass http://websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; 其中,map 块用于设置 $connection_upgrade 变量,用于升级连接协议;upstream 块用于设置 WebSocket 服务器的地址和端口;server 块用于监听端口和设置代理。 3. 保存配置文件并重启 Nginx 在保存配置文件后,使用以下命令重启 Nginx: sudo /usr/local/nginx/sbin/nginx -s reload 4. 验证 WebSocket 是否可用 使用浏览器访问配置好的域名或 IP 地址,打开开发者工具,切换到 Network 标签页,找到 Upgrade 请求头,如果该请求头的值为 websocket,则说明 WebSocket 已经配置成功。 以上就是配置 Nginx 支持 WebSocket 的步骤,希望能对你有所帮助。