Недавно я установил apache 2.4 на сервер openSUSE Leap 15.1 в локальной сети с включенным php. Я могу получить доступ к файлам html и php из браузера на рабочем столе, но ресурсы (изображения, css и javascript) не загружаются.
После расследования кажется, что соединение закрывается, когда браузер запрашивает эти файлы, но не html или php:
C:\Users\PATRICK>curl -v http://myserver/style.css
* Trying 192.168.0.250...
* TCP_NODELAY set
* Connected to myserver (192.168.0.250) port 80 (#0)
> GET /style.css HTTP/1.1
> Host: myserver
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 05 Nov 2019 04:59:19 GMT
< Server: Apache
< Last-Modified: Wed, 30 Oct 2019 06:51:25 GMT
< ETag: "2e5-5961b2954acf9"
< Accept-Ranges: bytes
< Content-Length: 741
< Content-Type: text/css
<
* transfer closed with 741 bytes remaining to read
* Closing connection 0
curl: (18) transfer closed with 741 bytes remaining to read
Это не происходит при запросе с самого сервера. Журналы доступа apache, похоже, указывают на то, что, с его точки зрения, запрос был успешно обработан:
192.168.200.30 - - [05/Nov/2019:04:59:19 +0000] "GET /style.css HTTP/1.1" 200 741 "http://myserver/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
Я не могу понять, что происходит.
Итак, ответ заключается в том, что мне нужен этот параметр в моем файле конфигурации Apache:
EnableSendFile Off
Как документация читает:
Эта директива определяет, может ли httpd использовать поддержку sendfile из ядра для передачи содержимого файла клиенту. По умолчанию, когда обработка запроса не требует доступа к данным в файле - например, при доставке статического файла - Apache httpd использует sendfile для доставки содержимого файла, не читая файл, если ОС поддерживает это.
Похоже, это не поддерживается должным образом на сервере, на котором я работаю (OpenSUSE Leap 15.1 с ядром по умолчанию 4.12.14-lp151.28.20).
Хай, наконец, найди ответ на другом форуме. Взгляните на listen.conf
Оригинал содержит: Listen 80
Таким образом, сервер apache слушает только IP6.
Я изменил конфигурацию на: Слушайте 0.0.0.0:80
Теперь сервер слушает IP4 ... Работает!