Сервер всегда возвращает страницу 404, которая не найдена, и Клиент отправил HTTP-запрос на HTTPS-сервер. ошибки

Недавно я перенес свою серверную ОС с CentOS 7 на поток CentOS 8 со стандартными вариантами установки. Теперь я столкнулся с ошибкой при доступе к серверу HTTP / S.

Предположим, вы используете http-сервер на порте 80 или 443. Например, используя модуль python http.server:

$> sudo python3 -m http.server -b xxx.xxx.xxx.xxx 80[or 443]

Здесь xxx.xxx.xxx.xxx представляет собой общедоступный IP-адрес, а http.server можно заменить любым веб-сервером, таким как Apache, Nginx или контейнер Podman.

Чтобы избежать влияния брандмауэра, я отключил firewalld.service с помощью:

$> sudo systemctl stop firewalld.service

Кроме того, перед запуском http-сервера я подтвердил, что ни один другой процесс не прослушивает порт 80 или 443:

$> netstat -lnt | grep 80[or 443]
$> # nothing returned

Итак, обычно, когда кто-то обращается к этому серверу, например, используя:

curl xxx.xxx.xxx.xxx

На него следует ответить некоторым контентом с работающего сервера, например папки и файлы в текущем каталоге.

Но в моем случае эта команда возвращает страница 404 не найдена на порту 80 и Клиент отправил HTTP-запрос на HTTPS-сервер на порт 443 в виде обычного текста, соответственно. Эта ошибка возникает только на портах 80 и 443 с общедоступным IP-доступом, это означает, что работает следующее действие.

$> curl localhost

Фактически, не имеет значения, есть ли запущенный http-сервер. Кажется, есть невидимый HTTP-сервер, работающий с более высоким приоритетом.

Я много пытался справиться с этой ошибкой и обнаружил, что при изменении статуса firewalld.service, например остановки / запуска / перезапуска firewalld.service, будет короткое время (около 10 секунд) для доступа к работающему серверу в обычном режиме после изменения.

Все запущенные службы перечислены ниже:

liuchang@xenonpy ~ ❯❯❯ systemctl --type=service --state=running
UNIT                     LOAD   ACTIVE SUB     DESCRIPTION
accounts-daemon.service  loaded active running Accounts Service
atd.service              loaded active running Job spooling tools
auditd.service           loaded active running Security Auditing Service
avahi-daemon.service     loaded active running Avahi mDNS/DNS-SD Stack
chronyd.service          loaded active running NTP client/server
colord.service           loaded active running Manage, Install and Generate Color Profiles
crond.service            loaded active running Command Scheduler
cups.service             loaded active running CUPS Scheduler
dbus.service             loaded active running D-Bus System Message Bus
firewalld.service        loaded active running firewalld - dynamic firewall daemon
gdm.service              loaded active running GNOME Display Manager
gssproxy.service         loaded active running GSSAPI Proxy Daemon
irqbalance.service       loaded active running irqbalance daemon
k3s.service              loaded active running Lightweight Kubernetes
ksmtuned.service         loaded active running Kernel Samepage Merging (KSM) Tuning Daemon
libstoragemgmt.service   loaded active running libstoragemgmt plug-in server daemon
mcelog.service           loaded active running Machine Check Exception Logging Daemon
ModemManager.service     loaded active running Modem Manager
NetworkManager.service   loaded active running Network Manager
packagekit.service       loaded active running PackageKit Daemon
polkit.service           loaded active running Authorization Manager
rdma-ndd.service         loaded active running RDMA Node Description Daemon
rhsmcertd.service        loaded active running Enable periodic update of entitlement certificates.
rngd.service             loaded active running Hardware RNG Entropy Gatherer Daemon
rpcbind.service          loaded active running RPC Bind
rsyslog.service          loaded active running System Logging Service
rtkit-daemon.service     loaded active running RealtimeKit Scheduling Policy Service
smartd.service           loaded active running Self Monitoring and Reporting Technology (SMART) Daemon
sshd.service             loaded active running OpenSSH server daemon
sssd.service             loaded active running System Security Services Daemon
systemd-journald.service loaded active running Journal Service
systemd-logind.service   loaded active running Login Service
systemd-machined.service loaded active running Virtual Machine and Container Registration Service
systemd-udevd.service    loaded active running udev Kernel Device Manager
tuned.service            loaded active running Dynamic System Tuning Daemon
udisks2.service          loaded active running Disk Manager
upower.service           loaded active running Daemon for power management
[email protected]        loaded active running User Manager for UID 1000
[email protected]          loaded active running User Manager for UID 42
wpa_supplicant.service   loaded active running WPA supplicant

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

40 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Я понятия не имею об этом и надеюсь, что кто-то может мне помочь. Заранее спасибо!


person tsumina    schedule 20.01.2021    source источник


Ответы (1)


Вы запускаете http-сервер без какого-либо другого контекста, поэтому в основном он покажет вам список каталогов того каталога, в котором была выполнена команда.

Теперь, если вы получили 404, это означает, что к curl прикреплен index.html http: //..../index.html.

Правильный способ сделать это - указать путь для обслуживания сервера, и тогда он будет работать.

Для этого просто перейдите в папку, содержащую index.html, запустите оттуда http.server и попробуйте еще раз, он должен правильно отобразить содержимое.

Дополнительные примеры см. Здесь: https://stackabuse.com/serving-files-with-pythons-simplehttpserver-module/

Изменить: что-то, что привлекает мое внимание, это то, что кажется, что вы используете настоящий веб-сервер, но ... не используете apache? не nginx?

Если вы просто сделаете это, как я вам сказал, http.server будет обслуживать index.html

введите описание изображения здесь

введите описание изображения здесь

person Marco    schedule 20.01.2021
comment
Спасибо за ваш ответ. Сервер python в вопросе является всего лишь примером, и к работающему серверу можно правильно получить доступ локально, например. curl localhost вернет реальный контент, но curl xxx.xxx.xxx.xxx вернет страница 404 не найдена, где xxx.xxx.xxx.xxx обозначает общедоступный IP-адрес. Я обновлю вопрос, чтобы включить эту информацию. - person tsumina; 21.01.2021
comment
Запуск реального веб-сервера с использованием apache, nginx, Podman или чего-либо еще дает ту же ошибку. - person tsumina; 21.01.2021
comment
@tsumina, ну ладно, эта штука с питоном меня немного смутила. В этом случае проверьте свой httpd.conf и убедитесь, что он не был изменен во время обновления. Убедитесь, что корень и корень документа, вы также хотите проверить наличие изменений на вашем виртуальном хосте, у вас может быть *: 80, убедитесь, что DirectoryIndex настроен, обычно index.html, index.php, и даже, и убедитесь, что они действительно существуют в DocumentRoot и что разрешения правильные. Убедитесь, что доступ к сокету свободен, вы можете использовать telnet или nc, если нет, то у вас проблема с FW вместо проблемы с веб-сервером. - person Marco; 21.01.2021