Назад | Перейти на главную страницу

Почему apache закрывает подключения от удаленных клиентов для изображений, файлов javascript и css?

Недавно я установил 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 ... Работает!