目录
在本地开发环境中一直使用的是windows+http+websocket,本地测试都是正常的,但是部署到线上时使用的是https,导致websocket一直连接失败
ws://ip.端口/GisqPlatformExplorer/ws/login.do
其中loginWebSocketUrl=ws://192.168.xx.xx:8082
原理就是:当我websocket访问路径含有/ws/login.do时,会对该访问进行loginwebsocketHandler处理。我这里功能主要是访问该路径时,记录用户登录登出日志的功能(前面博客有写过)。
linux+https+nginx+websocket
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
client_max_body_size 1024M;
#gzip on;
server {
listen 11921 ssl;
server_name localhost;
ssl_certificate .\ssl\8872433_xxx.cn.pem;
ssl_certificate_key .\ssl\8872433_xxx.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /GisqPlatformExplorer/ws/login.do {
proxy_pass http://xx.xx.xx.xx:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# HTTPS server
server {
listen 443 ssl;
server_name localhost;
ssl_certificate ssl/cert.crt;
ssl_certificate_key ssl/cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
location /GisqPlatformExplorer/ {
proxy_pass http://localhost:8081;
}
}
}
Uncaught DOMException: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS
解决方案:改成wss://xx.xx.xx.xx:11921/GisqPlatformExplorer/ws/login.do与websocket建立连接
WebSocket connection to 'wss://xx.xx.xx.xxx:11921/GisqPlatformExplorer/ws/login.do' failed
有两个地方要注意:
一个是域名问题:使用wss时必须要使用域名去访问。
一个是nginx配置问题: ‘
错误的配置:
原因主要是加“/”与不加“/”的区别没有搞清楚:nginx中斜杠(/)详解,配置location、proxy_pass时,加“/”与不加“/”的区别
location /GisqPlatformExplorer/ws/login.do {
proxy_pass http://xx.xx.xx.xx:8081/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
实际访问代理地址:http://xx.xx.xx.xx7:8081/
location /GisqPlatformExplorer/ws/login.do {
proxy_pass http://127.0.0.1:8081/GisqPlatformExplorer/ws/login.do;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
实际访问代理地址:http://127.0.0.1:8899/GisqPlatformExplorer/ws/login.do
location /GisqPlatformExplorer/ws/login.do {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
实际访问代理地址:http://127.0.0.1:8081/GisqPlatformExplorer/ws/login.do
再次测试访问wss://xx.xx.xx.xxx:11921/GisqPlatformExplorer/ws/login.do路径时建立连接成功。
(不了解必定会踩坑)
1.http情况下用ws,https情况下必须要使用wss
https相当于使用http+ssl认证,使用https时websocket访问(比如建立链接时)必须要使用wss
2. 使用域名
https下一般都是域名去访问的,存在有域名解析的过程,因此wss时也要使用域名
3.使用域名+指定端口
这个之前没有了解过,只是认为域名就包含了端口,其实也是可以指定端口的下面是现场环境访问的路径
nginx斜杠问题:
参考如下写的不错,很容易理解
Nginx中proxy_pass的斜杠(/)问题 - 达摩院的BLOG - 博客园
location /api1/ { proxy_pass http://localhost:8080; }
在访问http://localhost/api1/xxx时,会代理到http://localhost:8080/api1/xxx
location /api2/ {
proxy_pass http://localhost:8080/;
}
当访问http://localhost/api2/xxx时,http://localhost/api2/(注意最后的/)被替换成了http://localhost:8080/,然后再加上剩下的xxx,于是变成了http://localhost:8080/xxx。
主要看proxy_pass http://localhost:8080,这种方式称为不带URI方式;
proxy_pass http://localhost:8080/xx或http://localhost:8080/,这种方式称为带URI方式;
其中不带URI方式主要是匹配(保留匹配路径及后面的所有),而带URI方式主要是替换(将匹配到的相同部分替换掉,然后保留完全匹配后面的所有)
vfork 与fork异同总结前言调⽤fork或vfork函数是Linux创建⼀个新进程的⽅法.fork由fork创建的新进程被称为⼦进程(child process)。该函数被调⽤⼀次,但返回两次。两次返回的区别是⼦进程的返回值是0,⽽⽗进程的返回 值则是新⼦进程的进程ID。fork之后经常跟随着exec。作为替代,使⽤了在写时复制(..._简述fork与vfork的区别
rviz控制远程主机,下发导航和重置位姿gedit ~/.bashrc在本机添加以下字段export ROS_MASTER_URI=http://192.168.1.102:11311 #填写远程主机ipexport ROS_HOSTNAME=`hostname -I` #不需要修改export ROS_IP=192.168.1.167 #填写本机ip或者添加以下字段,需要使用的时候就输入ros_ssh_on,不需要远程的时候就可以ros_ssh_offfunction ros
token合约是官方提供的一个样例,这里给出我修改过的版本,方便演示.contract MyToken { /* Public variables of the token */ string public name; string public symbol; uint8 public decimals; /* This creates an..._web3 approve
Android studio 编译错误:CreateProcess error=206, 文件名或扩展名太长。原因为 bin 文件的路径层级太多解决方法:Android Studio -> Run -> Edit Configurations -> Templates -> Application-> shorten command line: 选择 JAR manifest -java -cp classpath.jar classname [args]..
--(完美WORD文档DOC格式,可在线免费浏览全文和下载)值得下载!设备驱动程序的开发流程进行嵌入式Linux系统的开发,很大的工作量是为各种设备编写驱动程序。在ARM平台上开发嵌入式Linux的设备驱动程序与在其他平台上开发是一样的。总的来说,实现一个嵌入式Linux设备驱动的大致流程如下:(1)查看原理图,理解设备的工作原理(2)定义主设备号(3)在驱动程序中实现驱动的初始化。如果驱动程序采...
java播放mp3格式音频文件将jl1.0.0.1.jar拷贝到项目中,并添加到Library源代码package com.lt.music;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import..._java能用flie类型接收mp3文件吗
有时候我们需要查看mysql的建表语句,以下是具体操作查看数据库创建语句SHOW CREATE DATABASE ZOO\G;类似的查看建表语句:查看所有存储引擎:SHOW ENGINES \G; 查看默认存储引擎:SHOW VARIABLES LIKE 'storage_engine';查看当前使用数据库:SELECT DATABASE();或者使用命令:STATUSwin下修改默认存储引擎,找...
**1.创建索引 CREATE INDEX** CREATE [unique] INDEX [user.]index //索引名 ON [user.]table //建立索引的表名 (column [ASC | DESC] [,column[ASC | DESC] ] … )//建立索引的列,一个索引最多有16列,long列、long raw列不能建索引列 ,asc升序排列(默认)desc_改索引 要清空数据吗
论文地址:Context Encoding for Semantic Segmentation 这是CVPR2018上的一篇oral,来自商汤科技CNNs are able to capture the informative representations with global receptive fields by stacking convolutional layers wi..._context encoding for semantic segmentation
标题是什么意思?可能一开始觉得怪怪的,字体颜色不就是一个css的样式就改变了吗?css样式是改变整个字体的颜色,但是怎么改变半个甚至0.3333...个字体的颜色呢?先看看效果,预览网址CodePen地址:codepen.io/itagn/pen/a…从零开始html<div class="box"> <div class="down">东东么么哒<...
数据库链接地址:Linux运维必会的100道MySql面试题之(一)Linux运维必会的100道MySql面试题之(二)Linux运维必会的100道MySql面试题之(三)Linux运维必会的100道MySql面试题之(四)史上最全的大厂Mysql面试题在这里企业面试题|最常问的MySQL面试题集合(一)企业面试题|最常问的MySQL面试题集合(二)面试中有哪些经典的数据库问题?...
1、在白盒测试用例设计中,有语句覆盖、分支覆盖、条件覆盖、路径覆盖等,其中( A )是最强的覆盖准则。为了对如下图所示的程序段进行覆盖测试,必须适当地选取测试用例组。若x, y是两个变量,可供选择的测试用例组共有Ⅰ、Ⅱ、Ⅲ、Ⅳ四组,如表中给出,则实现判定覆盖至少应采取的测试用例组是( B )或( C );实现条件覆盖至少应采取的测试用例组是( D );实现路径覆盖至少应采取的测试用_白盒测试