如何诊断从同一家庭网络内访问 WSL 上运行的 Apache 服务器的问题?

问题描述 投票:0回答:1

概述

我正在尝试在我的家用计算机上运行 Windows Linux 子系统 (WSL) 的 Windows 11 计算机上设置 Apache Web 服务器。使用 WSL shell 中

ip a
为 eth0 返回的 IP 地址(例如 172.26.xx.xx),我可以从同一台计算机访问我的简单网页。但是,我无法从同一网络中的另一台计算机访问该页面。

详情

我的 ports.conf 文件位于

/etc/apache2
,除了一些注释之外,还包含以下内容:

Listen 80

<IfModule ssl_module>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

删除注释,我的 apache2.conf 文件位于

/etc/apache2
,包含

DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100

KeepAliveTimeout 5

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

HostnameLookups Off

ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn

IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

Include ports.conf

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>

<Directory /usr/share>
    AllowOverride None
    Require all granted
</Directory>

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

AccessFileName .htaccess

<FilesMatch "^\.ht">
    Require all denied
</FilesMatch>

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf

我的 000-default.conf 文件位于 /etc/apache2/sites-available,包含

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html
    <Directory /var/www/html>
           AllowOverride All
           Options All
           Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

值得一提的是,我确实有一个注册域名,我用它来代替上面的 example.com。 (因为我在没有静态 IP 地址的家庭路由器后面,所以我使用 ddclient 与我的提供商设置了动态 DNS。这似乎有效,因为我的网络通过 https://whatismyipaddress 显示了相同的 IP 地址.com/ 以及我的 DNS 注册商管理页面中自动填充的字段。但是,除非我完全误解了事情,否则这是无关紧要的,因为我无法从另一台计算机访问我的页面,即使是在同一网络内。)

我尝试过的

老实说,不多。在我看来,Apache 服务器的配置非常简单,对于来自同一台计算机的连接,它会立即运行。我唯一能想到的是

端口转发问题。

在 WSL shell 上运行

sudo ufw status verbose

返回

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                            Action      From
--                            ------      ----
22/tcp                        ALLOW IN    Anywhere                  
80/tcp                        ALLOW IN    Anywhere                  
443                           ALLOW IN    Anywhere                  
80,443/tcp (Apache Full)      ALLOW IN    Anywhere                  
22/tcp (v6)                   ALLOW IN    Anywhere (v6)             
80/tcp (v6)                   ALLOW IN    Anywhere (v6)             
443 (v6)                      ALLOW IN    Anywhere (v6)             
80,443/tcp (Apache Full (v6)) ALLOW IN    Anywhere (v6) 

我觉得不错。按照 
here

的说明,我运行 netsh interface portproxy 将 Windows 计算机上的端口 80 和 443 映射到 WSL 上的端口 80 和 443。脚本中的关键命令是

netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr"

netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport

其中 
$remoteport

ip a
返回的 IP 地址 172.26.xx.xx 匹配,并且
$addr
保留为 0.0.0.0.
我还在 Windows Defender 防火墙中创建了入站规则,按照 

https://www.nextofwindows.com/allow-server-running-inside-wsl-to-be-accessible-outside-windows-10- 中的说明进行操作host

,但我相信这些在 WSL2 中已被上面的说明取代。这两种潜在的解决方案都已在从本地网络访问在 WSL(Linux 的 Windows 子系统)上运行的 Web 服务器进行了讨论,但问题中的任何一个或任何其他建议都不适合我。 我不知道这个端口转发是否真的有必要,或者如何诊断它是否做了它应该做的事情。无论如何,我在 Windows 的特权 Powershell 会话中运行了netstat -aobn | findstr :80

,它返回了

TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       5720
TCP    10.0.0.229:56431       10.0.0.249:8009        ESTABLISHED     11868
TCP    10.5.0.2:54444         192.229.211.108:80     CLOSE_WAIT      22772
TCP    [::1]:80               [::]:0                 LISTENING       9280

还有
Get-NetTCPConnection | where localport -eq 80
,它返回了,为了紧凑而进行了编辑,

LocalAddress LocalPort RemoteAddress RemotePort State  AppliedSetting OwningProcess
------------ --------- ------------- ---------- -----  -------------- -------------
::1          80        ::            0          Listen                9280
0.0.0.0      80        0.0.0.0       0          Listen                5720

有人在那里看到什么有趣的东西吗?

调查日志。

在/var/logs/apache2/error.log中有很多组就像

[Sun Oct 15 18:37:05.433219 2023] [mpm_event:notice] [pid 19762:tid 139729704814464] AH00493: SIGUSR1 received. Doing graceful restart [Sun Oct 15 18:37:05.441983 2023] [mpm_event:notice] [pid 19762:tid 139729704814464] AH00489: Apache/2.4.52 (Ubuntu) configured -- resuming normal operations [Sun Oct 15 18:37:05.441995 2023] [core:notice] [pid 19762:tid 139729704814464] AH00094: Command line: '/usr/sbin/apache2'

没有别的,但这些与我在更改后按顺序运行
sudo a2dissite 000-default.conf

sudo systemctl reload apache2

sudo a2ensite 000-default.conf
sudo systemctl reload apache2
的多次匹配。
以下是其他配置参数,在不太可能的情况下它很重要:

运行 11 版本 23H2 内部版本 25967.1010 的桌面。

    WSL 版本 2.0.3.0
  • Ubuntu 22.04.03,内核版本 5.15.123.1-microsoft-standard-WSL2
  • Apache Apache/2.4.52 (Ubuntu)
  • 我的问题是如何诊断问题,因为这对我来说是一次学习经历,但当然也欢迎直接的解决方案。

我最初的问题可能与在 WSL 中运行服务器有关。证明这一点的证据是,在专用 Linux 机器上运行服务器时我没有遇到任何问题。我已经放弃了原来的方法并采用了这种新方法。
apache windows-subsystem-for-linux
1个回答
0
投票

© www.soinside.com 2019 - 2024. All rights reserved.