微信小程序需要使用https与wss能才进行连接,虽然开发模式下可以使用http与ws,但发布的时候还是需要安全协议,网上的各种配置要么是单台nginx服务器配置,要么就是不够直接明了,自己记录下。

host地址预览:http://域名/openfire/

首先,像18.1中,IP 地址连接openfire方式为:host: ws://ip:port/ws/ ;
如果像=想利用域名替换掉IP和端口,替换后为:host: ws://域名/webSocket/ws/

域名替换:nginx配置步骤:

1-安装Nginx:版本 1.9以上

详见:https://www.yuque.com/lingjun-nb4x6/xl5ra1/pmsmy9

2-配置Nginx:代理openfire

在nginx.conf文件中加入下面的代码,ip与端口配成自己的,配置好后,客户端请求listen监听的端口,ip为nginx所在服务器的地址,openfire服务器名称在集群中是一样的。例如我测试配置的:
Nginx所在服务地址:http://192.168.1.102
Listen监听端口:80/443
Openfire服务器名称:dev_test

创建wss.conf文件,内容如下:

map指令的作用:
#根据客户端请求中$ http_upgrade 的值,来构造改变$ connection_upgrade的值
#即根据变量$ http_upgrade的值创建新的变量$ connection_upgrade,
#创建的规则就是{}里面的东西。其中的规则没有做匹配,因此使用默认的.
#即 $connection_upgrade 的值会一直是 upgrade。然后如果 $http_upgrade为空字符串的话,
map $http_upgrade $connection_upgrade {
default Upgrade;
‘’ close;
}
#负载均衡http连接
upstream wsbackhttp{
#ip需替换成对应的openfire 服务器外网地址:如:192.168.1.102
server ip:7070;
keepalive 1000;
}

在nginx.conf 中引入wss.conf配置文件:

以下为伪代码配置:
http{
……
include /etc/nginx/conf.d/wss.conf;
servier{
listen 80;
server_name *.shelinpin.com;
# client_max_body_size 5M;
index /opt/H5/shelinpin/index.html;
charset utf-8;
access_log /mnt/logs/nginx/host.access.log;
include /etc/nginx/conf.d/http_server.conf;
error_page 500 502 503 504 /50x.html;
}

}

配置访问路径:

在http_server.conf中配置匹配 /webSocket/ 的访问
location /webSocket/ {
proxy_http_version 1.1;
#nginx代理到wsbackhttp配置,即访问:http://ip:7070/
proxy_pass http://wsbackhttp/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 3600s; #设置超时时长
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}

3-注意事项:

前端IP地址访问:host: ws://ip:port/ws/ ;
域名替换后访问:host: ws://域名/webSocket/ws/
注意:
1- 域名后webSocket后的ws不可省略;
2-请求协议ws/wss不可换成http/https;
3-此处nginx监听的是80端口,也可以监听443端口,用wss://域名/webSocket/ws/访问;
实现在微信小程序内wss(微信小程序内只支持:https/wss访问),连接openfire实现聊天功能;
Nginx监听443端口时,Nginx同样可以代理到7070端口,用ws去连接openfire服务器;Nginx配置只需将80给为443即可。
4- 域名后webSocket后的ws最好也不要配置Nginx 负载均衡中的端口后(好像访问不了);