通过 https://localhost:8000/ 访问时,本地主机拒绝连接 WSL2,但在使用内部 WSL IP 地址时可以正常工作
Localhost refused to connect on WSL2 when accessed via https://localhost:8000/ but works when using internal WSL IP adress
我想要实现的目标
在开发 Symfony 网络应用程序期间从我的本地计算机访问本地主机。
我的环境
- WSL2 运行 在 Windows 10
- Linux, Apache2, MySQL, PHP-7.4 堆栈(安装了 Xdebug3)
- Debian 10
- Symfony 5.4(虽然不确定是否与此问题相关)
我已采取的步骤
- 根据这个设置WSL2Microsoft WSL2 tutorial
- 根据这个设置LAMP栈Digital Ocean tutorial
- 根据这个设置SymfonySymfony tutorial
- 运行 以下 bash 启动脚本启动我的服务并将主机设置为我的 xdebug.ini 文件中的虚拟 WSL IP
#!/bin/sh
REMOTEIP=`cat /etc/resolv.conf | grep nameserver | sed 's/nameserver\s//'`
sed -i -E "s/client_host=[0-9\.]+/client_host=$REMOTEIP/g" /etc/php/7.4/mods-available/xdebug.ini
service php7.4-fpm start
service apache2 start
service mysql start
- 运行 我在开发服务器上的 Symfony 项目使用
symfony serve -d
(Symfony 然后告诉我“Web 服务器正在使用 PHP FPM 7.4.23 https://127.0.0.1:8000")
- 转到 Chrome 中的 https://localhost:8000/ 应用所在的位置 运行
我期望发生的事情
- 当我在 Chrome 浏览器
中访问 URL 时,我的 Symfony 网络应用程序将在 https://localhost:8000/ 上 运行
实际发生了什么
- 我收到“无法访问此站点,本地主机拒绝连接。”在 Chrome 浏览器中
我尝试过的
- 这种情况过去很少发生,我会重启我的笔记本电脑,重复上面的过程,然后我可以通过 https://localhost:8000/ 连接。但是,它现在拒绝更频繁地连接(比如我一天启动 8/10 次)
- 连接到 https://127.0.0.1:8000 会产生相同的结果。
- 使用内部 WSL IP 地址连接到站点,发现使用
hostname -I
并用此 IP 替换本地主机(仍在端口 8000 上)。这是使用我的应用程序的适当解决方法,但是我无法通过 MySQL Workbench 与我的数据库交互而无需设置新连接,因此我可以使用 localhost 的修复非常好有帮助!
- (基于评论)只有 运行
symfony serve -d
没有单独启动 apache 和 PHP 服务 - 有时仍然允许连接到本地主机,但有时不起作用。
结论
这种行为很奇怪,因为它有时有效,但有时在执行完全相同的步骤时却无效。我不确定还能在哪里寻找答案,而且我似乎无法在网上找到任何有同样问题的东西。请让我知道是否有任何配置文件等有帮助。非常感谢你的帮助! :)
尝试运行命令netstat -nltp
。它显示活动地址和端口。你的 nginx 进程应该是 运行 at 0.0.0.0:8000。 0.0.0.0 表示 nginx 进程在任何地方都可用。
如果您的 nginx 进程是 运行 通过任何特定的 IP 地址,您应该通过该 IP 地址访问它,例如 http://192.168.4.2:8000.
当它正常工作时,如您所知,WSL2 的“本地主机转发”功能意味着您可以使用 Windows 的“本地主机”地址访问 WSL2 内部的服务 运行主机.
但是,有时该功能会出现故障。当您执行以下任一操作时,就会发生这种情况:
- 休眠
- 启用Windows“快速启动”功能(这是默认设置)。快速启动是一种伪休眠,它会触发同样的问题。
通常最好的解决方案是禁用休眠和快速启动。但是,如果您确实需要这些功能,可以通过以下方式重置 WSL localhost 功能:
- 退出任何 WSL 实例
- 正在发行
wsl --shutdown
- 正在重启您的实例
根据我的经验,localhost 转发之后会起作用。
我想要实现的目标
在开发 Symfony 网络应用程序期间从我的本地计算机访问本地主机。
我的环境
- WSL2 运行 在 Windows 10
- Linux, Apache2, MySQL, PHP-7.4 堆栈(安装了 Xdebug3)
- Debian 10
- Symfony 5.4(虽然不确定是否与此问题相关)
我已采取的步骤
- 根据这个设置WSL2Microsoft WSL2 tutorial
- 根据这个设置LAMP栈Digital Ocean tutorial
- 根据这个设置SymfonySymfony tutorial
- 运行 以下 bash 启动脚本启动我的服务并将主机设置为我的 xdebug.ini 文件中的虚拟 WSL IP
#!/bin/sh
REMOTEIP=`cat /etc/resolv.conf | grep nameserver | sed 's/nameserver\s//'`
sed -i -E "s/client_host=[0-9\.]+/client_host=$REMOTEIP/g" /etc/php/7.4/mods-available/xdebug.ini
service php7.4-fpm start
service apache2 start
service mysql start
- 运行 我在开发服务器上的 Symfony 项目使用
symfony serve -d
(Symfony 然后告诉我“Web 服务器正在使用 PHP FPM 7.4.23 https://127.0.0.1:8000") - 转到 Chrome 中的 https://localhost:8000/ 应用所在的位置 运行
我期望发生的事情
- 当我在 Chrome 浏览器 中访问 URL 时,我的 Symfony 网络应用程序将在 https://localhost:8000/ 上 运行
实际发生了什么
- 我收到“无法访问此站点,本地主机拒绝连接。”在 Chrome 浏览器中
我尝试过的
- 这种情况过去很少发生,我会重启我的笔记本电脑,重复上面的过程,然后我可以通过 https://localhost:8000/ 连接。但是,它现在拒绝更频繁地连接(比如我一天启动 8/10 次)
- 连接到 https://127.0.0.1:8000 会产生相同的结果。
- 使用内部 WSL IP 地址连接到站点,发现使用
hostname -I
并用此 IP 替换本地主机(仍在端口 8000 上)。这是使用我的应用程序的适当解决方法,但是我无法通过 MySQL Workbench 与我的数据库交互而无需设置新连接,因此我可以使用 localhost 的修复非常好有帮助! - (基于评论)只有 运行
symfony serve -d
没有单独启动 apache 和 PHP 服务 - 有时仍然允许连接到本地主机,但有时不起作用。
结论
这种行为很奇怪,因为它有时有效,但有时在执行完全相同的步骤时却无效。我不确定还能在哪里寻找答案,而且我似乎无法在网上找到任何有同样问题的东西。请让我知道是否有任何配置文件等有帮助。非常感谢你的帮助! :)
尝试运行命令netstat -nltp
。它显示活动地址和端口。你的 nginx 进程应该是 运行 at 0.0.0.0:8000。 0.0.0.0 表示 nginx 进程在任何地方都可用。
如果您的 nginx 进程是 运行 通过任何特定的 IP 地址,您应该通过该 IP 地址访问它,例如 http://192.168.4.2:8000.
当它正常工作时,如您所知,WSL2 的“本地主机转发”功能意味着您可以使用 Windows 的“本地主机”地址访问 WSL2 内部的服务 运行主机.
但是,有时该功能会出现故障。当您执行以下任一操作时,就会发生这种情况:
- 休眠
- 启用Windows“快速启动”功能(这是默认设置)。快速启动是一种伪休眠,它会触发同样的问题。
通常最好的解决方案是禁用休眠和快速启动。但是,如果您确实需要这些功能,可以通过以下方式重置 WSL localhost 功能:
- 退出任何 WSL 实例
- 正在发行
wsl --shutdown
- 正在重启您的实例
根据我的经验,localhost 转发之后会起作用。