2015-12-16 36 views
0

我試圖通過本地主機訪問我的java項目,頭中的數據保留。所以下面的方法工作正常。 Websocket正在被打開。當在nginx中使用java應用程序時丟失頭中的數據

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; 
} 

這是我的申請

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的命中,則以上方法返回錯誤請求。 所以我不知道標題中的數據在哪裏通過nginx擊中。而websocket根本沒有開放。

任何建議PLZ

+1

你應該編輯你的問題並添加你的'nginx'配置。 –

+0

我添加了nginx配置 –

回答

0

你需要一些更多的報頭添加到您的nginx配置代理服務器的WebSockets。見this document

添加到您的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; 

其他預定義變量是listed here

相關問題