小编Jey*_*ork的帖子

如何为Meteor/SockJS和WebSocket设置apache代理?

我有一个apache代理用于流星应用程序,apache和meteor在两台独立的机器上.我需要这样,因为apache必须服务于很多真实的网站,由于资源有限,在这台机器上安装meteor应用程序并不是一个好主意.

但是,如果我尝试通过代理从外部连接,则WebSocket握手失败,响应代码为400"只能升级到websocket".当我从局域网内直接连接到流星机器时,一切正常.当WebSocket失败时,SockJS/Meteor会重新回到XHR,但不幸的是,这会在应用程序中出现一些错误.所以我真的需要WebSocket才能在大多数情况下工作.

我用这里提到的补丁修补了我的apache安装:https://stackoverflow.com/a/16998664 看起来它运行良好但没有改变......

我的apache代理指令目前如下:

ProxyRequests Off
ProxyPreserveHost On
ModPagespeed Off
<proxy>
Order deny,allow
Allow from all
</proxy>
ProxyPass / http://10.0.2.6:3000/
ProxyPassReverse / http://10.0.2.6:3000/
Run Code Online (Sandbox Code Playgroud)

我甚至知道是什么引发了这个问题.apache代理与标题混杂在一起.离开我的机器的数据包的原始请求标题如下所示:

GET /sockjs/430/minw4r_o/websocket HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: http://example.com
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: myKey
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
User-Agent: My Agent
Run Code Online (Sandbox Code Playgroud)

数据包从apache代理转发,如下所示:

GET /sockjs/430/minw4r_o/websocket HTTP/1.1
Host: example.com
Origin: http://example.com
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: myKey
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
User-Agent: My Agent
X-Forwarded-For: 24.xxx.xxx.xxx
X-Forwarded-Host: …
Run Code Online (Sandbox Code Playgroud)

apache proxy websocket meteor sockjs

7
推荐指数
3
解决办法
8893
查看次数

如何在 Ionic 的 5 离子输入上使用 MatAutocomplete?

MatAutocomplete貌似只能用在inputtextarea元素上。当您input使用自己的样式构建自定义角度组件时,您可以将其传递给本机,input在我的自定义输入组件上使用 [matAutocomplete] 中所述。

但是,你怎么能使用MatAutocomplete在现有的ion-input

据我所知,在使用 时ion-input,没有input像上面自定义输入元素所需的答案那样访问本机的简单方法。您可以在模板初始化后使用getInputElement()ion-input但从MatAutocomplete文档中我没有看到以mat-autocomplete编程方式初始化然后将其绑定到动态的方法input

我缺少的东西,还是有使用任何其他的好办法MatAutocompleteion-input

ionic-framework angular-material angular

6
推荐指数
0
解决办法
282
查看次数

使用伪造(或其他JavaScript方法)生成随机大素数

我需要在JavaScript中生成一个随机的大(大约4096位)素数,我已经在使用伪造了.Forge必须有某种生成器用于执行这样的任务,因为它实现了RSA,RSA也依赖于随机素数.但是,当你只是想获得一个随机的素数时,我还没有在伪造的文档中找到一些东西(类似的东西var myRandomPrime = forge.random.getPrime(4096);会很棒).

那么在JavaScript中获得这样一个素数(有或没有伪造)的最佳方法是什么?

javascript random primes

5
推荐指数
1
解决办法
2065
查看次数

如何防止Meteor/Cordova应用程序连接到10.0.2.2?(为什么应用程序会连接到那里?)

我有一个Meteor应用程序,它在本地服务器上运行以进行开发(http://10.0.2.10:3000).该ROOT_URL设置正确,以便__meteor_runtime_config__.ROOT_URL等于这个网址.当然,该应用程序在10.0.2.0/24内的客户端计算机上的浏览器中运行良好.该应用程序也在我的Android手机上的移动chrome/firefox上工作正常,这也是10.0.2.0/24的一部分.然而,当我尝试在这款手机上运行它meteor run android-device --mobile-server http://10.0.2.10:3000/时会出现奇怪的事情:

当应用程序第一次启动时(或者在我清除所有应用程序数据后第一次启动)它会像应该的那样工作(来自数据库的内容被加载)几秒钟.然后应用程序重新加载,并且不再加载来自数据库的任何远程内容.我添加了以下函数来查看Meteor尝试连接的位置:

Meteor.startup(function(){
    console.log(__meteor_runtime_config__.ROOT_URL);
})
Run Code Online (Sandbox Code Playgroud)

第一次加载远程内容时,它会像我期望的那样返回http://10.0.2.10:3000/.第二次没有加载远程内容时,它返回http://10.0.2.2:3000/.

现在的问题是,为什么Meteor/Cordova这样做,我该如何阻止这种行为呢?因为显然我无法以这种方式测试应用程序.当我有一个FQDN和HTTPS代理时,我还不确定它是否可以在生产中工作,但这已经超出了这一点.

我试图找到10.0.2.2,因为我的局域网中没有任何东西在那里运行,我没有在任何地方指定这个IP,并且发现它/cordova-build/www/application/index.html似乎是从中生成的boilerplate_web.cordova.html(请参阅此链接https://searchcode.com/codesearch/view/91819963 /).但是,Meteor提供了使用文件夹覆盖这些生成的文件的可能性cordova-build-override,因此我删除了整个文件

if (/Android/i.test(navigator.userAgent)) {
    //[...]
}
Run Code Online (Sandbox Code Playgroud)

阻止并添加一个简短的console.log('removed').这被调用所以我知道覆盖是成功的,当我grep通过整个构建的.apk文件10.0.2.2再也找不到 - 仍然行为是相同的.

有什么想法正在发生什么,怎么做?

cordova meteor ddp

5
推荐指数
1
解决办法
1119
查看次数