мой веб-сервер 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, или если его слушает какая-то другая программа.
Ваша система может быть взломана. В этом случае вам необходимо выполнить восстановление из резервных копий и обновить систему, прежде чем подключать ее.