nginx 代理http /prod-api/没问题,websocket /prod-ws/确通不了,为什么?该怎么配置?

nginx 代理http /api/没问题,websocket /apiws/确通不了,为什么?该怎么配置?
请大佬帮忙看看,问题在哪?
nginx.conf:


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    # GZip
    gzip  on;
    gzip_types text/plain application/x-javascript application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    
    # 匹配变量http_upgrade的值,根据匹配情况为变量connection_upgrade赋值
    map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
    }
    upstream websocket {
        server 192.168.2.81:8090
    }

    server {
        listen       9000;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm; 
            try_files $uri $uri/ /index.html;
        }
        
        
        #app
        location /app/ {
            root   html;
            index  index.html index.htm; 
            try_files $uri $uri/ /app/index.html;
        }
        
        #代理后端接口
        location /prod-api/ {
            proxy_pass http://192.168.2.81:8090/;   #转发请求的地址
            # proxy_connect_timeout 6000;     #链接超时设置
            # proxy_read_timeout 6000;        #访问接口超时设置
            # proxy_http_version 1.1;
            # proxy_set_header Upgrade $http_upgrade;
            # proxy_set_header Connection "upgrade";
        }
        
        #代理后端接口
        location /prod-ws/ {
            proxy_pass http://websocket;   #转发请求的地址
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $host;
        }
    }
}
阅读 2.9k
2 个回答
✓ 已被采纳

感谢各位的帮助,给了我很多支持。
这个问题最终看了axios的源码包。
axios对于http://域名+端口+接口串正常解析,对于/api/+接口串,善良的axios会帮助我加上前面的http://域名+端口,增加内容为当前服务的域名+端口。

# API
VUE_APP_BASE_API = '/prod-api'

所以:针对配置如上的情况,http请求有善良的axios给我加http://域名+端口。但是websocket却不会做多余的事情。

所以善良的axios迷惑了我,让我对nginx配置的无法放下,掉进了错误的坑里。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题