手头上的问题

手头上的问题

我有一个 Apache Web 服务器在这台稳定的 Debian 机器上运行,这个 PHP 程序必须使用 FTP 连接到远程在线服务器等。

一切工作正常,直到我安装了 FTP 服务器(vsftpd版本 3.0.3-8+b1),但我不认为这是罪魁祸首。

现在我得到这个错误

确切的错误是:

I won't open a connection to x.x.x.x --->*remote server ip* (only to x.x.x.x ---->*my public ip*)

甚至无法访问ls远程目录,而是出现此错误:

Unable to list directory

我怀疑这是因为 FTP 现在“默认”以主动模式运行,但我真的不确定。这些错误似乎与被动模式有关。

你怎么认为?

  • Debian 版本:Debian GNU/Linux 9
  • PHP版本:7.0.30-0+deb9u1

我们正在讨论的 PHP 例程是:ftp_login()ftp_fput()

我认为它是自动激活模式,因为每次我使用ftp_pasv(, true)它都工作正常。之前不必特意说明。

答案1

手头上的问题

您报告无法连接到远程ftp服务器。您收到以下错误消息:

I won't open a connection to x.x.x.x remote server ip (only to x.x.x.x my public ip)

根据您是否使用php ftpvsftpd解决方案作为ftp服务器解决方案,我可能找到了 2 种可能的解决方案。

1. 可能的 VSFTP 配置修复

您可能只需要更正您的vsftp配置。我已经发现此论坛帖子由用户 nhtrader 发布这可以提供一个可能的解决方案。请完整阅读它,以确保它适用于您。

  • 首先,这是ftp远程服务器还是位于您的家庭/局域网内的服务器?验证您是否可以进行身份​​验证,或者至少可以在不使用您的服务的情况下与服务器进行通信ftp

  • 其次,验证您的路由器是否支持端口转发,并将您需要的相关端口添加到路由器的端口转发列表中。如果您使用 VPS 作为ftp服务器,请参考其有关端口转发和支持方法ftp、身份验证、远程管理等的文档。

  • GRC,提供了一个不错的工具验证您的家庭网络是否阻止您需要的任何端口或服务。这可以很好地检查您的端口转发是否正常工作并且未被 ISP 阻止。您还需要在主机和服务器上创建防火墙规则,以允许通过您希望使用的端口进行连接。

  • 第三,编辑vsftpd位于 的配置文件/etc/vsftpd.conf

使用以下命令将以下条目添加到文件中sudo nano /etc/vsftpd.conf

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
idle_session_timeout=600
data_connection_timeout=120
ftpd_banner=[Whatever message of your choice]
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem

以下条目可以由您决定要使用的端口,这些只是其中的一些用户 nhtrader 使用

listen_port=26   
pasv_max_port=7004
pasv_min_port=7000

如果您使用动态 IP 地址并且没有静态 IP 地址,请使用此条目:

pasv_addr_resolve=YES

如果您使用静态 IP 地址,请使用以下地址:

pasv_address=x.x.x.x

保存并关闭配置文件并重新启动vsftpd服务。

 sudo systemctl restart vsftpd.service

现在您应该能够正确连接到您的 ftp 服务器。再次,我建议查看整个论坛帖子因为它涵盖了大量信息和可能的问题。

2. 可能的 PHP 修复

据用户 Martin Prikryl 在这个堆栈溢出帖子,您可以通过在服务器上使用的ftp_pav后面移动来解决该确切的错误消息。ftp_loginphp module

$conn_id = ftp_connect('x.x.x.x');

ftp_login($conn_id, 'user', 'pass');

ftp_pasv($conn_id, true);

他通过咨询找到了这个答案PHP 文档。请仔细阅读所有链接,以确保这是适合您的修复程序。

结论

首先,验证您vsftpd或其他ftp服务器的配置是否正确,您的防火墙是否允许ftp连接,甚至您是否可以连接到您的主机。请参阅您的 VPS 或路由器文档,了解执行此操作的最佳实践。

我将添加一个链接vsftpd 联机帮助页也供参考。它有一个页面链接,解释配置文件的每个条目的作用。

如果您对此答案有任何疑问或疑问,请发表评论。我强烈建议您在尝试命令之前仔细阅读我提供的每个链接。我感谢您提供反馈来纠正任何误解并改进我的帖子。我可以根据需要更新我的答案。

祝你好运!

相关内容