web-dev-qa-db-fra.com

Impossible d'accéder à Apache WebServer à partir du réseau domestique local

J'exécute un serveur Web Apache sur une machine de bureau exécutant Trisquel 8 (basé sur Ubuntu). Je souhaite rendre le serveur accessible à d'autres machines/périphériques sur mon réseau local, mais je ne peux pas comprendre comment.

Lorsque j'essaie de vous connecter d'un autre appareil, à l'aide de l'adresse IP locale du serveur Apache, je reçois des messages d'erreur dans le navigateur, tels que: dans Firefox sur un Mac, je ne peux pas me connecter. Firefox ne peut pas établir de connexion au serveur à Localhost. '. Si j'essaie de vous connecter à l'aide du navigateur DuckDuckGo sur un Android Téléphone, je reçois 'Webpage non disponible. La page Web à http: // localhost / n'a pas pu être chargée. Parce que: net :: err_connection_refused '.

L'une des réponses suggérées à l'aide de nmap pour voir quels ports sont ouverts, ce qui a renvoyé le résultat suivant:

$ nmap [LOCAL IP ADDRESS]

Starting Nmap 7.01 ( https://nmap.org ) at 2019-10-12 09:25 EDT
Nmap scan report for [LOCAL IP ADDRESS]
Host is up (0.00013s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 Host up) scanned in 0.09 seconds

Il montre donc que le port 80 est ouvert pour HTTP. Il convient probablement également de mentionner que je peux ping la machine d'une autre sur le réseau local et, comme le montre la sortie NMAP, j'ai un autre port ouvert pour SSH. J'ai été ssh-ing à cette machine pendant plusieurs mois et cela fonctionne très bien. Pour cela, je viens d'installer SSH-Server et je travaille à peu près hors de la boîte.

Alors, cela implique-t-il que quelque chose ne va pas avec la configuration Apache2 (par opposition à iptables/pare-feu), étant donné que SSH fonctionne sans problèmes?

Contenu des IPtables:

$ Sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http ctstate NEW,ESTABLISHED

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Contenu de Apache2.conf:

# This is the main Apache server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See http://httpd.Apache.org/docs/2.4/ for detailed information about
# the directives and /usr/share/doc/Apache2/README.Debian about Debian specific
# hints.
#
#
# Summary of how the Apache 2 configuration works in Debian:
# The Apache 2 web server configuration in Debian is quite different to
# upstream's suggested way to configure the web server. This is because Debian's
# default Apache2 installation attempts to make adding and removing modules,
# virtual hosts, and extra configuration directives as flexible as possible, in
# order to make automating the changes and administering the server as easy as
# possible.

# It is split into several files forming the configuration hierarchy outlined
# below, all located in the /etc/Apache2/ directory:
#
#       /etc/Apache2/
#       |-- Apache2.conf
#       |       `--  ports.conf
#       |-- mods-enabled
#       |       |-- *.load
#       |       `-- *.conf
#       |-- conf-enabled
#       |       `-- *.conf
#       `-- sites-enabled
#               `-- *.conf
#
#
# * Apache2.conf is the main configuration file (this file). It puts the pieces
#   together by including all remaining configuration files when starting up the
#   web server.
#
# * ports.conf is always included from the main configuration file. It is
#   supposed to determine listening ports for incoming connections which can be
#   customized anytime.
#
# * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/
#   directories contain particular configuration snippets which manage modules,
#   global configuration fragments, or virtual Host configurations,
#   respectively.
#
#   They are activated by symlinking available configuration files from their
#   respective *-available/ counterparts. These should be managed by using our
#   helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See
#   their respective man pages for detailed information.
#
# * The binary is called Apache2. Due to the use of environment variables, in
#   the default configuration, Apache2 needs to be started/stopped with
#   /etc/init.d/Apache2 or Apache2ctl. Calling /usr/bin/Apache2 directly will not
#   work with the default configuration.


# Global configuration
#

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# NOTE!  If you intend to place this on an NFS (or otherwise network)
# mounted filesystem then please read the Mutex documentation (available
# at <URL:http://httpd.Apache.org/docs/2.4/mod/core.html#mutex>);
# you will save yourself a lot of trouble.
#
# Do NOT add a slash at the end of the directory path.
#
#ServerRoot "/etc/Apache2"

#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
Mutex file:${Apache_LOCK_DIR} default

#
# PidFile: The file in which the server should record its process
# identification number when it starts.
# This needs to be set in /etc/Apache2/envvars
#
PidFile ${Apache_PID_FILE}

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5


# These need to be set in /etc/Apache2/envvars
User ${Apache_RUN_USER}
Group ${Apache_RUN_GROUP}

#
# HostnameLookups: Log the names of clients or just their IP addresses
# e.g., www.Apache.org (on) or 204.62.129.132 (off).
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on, since enabling it means that
# each client request will result in AT LEAST one lookup request to the
# nameserver.
#
HostnameLookups Off

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual Host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that Host's errors will be logged there and not here.
#
ErrorLog ${Apache_LOG_DIR}/error.log

#
# LogLevel: Control the severity of messages logged to the error_log.
# Available values: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the log level for particular modules, e.g.
# "LogLevel info ssl:warn"
#
LogLevel warn

# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include list of ports to listen on
Include ports.conf


# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual Host.
<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 All
#       Require local
#       Require ip 192.168.1
        Require all granted
</Directory>

#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>




# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride
# directive.
#
AccessFileName .htaccess

#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<FilesMatch "^\.ht">
        Require all denied
</FilesMatch>


#
# The following directives define some format nicknames for use with
# a CustomLog directive.
#
# These deviate from the Common Log Format definitions in that they use %O
# (the actual bytes sent including headers) instead of %b (the size of the
# requested file), because the latter makes it impossible to detect partial
# requests.
#
# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
# Use mod_remoteip instead.
#
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

# Include of directories ignores editors' and dpkg's backup files,
# see README.Debian for details.

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual Host configurations:
IncludeOptional sites-enabled/*.conf

# vim: syntax=Apache ts=4 sw=4 sts=4 sr noet

J'ai besoin de AllowOverride All sous /var/www Parce que j'essaie d'exécuter une instance de WordPress, et il doit pouvoir écrire sur le serveur Apache.

Apache2 est définitivement en cours d'exécution, car je peux accéder au contenu Web à l'aide de "localhost" à partir d'un navigateur sur la machine locale. Aussi, systemctl status Apache2 montre qu'il est en cours d'exécution:

~$ systemctl status Apache2
● Apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/Apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/Apache2.service.d
           └─Apache2-systemd.conf
   Active: active (running) since Thu 2019-10-10 20:01:44 EDT; 5min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1562 ExecStart=/etc/init.d/Apache2 start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/Apache2.service
           ├─1621 /usr/sbin/Apache2 -k start
           ├─1624 /usr/sbin/Apache2 -k start
           ├─1625 /usr/sbin/Apache2 -k start
           ├─1626 /usr/sbin/Apache2 -k start
           ├─1627 /usr/sbin/Apache2 -k start
           ├─1628 /usr/sbin/Apache2 -k start
           └─2102 /usr/sbin/Apache2 -k start

Oct 10 20:01:42 lee-Desktop systemd[1]: Starting LSB: Apache2 web server...
Oct 10 20:01:42 lee-Desktop Apache2[1562]:  * Starting Apache httpd web server Apache2
Oct 10 20:01:43 lee-Desktop Apache2[1562]: AH00558: Apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Oct 10 20:01:44 lee-Desktop Apache2[1562]:  *
Oct 10 20:01:44 lee-Desktop systemd[1]: Started LSB: Apache2 web server.

Comme suggéré dans les commentaires, j'ai essayé netstat --inet -a | grep Apache2, mais ça n'a rien retourné. Apparemment, cela est inhabituel si Apache2 est en cours d'exécution, car il devrait être d'écouter sur le port 80. J'ai couru netstat -plunt | grep :80 et obtenu la sortie suivante:

$ Sudo netstat -plunt | grep :80
tcp6       0      0 :::80                   :::*                    LISTEN      1557/Apache2    

Cela signifie-t-il Apache écouter, mais n'entendre rien?

En termes de configuration VirtualHost, qui ont également été demandées, le seul fichier de /etc/Apache2/sites-enabled/ est 000-défaut.conf, dont le contenu est:

<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

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # 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

        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>

# vim: syntax=Apache ts=4 sw=4 sts=4 sr noet

J'ai aussi essayé de courir tail -f /var/log/Apache2/*.log, mais rien n'est imprimé sur les journaux lorsque j'essaie de vous connecter à partir d'une machine distante.

Alors, comment puis-je résoudre ce qui bloque la connexion? Y a-t-il un journal partout qui pourrait vous éclairer pourquoi la connexion est refusée et pour quelle raison?

J'ai essayé les suggestions de Jacob dans sa réponse, mais malheureusement, cela n'a pas résolu le problème. Toute autre suggestion ou orientation serait grandement appréciée!

2
Time4Tea

Tout d'abord, vérifiez que httpd fonctionne avec Sudo systemctl httpd status. Avant d'ajouter accidentellement une règle en double, vérifions les règles IPTABLES avec iptables -L

Pour être sûr que nous acceptons tous les entrants HTTP, ajoutons une acceptation à notre table

Sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

si cela ne résout pas le problème, assurez-vous de vérifier les paramètres Apache trouvés dans /etc/Apache2/Apache2.conf. Nous devrions avoir un modèle de sécurité de base au bas du fichier CONF. Par exemple, c'est ce qui se trouve dans le mien

<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>

Dans PortS.Conf, assurez-vous que nous écoutons le port 80 sur tous les appareils (pour l'instant jusqu'à ce que vous obteniez la mise en place) Listen *:80

Si aucun de ceux-ci ne provoque un problème, vérifiez que Apache2 est en cours d'exécution ASWELL

2
Jacob

Lorsque j'essaie de vous connecter d'un autre appareil, à l'aide de l'adresse IP locale du serveur Apache, je reçois des messages d'erreur dans le navigateur, tels que: dans Firefox sur un Mac, je ne peux pas me connecter. Firefox ne peut pas établir de connexion au serveur à localhost . '. Si j'essaie de vous connecter à l'aide du navigateur de DuckduckGo sur un Android Téléphone, je reçois 'Webpage non disponible. La page Web à l'adresse http: // localhost /n'a pas pu être chargé car: net :: err_connection_refused '.

Si vous utilisez localhost En tant que nom d'hôte d'autres machines, ils essaient de se connecter à eux-mêmes ... sur les autres machines, vous devez utiliser l'adresse réelle de votre serveur. Donc

  • sur votre serveur faire: ip address show Cela répertoriera toutes vos interfaces nettes et les adresses (inet lignes qui ressemblent: inet 192.168.0.44/24 brd 192.168.0.255 scope global dynamic enp0s31f6). Ignorer l'interface lo (qui est celle à l'adresse 127.0.0.1) et utilisez le enp* ou wlp* celles. Celles-ci auront probablement une adresse commençant par 192.168...
  • utilisez l'adresse de la ligne inet sur votre Mac/ou votre Android: http://192.168.0.44/

L'utilisation de l'adresse a directement deux inconvénients:

  1. il pourrait changer (bien que normalement, tant qu'il y ait plus d'adresses que d'ordinateurs, les ordinateurs sont réaffectés les mêmes adresses)
  2. ce n'est pas vraiment mnémonique.

Sur le Mac, vous pouvez probablement corriger le problème n ° 2 en ajoutant votre nom de serveur et votre adresse dans le /etc/hosts Fichier (ou quel que soit son équivalent sur OSX). Cela peut ne pas être faisable sur Android.

Pour N ° 1, si vous êtes extrêmement chanceux, tous vos appareils prennent en charge la résolution de nom NetBIOS et vous pouvez utiliser leurs noms NetBIOS (généralement leur nom d'hôte).

1
xenoid

J'ai rencontré le même problème une fois, je pense que vous configurez un serveur Web local à l'aide de la machine virtuelle. Si tel est ce que vous faites, vérifiez la configuration du pare-feu de votre serveur Web.

Si vous êtes capable d'accéder à Apache Server de la même machine et d'obtenir une erreur tout en accédant à la même machine à distance de la machine distante, veuillez gentiment Autoriser Apache dans pare-fe dans le serveur Web.

Exécutez la commande mentionnée ci-dessous (cela a fonctionné sur Centos-7)

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

Faites-nous savoir si vous êtes toujours confronté au même problème.

0
swaroopchirayinkil