Nginx作为WebSockets和POST请求的转发代理

3

我目前使用nginx作为WebSockets的转发代理,迄今为止一切都运行良好。客户端连接方式如下:

var ws = new WebSocket('ws://10.30.0.142:8020/');

我也希望能够转发一个POST请求。在这种情况下,客户端将/post添加到ws地址中,使地址扩展为“ws://10.30.0.142:8020/post”。但是对该地址的请求返回:

http://10.30.0.142/post 404 (Not Found)

我正在使用以下配置文件(nginx.conf),很可能对于POST请求(位置/ post /)是错误的:

upstream websocket {
        server 127.0.0.1:8010;
}

server {
        listen       8020;
        server_name  server;
        root /var/www/html;
        expires off;

        keepalive_timeout 0;

        access_log /dev/null;

        location / {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }

        location /post/ {
            proxy_pass http://127.0.0.1:8010;
       }

        location ~* \.(?:css|js|map|jpe?g|gif|png)$ { }

    }

 }

我应该如何正确配置此文件以解决这个问题?
1个回答

2
幸运的是,修复方法非常简单:只需将location /post/ {这一行更改为location /post {,多余的斜杠仅匹配请求到/post/<something else>,根据您的描述,这不是您想要的。

实际上,如果您只想匹配对/post的请求,而不是对/post<some other string>/post/<some other string>的请求,那么您甚至可以将该行更改为location =/post {


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接