Pure-ftpd 227 错误,以及客户端中文乱码的问题解决。

背景

故事发生在前些天的一个风和日丽的上午,我来到公司,打开电脑,想连接一下自己新买的阿里云服务器,没想到弹出了如下的错误(因为不能安装客户端所以用的是Windows的文件管理器直接连接的FTP):

---------------------------

FTP フォルダー エラー

---------------------------

FTP サーバーのフォルダーを開こうとしてエラーが発生しました。このフォルダーへのアクセス許可があるかどうかを確認してください。

詳細:

200 TYPE is now ASCII

227 Entering Passive Mode (172.17.32.46,155,115)

---------------------------

OK 

---------------------------

因为使用的是日文系统所以报错是日文的。

分析调查

根据字面意思是说文件夹无法访问,可是我用客户端软件是可以正常连接ftp的。那么问题出在哪呢?首先查了一下227这个错误,根据字面的意思也能猜出一点端仪,FTP在被动连接的时候返回了一个内网IP,经过进一步的调查发现和我猜测的基本一致。

原因:

因为购买的是阿里云的ECS,它的网卡上绑定的是内网IP,外网IP则邦定在路由上,所以在FTP被动访问服务器的时候则返回了ECS的内网IP,所以造成客户端无法识别IP的问题。

解决

解决问题也很简单在Pure-ftpd的配置文件里修改

# ForcePassiveIP 192.168.0.1

改成

ForcePassiveIP 你服务器的外网IP

这样在Windows的文件管理器里就可以通过 ftp://你的外网IP/ 来访问了。

可是不要高兴得太早。当我顺利的连接以后,发现服务器的中文文件都是乱码的,而我在用客户端连接的时候,这些文件都是正常的,那么接下来继续调查吧。

继续调查

继续调查后发现需要修改配置文件的两个地方,如下:

# FileSystemCharset           big5

# ClientCharset                    big5

改成

FileSystemCharset UTF-8

ClientCharset UTF-8

修改后重起Pure-ftpd服务,再次连接发现又无法连接了。原因是服务器重起失败。那么原因肯定是修改的两处配置有问题了,于是继续调查。

在Pure-ftpd服务编译的时候要加上 `--with-rfc2640` 参数才可以使用以上两个配置参数。因为我使用的是宝塔面板,所以接下来的调查方向就是宝塔的Pure-ftpd服务要怎样重新编译。

在接下来的调查中发现宝塔的Pure-ftpd服务是用的1.0.49版本,在服务器的安装文件中 `/www/server/panel/install/pureftpd.sh` 确实也加了`--with-rfc2640` 参数,那为什么无法使用的呢?在调查无果后,开始翻宝塔的官方论坛,发下了一个帖子帮我解决了这个问题。

该版本好像不支持--with-rfc2640,自行编译该版本的时候显示找不到--with-rfc2640的方法。改用旧版pure-ftpd v1.0.42就可以。修改‘/www/server/panel/install/pure-ftpd.sh’中pure_ftpd_version的参数为“1.0.42”。

卸载:

sh /www/server/panel/install/pure-ftpd.sh uninstall

安装pure-ftpd v1.0.42:

sh /www/server/panel/install/pure-ftpd.sh install

于是卸载后重新编译安装pure-ftpd v1.0.42版本,重新连接后这个世界终于清静了。

最后

对于今天一早发生的事情来说,我是一个力求完美的人,服务器无法连接那么我要能连上,连上了乱码,那么我要无乱码!虽然几经磨难但最终的结果是好的。人活着就要折腾,我一贯的作风就是,生命不休,折腾不止。

最后感谢大家的支持,在这里为大家提供点福利,艾旦影视一个专注于提供免费视听服务的网站。尤其海外华人访问更快,微信公众号搜索艾旦影视并回复电影电视剧名称,你会收到惊喜地。

你可能感兴趣的:(Pure-ftpd 227 错误,以及客户端中文乱码的问题解决。)