我有一个 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 ftp
或vsftpd
解决方案作为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_login
php 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
联机帮助页也供参考。它有一个页面链接,解释配置文件的每个条目的作用。
如果您对此答案有任何疑问或疑问,请发表评论。我强烈建议您在尝试命令之前仔细阅读我提供的每个链接。我感谢您提供反馈来纠正任何误解并改进我的帖子。我可以根据需要更新我的答案。
祝你好运!