首页 > 编程知识 正文

java写nginx,java实现上传文件到服务器

时间:2023-05-03 16:10:57 阅读:12449 作者:488

使用this Websocket library和here示例创建多个基于websockets的服务。

收到请求的主服务器是Nginx服务器,根据其源(基于域)转发请求,因此可以确保收到的请求针对web套接字。

但问题是:

Publicvoidonopen(websocketws,客户端手持设备) {

system.out.println (---------------' );

system.out.println (ws.getremotesocketaddress ();

system.out.println (---------------' );

}

getRemoteSocketAddress始终返回nginx服务器IP,如/192.168.1.100:43556

我的nginx配置如下。

服务器{

listen 80

server_name we.mydomain.com;

访问_ log/var/log/nginx/access-ws-debug.log;

error _ log/var/log/nginx/error-ws-debug.log;

set_real_ip_from 192.168.1.0/24;

real_ip_header X-Real-IP;

real_ip_recursive on;

位置/{

proxy _ pass http://192.168.1.101336054321;

proxy_http_version 1.1;

proxy _ set _ headerx-real-IP $ remote _ addr;

proxy_set_header Host $http_host; #主机

proxy _ set _ headerx-forwarded-for $ proxy _ add _ x _ forwarded _ for;

proxy _ set _ headery-real-IP $ realip _ remote _ addr;

proxy _ set _ header upgrade $ http _ upgrade;

proxy _ set _ header connection ' upgrade ';

proxy_connect_timeout 1d;

proxy_send_timeout 1d;

proxy_read_timeout 1d;

}

}

nxing配置有问题吗? 或者有其他方法获取网络套接字背后用户的IP吗?

谢谢你特异的钢笔回答。 以下代码与所提到的库无关。 这是没有库的jsp中的“经典”Web实现。

我修好了握手。 就像这样。

@Override

公共语音修改手持机(

ServerEndpointConfig config,

handshake请求请求,

手动响应响应

() )。

http会话http会话=(http会话) request.get http会话);

config.getUserProperties ().put ) httpSession.class.getname ),httpsession );

config.getUserProperties ().put )、request.getHeaders ) );

}

要获取Headers,只需通过打开调用即可。

@OnOpen

publicvoidonopen (finalsessionsession,EndpointConfig config )//thishappenswhenjavascriptopenssocketsesssion

对象列表=config.getuser properties ().get ) ' headers );

system.out.println------------------------------------------ -。

system.out.println (列表;

system.out.println------------------------------------------ -。

}

返回的标题格式如下: (使用我的手机) :

{ upgrade=[网络套接字],

接受语言=[ en-us,en; q=0.9,es; q=0.8] )、

cookie=[ jsessionid=0BAE 99d FDE5dd81 d 20 CFF 04 e 4257 D7 Fe ],

sec-web套接字- extensions=[ per message-deflate; 客户端_ max _ window _ bits ],

origin=[https://mywebsite.com],

x前向- for=[1.2.3.4],

安全网络套接字版本=[ 13 ],

pragma=[no-cache],

x-real-ip=[1.2.3.4],

y-real-ip=[1.2.3.4],

host=[mywebsite.com],

连接=[ upgrade ],

sec-web socket-key=[ zrooewrbgrg 660 x7 OCI nog=],

cache-control=[no-cache],

接受编码=[ gzip,deflate,br],

用户代理=[ Mozilla/5.0 (Linux; 安卓8.0.0; sm-n950f(appleWebKit/537.36 ) khtml,like Gecko ) chrome/70.0.3538.80移动安全/537.36 ) }

IP可以在我住的地区附近进行地理定位。

解决方法:

这不是一项微不足道的工作,但只要从设置的标头(X-Real-IP )中获取原始IP,就可以清楚地看到配置。

导入javax.web socket.*;

import javax.web socket.server.handshake request;

import javax.web socket.server.server endpoint;

import javax.web socket.server.serverendpointconfig;

@serverendpoint(value='/test ',configurator=test.test configuratior.class )。

publicclasstestextendsendpoint {

@Override

publicvoidonopen (会话会话,端点配置端点配置) {

objecto=endpoint config.getuser properties ().get ) testconfiguratior.header_name );

//oshouldbethestringobjectyouarelookingfor

}

@OnMessage

publicvoidonmessage (会话会话,字符串msg )。

//do what u want

}

publicstaticclasstestconfiguratiorextendsserverendpointconfig.configurator {

staticstringheader _ name=' x-real-IP ';

@Override

publicvoidmodifyhandshake (serverendpointconfigsec,handshake请求请求,handshake响应) {

stringfirstfoundheader=request.get headers ().get ) header_name.tolowercase () ).get )0);

sec.getUserProperties ().put ) header_name,firstFoundHeader );

}

}

}

您可以使用TL.dr. javax.web socket.endpoint config # getuser properties映射来放置和稍后搜索数据。 一开始,我认为在使用这个正确的代码时会出现一些并发问题,但是无法再现。 建议在文档中也这样做。

3359 javaee.github.io/tutorial/web socket 010.html

更新:这是JSR 356的示例,不是上述框架特有的。

标签: nginx、java、web套接字

资料来源: https://codeday.me/bug/2019 07 01/1346077.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。