我正试图通过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;
此处列出了其他预定义的变量。