O Apache não está servindo algum conteúdo de um compartilhamento de rede montado para mim no Ubuntu.
Dependendo do conteúdo do arquivo que tento abrir ele não é servido corretamente:
Isso não funciona:
is a link to another nifty site
<H2>This is a Medium Header</H2>
O Chrome emite a seguinte mensagem de erro: " ERR_INVALID_HTTP_RESPONSE "
Carteiro: " Erro: Erro de análise: HTTP esperado/ "
curl: " curl: (1) HTTP/0.9 recebido quando não permitido "
Isso funciona (apenas mais uma linha em branco)
is a link to another nifty site
<H2>This is a Medium Header</H2>
O compartilhamento de rede é montado em /media/data (cifs; para fins de teste, as permissões são definidas como 777)
Há um link simbólico de /var/www/server para /media/data e posso ver e alterar o conteúdo de dentro da VM.
Não faz muito sentido para mim que o apache seja exigente quanto ao conteúdo do arquivo. Não tenho certeza de como interpretar as mensagens de erro dos 3 clientes diferentes, mas como todos eles estão falhando, parece que o Apache é o problema, embora o log de erros não mostre nenhum problema.
Depois de copiar o arquivo para /var/www/html (diretório padrão) e alterar o vhost para esse local, os arquivos são servidos, independentemente do conteúdo.
Não sei se isso importa, mas ao pesquisar " ERR_INVALID_HTTP_RESPONSE " online, encontrei algumas pessoas falando sobre o comportamento estranho do chrome em algumas portas: Atualmente, estou executando o servidor na porta 28080 (para compatibilidade com versões anteriores com a configuração atual e porque estou planejando configurar o nginx na porta 80); O nginx já está instalado, mas não acho que esteja interferindo.
Por favor, desculpe-me se isso soa um pouco confuso, mas provavelmente é só porque eu também estou totalmente confuso.
Esta é uma VM limpa, os únicos pacotes adicionais são apache, nginx e cifs-utils, até onde eu sei.
Alguém mais encontrou um comportamento estranho com compartilhamentos de rede neste contexto? Eu quero os htdocs no compartilhamento de rede, pois é mais fácil para mim acessar da minha máquina Windows. Há alguma maneira recomendada de acessar os htdocs além de um compartilhamento de rede?
Editar:
curl --verbose --output out.txt --http0.9 localhost:28080/test.html
dá a seguinte saída de console:
% 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
Enquanto out.txt contém o seguinte:
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�^@^@�r�X]﹟^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^X^@^@^@^@^@^@^@����������������^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
Em outro arquivo, a sequência estranha no final contém, na verdade, a palavra-chave SMB. Não sei se isso é coincidência ou se isso realmente significa alguma coisa:
19:34:11 GMT
ETag: *removed*
Accept-Ranges: bytes
Content-Length: 6
Content-Type: text/plain
sadssa^@^@^@^@]﹟^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@)^@^A^Re ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@�����������������SMB@^@^@^@^@^@^@^@^F^@
^@^D^@^@^@^@^@^@^@�)^@^@^@^@^@^@w�^@^@�r�X]﹟^@^@^@^@^@
Eu também notei a parte r e X que poderia ter algo a ver com as permissões do arquivo?
Editar 2:
compartilhamento de rede (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
link simbólico estabelecido com:
sudo ln -s /media/data/ /var/www/server
apache2.conf:
[...]
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
[...]
Não faça um link simbólico
/media/data
para,/var/www/server
mas use bindfs em vez disso:Se a página da Web servida for estática ou usar um banco de dados como back-end, você também poderá adicionar a
-r
opção à chamada do bindfs, para tornar a montagem somente leitura.Adicione uma entrada
/etc/fstab
para montar automaticamente na inicialização:A maioria dos servidores da Web espera que os arquivos sejam de propriedade
www-data
e precisam de certos recursos do sistema de arquivos que uma montagem de samba não fornece. Um link simbólico não resolve esses problemas. Abindfs
solução fornece todos esses requisitos para o servidor da Web adicionando outra camada transparente de abstração. FWIW, eu consideraria abindfs
abordagem a solução muito mais limpa.Em "/etc/apache2/apache2.conf", adicione:
Isso salvou minha vida~
Isso também pode ser uma incompatibilidade com SendFile. Veja esta resposta: https://serverfault.com/a/62732
Ou uma incompatibilidade com MMAP. Veja esta resposta: https://serverfault.com/a/1047215/191716