分类归档: Programming

编程编程编程。。。

改hosts不生效?教你清理Chrome的DNS缓存

在进行web开发的时候,我们经常会修改hosts文件进行测试,但是偶尔会发现改了hosts文件并不能立刻生效。这是由于浏览器自身对DNS(域名指向)是有进行缓存的,除了缓存之外,由于HTTP1.1支持连接复用,如果之前打开过这个页面,那么即使清理了DNS缓存也会因为复用连接再继续连接到旧的域名指向地址。如果出现连接被复用的情况就需要手动关闭活跃连接了。

查看实际连接地址

查看实际实际连接地址可以通过开发工具的网络面板进行查看。

清理缓存方法

1、在地址栏输入:chrome://net-internals

2、在DNS选项卡下,点击“Clear host cache”,清空缓存;

关闭活跃连接方法

1、在地址栏输入:chrome://net-internals;

2、在Sockets选项卡下,关闭活跃的连接;

再附赠一个清除MacOS DNS缓存的方法

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

上面三招下来还不行,再来捶我。

Read: 623

Nuxt不停机部署指南

在我们的服务器环境中有不少Nuxt应用,但是项目的配置都有问题,会导致项目部署重启的时候会不可用,提示 502 Bad Gateway。而且启动服务的时候总会有奇怪的错误信息,而真正的错误日志又看不到。

下面直接讲正确部署与重启的姿势是怎样。

配置服务

首先我们需要在工程根目录创建一个PM2环境配置文件 ecosystem.config.js

module.exports = {
apps: [
{
name: '项目名称', // 如 ks.mbachina.com
exec_mode: 'cluster', // 启动模式,cluster为集群,无需修改
instances: 'max', // // 实例数量,max为CPU核心数,无需修改
script: './node_modules/nuxt/bin/nuxt.js', // 无需修改
args: 'start' // 启动参数,通常无需修改
}
]
}

构建工程

这里没什么特别的,本地通过 npm run build 或者通过Jenkins进行构建部署到服务器。

需要注意的点是需要将上面的 ecosystem.config.js 部署到服务器上的项目根目录。

启动服务(创建服务)

cd 工程目录
pm2 start

执行上面的命令之后就会自动创建出pm2服务了。

重启服务(不停机重启)

pm2 reload $项目名称

将上面命令的 $项目名称 替换为在ecosystem.config.js中配置的实际项目名称即可。

注意这里用的是reload命令,不要用restart命令。

再次提示,更新代码后只需要执行reload命令即可,不需要先stop、delete再start。

参考:https://nuxtjs.org/docs/2.x/deployment/deployment-pm2

Read: 224

让KindEditor支持MP4视频(使用ckplayer播放器)

参考文章:https://blog.csdn.net/zhjx922/article/details/7601660

KindEditor本身支持音视频文件的上传,但是对于这些文件的支持是依赖于浏览器控件的,兼容性很差,而且现在比较常见的视频文件MP4也不支持,因此本文提供了对KindEditor进行修改的办法,使其在添加视频后可直接使用CKplayer进行播放。

CKplayer下载地址:http://www.ckplayer.com/down/
我这里使用的是2018-12-20的X1版本

使用简单调用方式:http://www.ckplayer.com/manualX/14.html

KindEditor我为了省事,我这里使用的是kindeditor.all.js直接进行修改,其他文件大同小异。

首先找到K.options,在embed数组中增加下面两项

'flashvars', 'allowfullscreen'

然后修改函数 function _mediaType(src)

// 把
if (/.(swf|flv)(\?|$)/i.test(src)) {
// 改成
if (/.(swf|flv|mp4)(\?|$)/i.test(src)) {

找到函数 function _mediaEmbed(attrs) 为html中的<embed标签添加两个属性

allowscriptaccess="always" allowfullscreen="true"

找到 KindEditor.plugin(‘media’ 修改音视频插件生成HTML的方法

// 将原有的HTML生成代码进行修改

var html = K.mediaImg(self.themesPath + 'common/blank.gif', {
src : url,
type : K.mediaType('.swf'),
width : width,
height : height,
quality : 'high'
});
// 改为

var html = K.mediaImg(self.themesPath + 'common/blank.gif', {
src : '/resource/ckplayer/ckplayer.swf', // 这里替换成你的ckplayer.swf的实际位置
flashvars : 'video=' + url.replace(/^video=/, ''),
type : K.mediaType('.swf'),
width : width,
height : height,
quality : 'high'
});

还需要将media插件代码的后半段中对视频属性修改的部分进行处理

// 找到
urlBox.val(attrs.src);
// 替换为
urlBox.val(attrs.flashvars);

最后只要在创建KindEditor实例时在items中添加’media’就可以了。

Read: 885

Vue.js 学习资料

awesome-vue (项目大集合)
https://github.com/vuejs/awesome-vue

前端开发之走进Vue.js
http://www.jianshu.com/p/78c9e5342990

ECMAScript 6入门
http://es6.ruanyifeng.com/

Vue.js 指南
https://cn.vuejs.org/v2/guide/

Vue.js API
https://cn.vuejs.org/api

vue-router
https://github.com/vuejs/vue-routerhttp://router.vuejs.org/zh-cn/advanced/meta.html

vue-resource
https://github.com/pagekit/vue-resource

vue-cli
官方指南:https://cli.vuejs.org/zh/guide/
https://github.com/vuejs/vue-cli
https://github.com/vuejs-templates/webpack
http://vuejs-templates.github.io/webpack/


https://github.com/vuejs/vue-cli
https://github.com/vuejs-templates/webpack
http://vuejs-templates.github.io/webpack/

vuex 中文文档
https://vuefe.cn/vuex/actions.html

官方实例
https://github.com/vuejs/vuex/tree/dev/examples/shopping-cart

vuex入门实例(中文,非官方)
https://segmentfault.com/a/1190000005018970#articleHeader11

饿了么Vue 2.0组件库 Element
http://element.eleme.io/#/zh-CN

Read: 134

解决IE8下FlashSocket无法连接java websocket的问题

参考文章: iOS 与 Java 服务器之间 SSL 握手失败的解决:Cipher Suites

Flash socket在IE8下会使用TLSv1进行通信,且Cipher suites只有有限几项jre默认不支持的。 我服务端用的是Springboot+Tomcat Embed,开启debug之后会看到cipher suite不支持的异常:not found cipher suites in common。

IE8的Cipher Suites: 
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)     
Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a)     
Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)    
Cipher Suite: TLS_RSA_WITH_RC4_128_SHA (0x0005)     
Cipher Suite: TLS_RSA_WITH_RC4_128_MD5 (0x0004)     
Cipher Suite: TLS_RSA_WITH_DES_CBC_SHA (0x0009)

而一般现在装的jdk/jre都是不包含这些的。


可以通过下载下面这个jar替换掉jre的lib/security目录下的两个jar包进行添加。

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

添加完成之后需要在配置文件中 server.ssl.ciphers 加入,我下面列了一个比较全的,可以用这个替换。    

ciphers: TLS_ECDH_anon_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_RC4_128_SHA, 
TLS_ECDH_RSA_WITH_RC4_128_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
TLS_KRB5_EXPORT_WITH_RC4_40_MD5, TLS_KRB5_EXPORT_WITH_RC4_40_SHA
TLS_KRB5_WITH_RC4_128_MD5, TLS_KRB5_WITH_RC4_128_SHA
TLS_DH_anon_WITH_AES_128_GCM_SHA256, TLS_DH_anon_WITH_AES_256_GCM_SHA384
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_RC4_128_MD5, TLS_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

Read: 170