IIS FTP连接报530User cannot logged in

server2003新建ftp用户并开启IISFtp功能之后,有时在连接这个ftp的时候会出现530 User 用户名 cannot login home directory inaccessible的错误,网上一般的解决方法是ftp目录是否存在,用户权限是否设置正确等等。但是经常是这些都是设置正确的,却还是出现这样的错误提示。

  其实原因是在新建IIS-FTP的时候选择了隔离用户,而在你选择的FTP文件夹却和这个用户相关的文件夹不同,所以自然就会出现这个提示,而找不到解决方法了。

  这个就涉及到server 2003的FTP文件夹的设定和命名有相当严格的规范。

  举个例子,如果你想为用户abc在server 2003下开通一个IIS-FTP服务目录设定为E:\\FTP里。除了安装IIS和FTP组件及相关配置正确之外,你还应该在FTP文件夹中建立一个子文件夹。命名为LocalUser,然后在LocalUser文件夹中再建立一个子文件夹,命名为abc,即你要开通FTP服务的用户名。

  这样当用户abc运行FTP服务登录到server2003时,会自动进入到E:\\FTP\\LocalUser\\abc文件夹目录下,这也就很好解释为什么最初会报出530 User用户名 cannot log in home directory inaccessible的错误了。因为不这样设定的话E:\\FTP\\LocalUser\\abc的目录根本就不存在。

  另外如果我们打算允许FTP站点提供匿名登录的话,还应在LocalUser目录下另建一个public的子目录。同理,匿名登录的用户将自动进入到D:\\FTP\\LocalUser\\public目录中。

  这样设置对一个服务器多个人使用的情况下非常有用,除此之外,你还可以在IIS中设置每个FTP对应的网站的流量,连接数等等限制来合理分配服务器资源。

FTP端口范围修改

由于云主机端口可使用范围 需要修改PureFtpd的端口范围 默认的 20000:20500 修改为 20000 20030

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#
# pure-ftpd.conf
# http://www.wdlinux.cn
Bind 21
ChrootEveryone yes
BrokenClientsCompatibility no
MaxClientsNumber 50
Daemonize yes
MaxClientsPerIP 8
VerboseLog no
DisplayDotFiles yes
AnonymousOnly no
NoAnonymous yes
SyslogFacility ftp
DontResolve yes
MaxIdleTime 15
LimitRecursion 10000 8
AnonymousCanCreateDirs no
MaxLoad 4
AntiWarez yes
Umask 133:022
MinUID 100
AllowUserFXP no
AllowAnonymousFXP no
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
AutoRename no
AnonymousCantUpload no
MaxDiskUsage 99
CustomerProof yes
AllowOverwrite on
AllowStoreRestart on
UnixAuthentication yes
PassivePortRange 20000 20030
PureDB /www/wdlinux/pureftpd/etc/pureftpd.pdb

快商通代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
var openZoosUrl = function(text, isMobile) {
//请替换成"电脑生成代码 - 链接地址" 中的链接地址,不要去其他地方复制
ksChatLink = 'https://hztk5.kuaishang.cn/bs/im.htm?cas=59076___799223&fi=67689&ism=1';
/**
* 若强行打开新窗口,则放开设置,不设置则手机不打开新窗口,pc打开新窗口,此设置只对当前自定义事件有效
* 若想全局生效,包括快商通默认的打开聊天窗口事件,则将此变量ksUserDefinedOpenNewChatWin定义在ks.j前即可
*/
var ksUserDefinedOpenNewChatWin = true;
function checkQueryString(a, b) {
if (!a) return false;
return new RegExp("(^|&)" + b + "=([^&]*)(&|$)", "i").test(a)
}
function getQueryString(a, b) {
var c = a.indexOf('?');
if (c == -1) return '';
a = a.substr(c + 1, a.length);
var d = new RegExp("(^|&)" + b + "=([^&]*)(&|$)", "i");
var r = a.match(d);
if (r != null) return unescape(r[2]);
return ''
}
if (isMobile && ksChatLink.indexOf('ism=1') == -1) {
if (ksChatLink.indexOf('?') == -1) {
ksChatLink += '?ism=1'
} else {
ksChatLink += '&ism=1'
}
}
var openNewChatWin, _ksChatLink = ksChatLink;
var localArr = ksChatLink.split("?");
localArr.push("");
if (typeof ksUserDefinedOpenNewChatWin != 'undefined' && ksUserDefinedOpenNewChatWin == true) {
openNewChatWin = true
} else if (checkQueryString(localArr[1], 'ism')) {
openNewChatWin = false
} else {
openNewChatWin = true
}
function ksOpenLink() {
var a = '';
try {
var b = getQueryString(ksChatLink, 'cas');
if (b) {
var c = '';
var d = document.cookie.match(new RegExp('(^| )' + b + '_KS_' + b + '=([^;]*)(;|$)'));
if (d != null) {
c = unescape(d[2])
}
if (c) {
a += '&vi=' + c
}
}
} catch (e) {}
var f = "";
try {
if (opener.document.referrer.length > 0) {
f = opener.document.referrer
}
} catch (e) {
f = document.referrer
}
if (!f || f.length == 0) {
f = document.referrer
}
a += '&dp=' + encodeURIComponent(window.location.href);
if (f) a += '&ref=' + encodeURIComponent(f);
if (text) a += '&sText=' + encodeURIComponent(text);
if (ksChatLink.indexOf('?') == -1) {
a = '?' + a.substring(1)
}
ksChatLink += a;
if (!openNewChatWin) {
window.location.href = ksChatLink
} else {
var g = window.open(ksChatLink, '_blank');
if (g) {
try {
g.focus()
} catch (e) {}
} else {
window.location.href = ksChatLink
}
}
}
if (typeof KS != 'undefined') {
var p = {};
if (text) p['sText'] = text;
if (openNewChatWin) p['oTarget'] = '_blank';
try {
if (typeof KS.openChatWin == 'function') {
if (openNewChatWin && _ksChatLink.indexOf('kuaishang') == -1 && !KS.customUrl) {
KS.customUrl = _ksChatLink
}
KS.openChatWin(p)
} else if (typeof KS.openChatLink == 'function') {
KS.openChatLink(p)
} else {
ksOpenLink()
}
} catch (e) {
ksOpenLink()
}
} else {
ksOpenLink()
}
};

wdcp环境php安装yaf扩展

CentOS release 6.5 (Final) 64位
wdCP v3.0.8

准备工作:

确定系统已经安装了gcc、gcc-c++、make、automake、autoconf等依赖库,如果之前装好了PHP那么这些依赖应该都有了,推荐用yum管理安装php环境。

可以获取到yaf包的途径:

1 Yaf其实算是PHP官方的一个扩展,我们可以直接在PHP官网下载。 http://pecl.php.NET/package/yaf

2 Git 仓库 https://github.com/laruence/php-yaf

yaf官方文档 :http://www.laruence.com/manual/

安装:

从官网下载的新一点的版本会比较稳定,安装也会比较顺畅,老版本有时候安到半截如果你的环境配的不全或者路径有问题,需要做一些调试,,我们这里下载官网的最新2.3.3

1
2
3
4
5
wget http://pecl.php.net/get/yaf-2.3.3.tgz
tar -zxvf yaf-2.3.3* && cd yaf-2.3.3
/www/wdlinux/php/bin/phpize
./configure --with-php-config=/usr/bin/php-config && make && make test
make install

期间安装2.2.9版本出现 yaf_config.lo 错误
/yaf-2.2.9/yaf_config.c:227: error: ?.S_CONSTANT_ARRAY?.undeclared (first use in this function) make: *** [yaf_config.lo] Error

3.0.4版本也出现错误,不知是没有 make && make test 还是版本的原因。

不过2.3.3安装成功了。

解决Firefox不信任StartSSL证书问题

Startssl 注册好证书 nginx 下配置好生效后,firefox出现 对等端的证书已被废除。 (错误代码:sec_error_revoked_certificate)。其实并不是火狐不支持,而是自己没有配置好。

解决方法:

1
wget https://startssl.com/certs/ca.crt

Description: This root CA is the root used for all Certificates and must be included in root stores. ↑

1
wget https://startssl.com/certs/sca.server1.crt

下载Startssl Class 1的根证书 ↑

1
cat server.crt ca.crt sca.server1.crt > servernew.crt

server.crt 是域名的证书,后面合并的俩文件是下载的Startssl根证书和Startssl Class1根证书

现在可以正常访问了。

https://daily.81810999.com/

Read More

elasticsearch写入数据存储过程

es建索引写入数据,数据最先是存在内存buffer里的,然后再刷入到lucene的底层文件segment中;写入segment完毕后再执行refresh操作,refresh操作后,数据将commit到磁盘中。数据刷入到了磁盘,就可以执行查询操作了。

过程简单描述如下:内存buffer–>segment–>refresh–>磁盘

注意,这些过程,会有translog记录;translog存在的意义就是保证数据刷入的可靠性;因为我们刚才说过,es建索引写入数据的过程是内存到磁盘的过程,这个过程有日志的记录,那就是translog,当数据还在内存里没刷到磁盘中时,如果服务器down了又没translog机制的话,那么数据就会丢失,有了translog,服务器down机后再起来,就能很快恢复写入的过程。

这里要注意的是,translog也是先存在内存里的,然后默认5秒刷一次写到硬盘里

前端优化系列之一:DNS预获取 DNS Prefetch 提升页面载入速度

DNS Prefetch,即DNS预获取,是前端优化的一部分。一般来说,在前端优化中与 DNS 有关的有两点:一个是减少DNS的请求次数,另一个就是进行DNS预获取。

DNS 作为互联网的基础协议,其解析的速度似乎很容易被网站优化人员忽视。现在大多数新浏览器已经针对DNS解析进行了优化,典型的一次DNS解析需要耗费 20-120 毫秒,减少DNS解析时间和次数是个很好的优化方式。DNS Prefetching 是让具有此属性的域名不需要用户点击链接就在后台解析,而域名解析和内容载入是串行的网络操作,所以这个方式能减少用户的等待时间,提升用户体验。

默认情况下浏览器会对页面中和当前域名(正在浏览网页的域名)不在同一个域的域名进行预获取,并且缓存结果,这就是隐式的 DNS Prefetch。如果想对页面中没有出现的域进行预获取,那么就要使用显示的 DNS Prefetch 了。

目前大多数浏览器已经支持此属性,支持版本如下:

  • Safari: 5+
  • Chrome: All
  • Firefox: 3.5+
  • Opera: Unknown
  • IE: 9+ (called “Pre-resolution” on blogs.msdn.com)

其中 ChromeFirefox 3.5+ 内置了 DNS Prefetching 技术并对DNS预解析做了相应优化设置。所以即使不设置此属性,ChromeFirefox 3.5+ 也能自动在后台进行预解析。

DNS Prefetch 应该尽量的放在网页的前面,推荐放在<meta charset="UTF-8">后面。具体使用方法如下:

1
2
3
4
<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="//www.techzero.cn">
<link rel="dns-prefetch" href="//api.share.baidu.com">
<link rel="dns-prefetch" href="//bdimg.share.baidu.com">

需要注意的是,虽然使用 DNS Prefetch 能够加快页面的解析速度,但是也不能滥用,因为有开发者指出 禁用DNS 预读取能节省每月100亿的DNS查询。

如果需要禁止隐式的 DNS Prefetch,可以使用以下的标签:

1
<meta http-equiv="x-dns-prefetch-control" content="off">

facebook登录 在 php 框架 slim里的实现

首先使用composer 安装 facebook的php SDK
composer require facebook/graph-sdk

使用了Slim框架,登录也是调用的接口,总共定义了两个链接(或者路由)facebookLoginfacebookCallback . 一个入口链接:负责处理跳转到facebook登录并跳回的功能。另一个是处理回调的:获取facebook的用户基本信息并登录。

Read More