1

I'm in the middle of setting up WSL on Windows to work on PHP stuff with my PHPStorm. Started the config, and installed Apache and PHP. To check, I'm opening my browser on localhost, it works, but on 127.0.0.1 it doesn't.

I need it to work to be able to configure xdebug debugging through port forwarding. I failed doing so with localhost, where I'm pretty used to do it easily on my other (Linux) machine where I'm working with a docker.

From inside my Ubuntu:

~$ cat /etc/hosts

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1       localhost
127.0.1.1       JB-PC.localdomain       JB-PC

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

From Windows:

C:\WINDOWS\system32>ipconfig

Configuration IP de Windows


Carte Ethernet Ethernet :

   Suffixe DNS propre à la connexion. . . : Home
   Adresse IPv6 de liaison locale. . . . .: fe80::f04e:ae2b:40b9:3d82%6
   Adresse IPv4. . . . . . . . . . . . . .: 10.0.0.8
   Masque de sous-réseau. . . . . . . . . : 255.255.255.0
   Passerelle par défaut. . . . . . . . . : 10.0.0.138

Carte Ethernet vEthernet (WSL) :

   Suffixe DNS propre à la connexion. . . :
   Adresse IPv6 de liaison locale. . . . .: fe80::68c3:25c9:588a:a957%17
   Adresse IPv4. . . . . . . . . . . . . .: 172.20.32.1
   Masque de sous-réseau. . . . . . . . . : 255.255.240.0
   Passerelle par défaut. . . . . . . . . :

localhost pings on ::1 :

C:\WINDOWS\system32>ping localhost

Envoi d’une requête 'ping' sur JB-PC [::1] avec 32 octets de données :
Réponse de ::1 : temps<1ms
Réponse de ::1 : temps<1ms
Réponse de ::1 : temps<1ms
Réponse de ::1 : temps<1ms

Statistiques Ping pour ::1:
    Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms

and 127.0.0.1 pings as well :

C:\WINDOWS\system32>ping 127.0.0.1

Envoi d’une requête 'Ping'  127.0.0.1 avec 32 octets de données :
Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128
Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128
Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128
Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128

Statistiques Ping pour 127.0.0.1:
    Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms

Also I did try the answers here, but they didn't help.

[EDIT] Following @NotTheDr01ds suggestion, I tried with python. Accessing localhost or 127.0.0.1 on port 8080 works all the same, but accessing http://0.0.0.0:8080/ strangely doesn't, although that's what the CLI says it's serving:

C:\WINDOWS\system32>python3 -m http.server 8080 --bind 0.0.0.0
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
127.0.0.1 - - [17/Apr/2021 21:20:38] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [17/Apr/2021 21:20:39] code 404, message File not found
127.0.0.1 - - [17/Apr/2021 21:20:39] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [17/Apr/2021 21:21:15] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [17/Apr/2021 21:21:15] code 404, message File not found
127.0.0.1 - - [17/Apr/2021 21:21:15] "GET /favicon.ico HTTP/1.1" 404 -

My Apache VirtualHost:

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerName localhost
        ServerAdmin webmaster@localhost
        DocumentRoot /mnt/c/Users/JB/Documents/projects/bdzserver/public

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        <Directory /mnt/c/Users/JB/Documents/projects/bdzserver>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>

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

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>
8
  • 2
    Apache typically must be explicitly configure to reply to localhost and 127.0.0.1, while localhost will resolve to 127.0.0.1, Apache does not treat them as the same virtual host. Why exactly do you want 127.0.0.1 to work instead of localhost? Please edit your question instead of submitting a comment
    – Ramhound
    Apr 16 at 14:38
  • 2
    To @Ramhound's point, test it out with python3 -m http.server 8080 --bind 0.0.0.0. Can you then access it via 127.0.0.1:8080? Or does it continue to be localhost-only? Apr 16 at 22:56
  • 1
    The 0.0.0.0 just means "all interfaces", which would include any IP address assigned to the WSL instance. Perhaps for the purposes of your question, it would have been more clear if I'd asked you to just bind to 127.0.0.1. But your results show that both localhost and 127.0.0.1 are getting through to the WSL instance, meaning you should look to your Apache config as @Ramhound suggested. Apr 17 at 21:53
  • 3
    It also is suggesting the file for a 404 error is not being found which suggests an Apache configuration issue.
    – Ramhound
    Apr 17 at 21:56
  • 1
    Just a note on the ping output in your question -- This doesn't really tell you anything. The way that WSL works is that it forwards localhost connections to the WSL interface, but I'm sure it only does this if there's not anything on the Windows network interface on that port. Since Windows itself is accepting the ping, it's never going to get forwarded to WSL. Also, a ping is using ICMP, not TCP. It's unlikely that Microsoft implemented forwarding for ICMP. Apr 17 at 22:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.