前面说过,要想发布小游戏,你必须有个https服务器。
这一步总归是要迈过去的。
现在我们来解决这里面的一些的问题。
准备工作
1、云服务器。我用的阿里云。以下以阿里系解决方案为例。
2、域名。几十块钱一年。
3、ssl证书。这个有免费的。
4、https域名备案。这个需要好几天的时间。
https与nginx配置
1、我这里以Ubuntu16为例。不同的系统目录会有区别。
2、安装Nginx:pip install nginx
3、安装证书。key文件和pem文件放入新建的/etc/nginx/cert文件夹中。
4、在目录/etc/nginx/sites-available中修改配置文件:
# Default server configuration
#
# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。
server {
listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
server_name www.lsldd.vip; #将localhost修改为您证书绑定的域名,例如:www.example.com。
root /var/www/html;
index index.html index.htm;
ssl_certificate cert/***.pem; #您证书的文件名。
ssl_certificate_key cert/***.key; #您证书的密钥文件名。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。
ssl_prefer_server_ciphers on;
location / {
root /var/www/html;
index index.html index.htm;
}
location ^~/socket.io {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:8888;
}
location ^~/res {
index index.html index.htm;
autoindex on; #开启索引功能
autoindex_exact_size off; #关闭计算文件确切大小,只显示大概大小(kb、mb、gb)
autoindex_localtime on; #显示本机时间而非 GMT 时间
}
}
注意这个配置文件应该在sites-enabled目录中有快捷方式相链接。
这个配置文件里最重要的是这几个地方:
1、 listen 443 ssl; 这里开启了https。
2、ssl_certificate、ssl_certificate_key :证书的路径配置。
3、location 配置。
location ^~/socket.io配置的是socketio。
你已经发现了,小游戏用socketio连接服务器,会报如下错误:
所以,我们这里配置了转发,凡是socket.io请求都转发到http://127.0.0.1:8888,其中ip地址是我们游戏服务器的ip,8888是我们的游戏端口。
location ^~/res配置的是文件服务器。我们提到小游戏需要远程下载文件,因此必须把存放res的目录配置为可以下载。
注意:这一步配置不好,会报ERR_SSL_PROTOCOL_ERROR错误。
creator测试
现在服务器开启端口号8888,客户端使用creator连接。
1、客户端测试。代码如下:
defines.serverUrl = "wss://XXXX.com"
var opts = {
'reconnection': true,
'force new connection': false,
'transports': ['websocket'],
'secure': true,
}
_socket = window.io.connect(defines.serverUrl, opts);
看到这里你很奇怪,服务器地址的端口号不是8888吗?connect不用写端口号?
注意这里有个天坑!不用写端口号!
原因是wss连接使用默认端口号,nginx才会正确的转发到http://127.0.0.1:8888!