LEMP环境下SFTP连接超时及Nginx权限报错问题求助
看起来你碰到的问题是Nginx规则拦截了请求,同时系统防火墙可能也有额外限制,咱们一步步来排查解决:
1. 先确认Nginx的IP放行规则顺序是否正确
你在/etc/nginx/sites-enabled里配置的IP放行,规则顺序直接影响生效结果。比如如果你的配置是先写deny all再写allow,那allow规则根本不会生效,Nginx会直接拒绝所有请求:
# 错误示例:deny在allow前面,规则不生效 location / { deny all; allow 123.45.67.89; # 你同事的IP }
正确的写法应该是先允许目标IP,再拒绝其他所有:
# 正确顺序 location / { allow 123.45.67.89; deny all; }
修改后记得重启Nginx让配置生效:sudo systemctl restart nginx
2. 检查系统防火墙是否放行SFTP端口
虽然你在Nginx里放行了IP,但服务器的系统防火墙(比如ufw、iptables)可能没开SFTP对应的端口。SFTP默认用22端口,咱们来确认:
- 如果用ufw防火墙,执行
sudo ufw status,查看是否有22/tcp的允许规则。如果没有,执行sudo ufw allow 22/tcp开放端口 - 如果用iptables,执行
sudo iptables -L -n,检查INPUT链里是否有ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22的规则。如果没有,添加规则:sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
你本地测试能正常连接,大概率是因为你处于服务器内网或者防火墙信任的IP段,而同事的家庭IP不在防火墙允许列表里,所以才会出现超时。
3. 验证同事的公网IP是否正确
印度家庭宽带的IP大多是动态分配的,可能你之前记录的IP已经变更了。可以让同事通过本地网络设置或者公网IP查询工具获取当前的真实公网IP,对比你Nginx配置里放行的IP是否一致。如果不一致,更新Nginx的allow规则后重启服务。
4. 检查SFTP用户的目录权限
如果Nginx配置了SFTP的根目录,要确保你同事的SFTP用户对该目录有足够的读写权限。比如根目录是/var/www/sftp,执行以下命令调整权限:
sudo chown -R your-colleague-username:your-colleague-username /var/www/sftp sudo chmod -R 755 /var/www/sftp
目录权限不足也可能触发Nginx的access forbidden错误。
5. 结合access.log排查请求细节
打开Nginx的access.log(一般路径是/var/log/nginx/access.log),找到错误日志里对应的请求ID(也就是*70),查看这条请求的真实IP、请求路径等信息,确认是不是同事的IP,有没有被Nginx的其他规则意外拦截。
按照这几步排查下来,应该能解决连接超时和权限禁止的问题。
内容的提问来源于stack exchange,提问作者Head

