3 votes

Apache ne sert pas certains contenus à partir d'un partage réseau

Apache ne sert pas le contenu d'un partage réseau monté sous Ubuntu.

Selon le contenu du fichier que j'essaie d'ouvrir, il n'est pas correctement servi :

Cela ne fonctionne pas :

is a link to another nifty site
<H2>This is a Medium Header</H2>

Chrome affiche le message d'erreur suivant : " ERR_INVALID_HTTP_RESPONSE "

Facteur : " Erreur : Erreur d'analyse : Attendu HTTP/ "

curl : " curl : (1) a reçu HTTP/0.9 alors qu'il n'était pas autorisé à le faire "

Cela fonctionne (juste une ligne vide de plus)

is a link to another nifty site
<H2>This is a Medium Header</H2>

Le partage réseau est monté dans /media/data (cifs ; à des fins de test, les permissions sont fixées à 777).

Il y a un lien symbolique de /var/www/server vers /media/data et je peux voir et modifier le contenu depuis l'intérieur de la VM.

Cela n'a pas beaucoup de sens pour moi qu'Apache soit pointilleux sur le contenu des fichiers. Je ne sais pas vraiment comment interpréter les messages d'erreur des trois clients différents, mais comme ils échouent tous, il semble qu'Apache soit en cause, même si le journal des erreurs n'indique aucun problème.

Après avoir copié le fichier dans /var/www/html (répertoire par défaut) et modifié le serveur virtuel à cet emplacement, les fichiers sont servis, quel que soit leur contenu.

Je ne sais pas si cela a de l'importance, mais en cherchant " ERR_INVALID_HTTP_RESPONSE "J'ai trouvé en ligne des personnes qui parlaient du comportement étrange de Chrome sur certains ports : Je fais actuellement tourner le serveur sur le port 28080 (pour des raisons de rétrocompatibilité avec la configuration actuelle et parce que je prévois de configurer nginx sur le port 80) ; nginx est déjà installé mais je ne pense pas qu'il interfère.

Veuillez m'excuser si tout ceci vous semble quelque peu confus, mais c'est probablement parce que je suis moi-même très confus.

Il s'agit d'une VM propre, les seuls paquets supplémentaires sont apache, nginx et cifs-utils pour autant que je sache.

Quelqu'un d'autre a-t-il rencontré un comportement étrange avec les partages réseau dans ce contexte ? Je veux les htdocs sur le partage réseau car c'est plus facile pour moi d'y accéder depuis ma machine Windows. Y a-t-il des moyens recommandés d'accéder aux htdocs autrement que par un partage réseau ?

Editar:

curl --verbose --output out.txt --http0.9 localhost:28080/test.html donne la sortie de console suivante :

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 127.0.0.1:28080...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 28080 (#0)
> GET /test.html HTTP/1.1
> Host: localhost:28080
> User-Agent: curl/7.68.0
> Accept: */*
>
{ [15 bytes data]
100   294    0   294    0     0     58      0 --:--:--  0:00:05 --:--:--     0
* Closing connection 0

Alors que out.txt contient les éléments suivants :

 18:55:12 GMT
ETag: *removed*
Accept-Ranges: bytes
Content-Length: 67
Content-Type: text/html

is a link to another nifty site
<H2>This is a Medium Header</H2>
^@^@^@^@^@^@)^@^@^@^@^@^@w^@^@rX]^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^X^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

Sur un autre fichier, la chaîne bizarre à la fin contient en fait le mot clé SMB. Je ne sais pas si c'est une coïncidence ou si cela signifie quelque chose :

 19:34:11 GMT
ETag: *removed*
Accept-Ranges: bytes
Content-Length: 6
Content-Type: text/plain

sadssa^@^@^@^@]^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@)^@^A^Re ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@SMB@^@^@^@^@^@^@^@^F^@
^@^D^@^@^@^@^@^@^@)^@^@^@^@^@^@w^@^@rX]^@^@^@^@^@

J'ai également remarqué la partie r et X qui pourrait avoir quelque chose à voir avec les autorisations de fichiers ?

Edit 2 :

partage réseau (fstab) :

//www.example.com/Share      /media/data     cifs    username=user,password=pass,domain=WORKGROUP,vers=2.0,file_mode=0777,dir_mode=0777      0       0

lien symbolique établi avec :

sudo ln -s /media/data/ /var/www/server

apache2.conf :

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

4voto

Jack Wang Points 1

Dans "/etc/apache2/apache2.conf", ajoutez :

EnableSendfile Off
EnableMMAP off

Cela m'a sauvé la vie.

2voto

dirdi Points 2838

Ne pas faire de lien symbolique /media/data a /var/www/server mais utilisez bindfs à la place :

# Install bindfs
sudo apt install bindfs

# Stop apache
sudo systemctl stop apache2

# Remove symlink
sudo rm /var/www/server

# Create dir
sudo mkdir /var/www/server

# Bind mount
sudo bindfs -u www-data -g www-data /media/data /var/www/server

# Start apache
sudo systemctl start apache2

Si la page web servie est statique ou utilise une base de données comme backend, vous pouvez également ajouter l'option -r à l'appel bindfs, pour rendre le montage en lecture seule.

Ajouter une entrée à /etc/fstab pour monter automatiquement au démarrage :

/media/data /var/www/server fuse.bindfs user=www-data,force-group=www-data 0 0

La plupart des serveurs web s'attendent à ce que les fichiers soient la propriété de www-data et ont besoin de certaines capacités du système de fichiers qu'un montage samba ne fournit pas. Un lien symbolique ne résout pas ces problèmes. Le site bindfs fournit toutes ces exigences au serveur web en ajoutant une autre couche d'abstraction transparente. Pour ma part, je considérerais le bindfs est la solution la plus propre.

0voto

GuyPaddock Points 575

Il peut également s'agir d'une incompatibilité avec SendFile. Voir cette réponse : https://serverfault.com/a/62732

Ou une incompatibilité avec MMAP. Voir cette réponse : https://serverfault.com/a/1047215/191716

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X