在java应用程序之间使用nginx时,会丢失标头中的数据



我正试图通过localhost访问我的java项目,头中的数据保留了下来。因此,以下方法效果良好。Websocket正在打开。

if (!headerContainsToken(req, "upgrade", "websocket")) {
        resp.sendError(HttpServletResponse.SC_BAD_REQUEST);
        return;
   }
private boolean headerContainsToken(HttpServletRequest req,
        String headerName, String target) {
    Enumeration<String> headers = req.getHeaders(headerName);
    while (headers.hasMoreElements()) {
        String header = headers.nextElement();
        String[] tokens = header.split(",");
        for (String token : tokens) {
            if (target.equalsIgnoreCase(token.trim())) {
                return true;
            }
        }
    }
    return false;
}

这是我的应用程序的nginx配置

server {
listen test:80;
server_name  test;
root /home/local/apache-tomcat-8.0.18/webapps/;
location / {
    proxy_set_header X-Forwarded-Host;
    proxy_set_header X-Forwarded-Server;
    proxy_set_header X-Forwarded-For;
    proxy_pass http://127.0.0.1:8080/;
}

但是,当同一个应用程序通过nginx被命中时,上述方法会返回错误请求。所以我不知道当通过nginx时,头中的数据去了哪里。网络套接字根本没有打开。

任何建议plz

您需要向代理WebSockets的nginx配置中添加更多的头。请参阅本文档。

将其添加到nginx配置的http容器中:

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

并将您的location块更改为:

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

如果您也需要添加X-标头,则它们需要一些值。例如:

proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

此处列出了其他预定义的变量。

相关内容

  • 没有找到相关文章

最新更新