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

nginx загружает пустой файл по запросу на порт 80 (вместо перенаправления на порт 443)

мой веб-сервер nginx не делает того, что должен. Все запросы http: // к серверу должны быть перенаправлены с http 301 на https: //, последние несколько дней он работал нормально, пока не перестал работать без каких-либо изменений.

Nginx возвращает пустой файл с типом «application / octet-stream» и следующим содержимым (читаемым в возвышенном виде):

0000 1204 0000 0000 0000 0300 0000 8000
0400 0000 0000 0500 ffff ff00 0004 0800
0000 0000 7fff 0000 0000 0807 0000 0000
0000 0000 0000 0000 01

Сначала я попытался удалить строчку

default_type application/octet-stream;

из моего nginx.conf, но это не помогло.

Заголовок http-ответа возвращает

Status: �����

Мой серверный блок для 301 редиректа с http: // на https: // выглядит следующим образом

server {
   listen 80;
   listen [::]:80;
   server_name my.tld www.my.tld;
   return 301 https://$server_name$request_uri;
}

Nginx ничего не регистрирует, когда получает http: // запрос. (/var/log/nginx/error.log | /var/log/nginx.access.log). Также PHP7.0-fpm.

Все необходимое установлено, обновлено и обновлено. Перезапуск служб и самого сервера не помог.

Вот результат curl -v http: //my.tld/

* Connected to my.tld (123.123.123.123) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.38.0
> Host: my.tld
> Accept: */*
> 
< HTTP/1.1 200 OK
< Mime-Version: 1.0
< Date: Thu, 06 Oct 2016 06:10:53 GMT
< X-Transformed-From: HTTP/0.9
< Transfer-Encoding: chunked
< Connection: keep-alive
< 
* Connection #0 to host my.tld left intact

Почему nginx возвращает 200 OK, когда должен возвращать постоянное перенаправление 301?

Ничего не менял, с такими же конфигами работало ... Надеюсь, кто-нибудь мне поможет :-(. Может, проблема с DNS?

Лучшее, Unkn0wn0x

Добавьте это просто потому, что это одна из немногих страниц, которые появляются при поиске в Google по соответствующей теме.

У меня была такая же проблема, и я наконец обнаружил, что разрешение было таким же, как вы обрисовали.

Видимо уточняя http2 с участием listen 80 (без ssl) - это не bueno. И это еще больше сбивает с толку, потому что это ускользает от всех проверок конфигурации nginx.

Я решил проблему. Это был файл конфигурации из поддомена, для которого был настроен собственный корневой каталог. Конфигурационный файл из поддомена имел

listen 80 http2;
listen [::]:80 http2

что повлияло на весь веб-сервер без каких-либо ошибок / файлов журнала или чего-то подобного (nginx -t также положительный). После того, как я переустановил nginx и шаг за шагом сделал резервную копию файлов конфигурации, я обнаружил ошибку.

Спасибо за поддержку.

Лучшее, Unkn0wn0x

Я ничего не нашел относительно X-Transformed-From заголовок. Мой nginx прослушивает следующие порты:

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10282/nginx -g daem tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 10282/nginx -g daem tcp6 0 0 :::443 :::* LISTEN 10282/nginx -g daem tcp6 0 0 :::80 :::* LISTEN 10282/nginx -g daem

Если я запрашиваю https: // my.tld, а затем http: // my.tld, он работает как шарм. На мобильном телефоне, если я запрошу в режиме инкогнито / приватной вкладке http: //my.tld он мгновенно перенаправляет на https: //.

Я попробовал инструмент "HTTP-поиск" из http://mxtoolbox.com/ с моим доменом он возвращает ошибку:

HTTP connect The server committed a protocol violation. Section=ResponseStatusLine (http://my.tld)

Я проверил, не блокируют ли какие-то правила брандмауэра (ufw) или что-то подобное на 80-м порту, но это не так.

ufw статус

80                         ALLOW       Anywhere
80 (v6)                    ALLOW       Anywhere (v6)
443                        ALLOW       Anywhere
443 (v6)                   ALLOW       Anywhere (v6)

На my.tld всего несколько html-файлов, без php или подобных.

Ошибки mxtoolbox говорят, что он не может подключиться к моему серверу (http: // / порт 80), но это возможно. Настройка DNS тоже в порядке.

Я в недоумении :-(

С уважением, Unkn0wn0x

В X-Transformed-From заголовок выглядит подозрительно. Проверить с netstat -lnp команда, если nginx действительно слушает порт 80, или если его слушает какая-то другая программа.

Ваша система может быть взломана. В этом случае вам необходимо выполнить восстановление из резервных копий и обновить систему, прежде чем подключать ее.