AWS上Laravel+Nginx服务打印到本地Windows打印机报错排查
问题诊断与修复方案
核心问题:连接目标IP搞反了
你代码里用WindowsPrintConnector("POS-80C")时,默认会尝试连接AWS服务器自身的共享打印机,但你的打印机在本地Windows机器上,错误日志里的//ip-172-31-43-229/POS-80C就是AWS服务器的IP,这完全是连接目标错了。
具体修复步骤
修正打印机连接地址
把WindowsPrintConnector的参数改成本地Windows机器的可访问IP+共享打印机名,格式为//本地WindowsIP/POS-80C,示例代码:try { // 替换成你本地Windows机器的实际IP $connector = new \Mike42\Escpos\PrintConnectors\WindowsPrintConnector("//192.168.1.100/POS-80C"); $printer = new \Mike42\Escpos\Printer($connector); $printer->text("Hello World!\n"); $printer->cut(); $printer->close(); } catch (Exception $e) { echo "打印失败: " . $e->getMessage() . "\n"; }注意:如果本地Windows在私有内网,得确保AWS服务器能访问到这个IP——要么通过VPN打通内网,要么给本地机器做端口映射开放SMB端口,或者用本地机器的公网IP。
手动测试SMB连通性
在AWS服务器上执行下面的命令(替换成本地Windows的IP),先确认通路是否正常:smbclient '//本地WindowsIP/POS-80C' -c 'print -' -N -m SMB2如果还是报错,按以下方向排查:
- 本地Windows防火墙:开放139、445端口,允许AWS服务器的IP访问。
- 打印机共享权限:如果用了
-N(匿名连接),得确保共享打印机允许匿名用户打印;或者在代码里指定Windows的用户名和密码:$connector = new \Mike42\Escpos\PrintConnectors\WindowsPrintConnector( "//本地WindowsIP/POS-80C", "你的Windows用户名", "你的Windows密码" ); - SMB版本兼容:部分Windows机器禁用了SMB2,可尝试把命令里的
-m SMB2改成-m SMB3。
检查AWS安全组配置
确认AWS服务器的安全组允许出站访问139、445端口,如果这些端口被封禁,也会出现连接拒绝的错误。
内容的提问来源于stack exchange,提问作者Zeeshan Ali
相关产品推荐
相关产品推荐

