Nginx не работает домен

Почему мой второй сайт в nginx.conf не работает?

У меня есть локальный тестовый сервер NginX на моем компьютере с Windows 10. Это только для создания и тестирования веб-сайтов, оно не передается в Интернет.

Некоторое время я успешно тестировал один сайт в localhost , но теперь хочу добавить второй тестовый сайт. Я думал, что смогу добиться этого, продублировав блок server<> в файле nginx.conf и изменив имя server_name и несколько других параметров, но, похоже, это не работает. Когда я пытаюсь загрузить свой второй тестовый сайт в Chrome, я получаю такую ошибку:

Этот сайт не может быть достигнут

Не удалось найти DNS-адрес сервера local_test_2.

Однако мой сайт в localhost все еще работает.

Почему мой второй тестовый сайт не работает?

Вот мой текущий файл nginx.conf :

В моем файле C:\Windows\System32\drivers\etc\hosts есть следующее:

Текущая спецификация localhost закомментирована. Стоит ли менять этот файл?

2 ответа

Вам необходимо добавить local_test_2 в файл хоста Windows: в

В файле хоста добавьте строку ниже в последнюю очередь

Также вы можете проверить ссылку для настройки нового хоста в nginx по адресу: Настройка Nginx на локальном компьютере

local_test_2 — это URL-адрес, который вы создали для тестирования. Поскольку вы не покупали его у какого-либо регистратора, ни один DNS-провайдер не сможет преобразовать url в IP-адрес.

В каждой операционной системе есть файл hosts (в Linux это будет /etc/hosts ), который можно использовать для сопоставления URL-адресов с IP-адресами без использования какой-либо онлайн-службы DNS. Итак, в вашем случае вы можете добавить следующую строку,

Который указывает направлять все запросы к local_test_2 на тот же компьютер ( 127.0.0.1 ). Никаких других изменений в файле hosts не требуется.

См. эту ссылку для получения дополнительных сведений о файлах hosts и различных файлах, используемых в разных операционных системах. .

Источник

Частые ошибки в настройках Nginx, из-за которых веб-сервер становится уязвимым

Nginx — это веб-сервер, на котором работает треть всех сайтов в мире. Но если забыть или проигнорировать некоторые ошибки в настройках, можно стать отличной мишенью для злоумышленников. Detectify Crowdsource подготовил список наиболее часто встречающихся ошибок, делающих сайт уязвимым для атак.

Nginx — один из наиболее часто используемых веб-серверов в Интернете, поскольку он модульный, отзывчивый под нагрузкой и может масштабироваться на минимальном железе. Компания Detectify регулярно сканирует Nginx на предмет неправильных настроек и уязвимостей, из-за которых могут пострадать пользователи. Найденные уязвимости потом внедряются в качестве теста безопасности в сканер веб-приложений.

Мы проанализировали почти 50 000 уникальных файлов конфигурации Nginx, загруженных с GitHub с помощью Google BigQuery. С помощью собранных данных удалось выяснить, какие ошибки в конфигурациях встречаются чаще всего. Эта статья прольёт свет на следующие неправильные настройки Nginx:

Отсутствует корневой каталог

Небезопасное использование переменных

Чтение необработанного ответа сервера

Отсутствует корневой каталог

Root-директива указывает корневую папку для Nginx. В приведённом выше примере корневая папка /etc/nginx , что означает, что мы можем получить доступ к файлам в этой папке. В приведенной выше конфигурации нет места для / (location / <. >) , только для /hello.txt . Из-за этого root-директива будет установлена ​​глобально, а это означает, что запросы к / перенаправят вас на локальный путь /etc/nginx .

Читайте также:  Asus keyboard hotkeys не работает

Такой простой запрос, как GET /nginx.conf , откроет содержимое файла конфигурации Nginx, хранящегося в /etc/nginx/nginx.conf. Если корень установлен в /etc , запрос GET на /nginx/nginx.conf покажет файл конфигурации. В некоторых случаях можно получить доступ к другим файлам конфигурации, журналам доступа и даже зашифрованным учётным данным для базовой аутентификации HTTP.

Из почти 50 000 файлов конфигурации Nginx, которые мы проанализировали, наиболее распространёнными корневыми путями были следующие:

Потерявшийся слеш

При неправильной настройке off-by-slash можно перейти на один шаг вверх по пути из-за отсутствующей косой черты. Orange Tsai поделился информацией об этом в своём выступлении на Blackhat «Нарушение логики парсера!». Он показал, как отсутствие завершающей косой черты в location директиве в сочетании с alias директивой позволяет читать исходный код веб-приложения. Менее известно то, что это также работает с другими директивами, такими как proxy_pass . Давайте разберёмся, что происходит и почему это работает.

Если на Nginx запущена следующая конфигурация, доступная на сервере, можно предположить, что доступны только пути в http://apiserver/v1/ .

Когда запрашивается http://server/api/user , Nginx сначала нормализует URL. Затем он проверяет, соответствует ли префикс /api URL-адресу, что он и делает в данном случае. Затем префикс удаляется из URL-адреса, поэтому остаётся путь /user. Затем этот путь добавляется к URL-адресу proxy_pass , в результате чего получается конечный URL-адрес http://apiserver/v1//user .

Обратите внимание, что в URL-адресе есть двойная косая черта, поскольку директива местоположения не заканчивается косой чертой, а путь URL-адреса proxy_pass заканчивается косой чертой. Большинство веб-серверов нормализуют http://apiserver/v1//user до http://apiserver/v1/user , что означает, что даже с этой неправильной конфигурацией всё будет работать так, как ожидалось, и это может остаться незамеченным.

Эта неправильная конфигурация может быть использована путём запроса http://server/api../ , из-за чего Nginx запросит URL-адрес http://apiserver/v1/../ , который нормализован до http://apiserver/ . Уровень вреда от такой ошибки определяется тем, чего можно достичь, если использовать эту неправильную конфигурацию. Например, это может привести к тому, что статус сервера Apache будет отображаться с URL-адресом http://server/api../server-status , или он может сделать доступными пути, которые не должны быть общедоступными.

Одним из признаков того, что сервер Nginx имеет неправильную конфигурацию, является возврат сервером одинакового же ответа при удалении косой черты в URL-адресе. То есть, если http://server/api/user и http://server/apiuser возвращают один и тот же ответ, сервер может быть уязвимым. Он позволяет отправлять следующие запросы:

Небезопасное использование переменных

Некоторые фреймворки, скрипты и конфигурации Nginx небезопасно используют переменные, хранящиеся в Nginx. Это может привести к таким проблемам, как XSS, обход HttpOnly-защиты, раскрытие информации и в некоторых случаях даже RCE.

SCRIPT_NAME

С такой конфигурацией, как эта:

основная проблема будет заключаться в том, что Nginx отправит интерпретатору PHP любой URL-адрес, заканчивающийся на .php, даже если файл не существует на диске. Это распространённая ошибка во многих конфигурациях Nginx, и об этом говорится в документе «Ловушки и распространенные ошибки», созданном Nginx.

XSS возможен, если PHP-скрипт попытается определить базовый URL на основе SCRIPT_NAME ;

Использование $uri может привести к CRLF-инъекции

Другая неправильная конфигурация, связанная с переменными Nginx, заключается в использовании $uri или $document_uri вместо $request_uri .

Читайте также:  Как отремонтировать подошву резиновые сапоги

$ur i и $document_uri содержат нормализованный URI, тогда как нормализация в Nginx включает URL-декодирование URI. В блоге Volema рассказывалось, что $uri обычно используется при создании перенаправлений в конфигурации Nginx, что приводит к внедрению CRLF.

Пример уязвимой конфигурации Nginx:

Символами новой строки для HTTP-запросов являются \r (возврат каретки) и \n (перевод строки). URL-кодирование символов новой строки приводит к следующему представлению символов %0d%0a . Когда эти символы включены в запрос типа http://localhost/%0d%0aDetectify:%20clrf на сервер с неправильной конфигурацией, сервер ответит новым заголовком с именем Detectify , поскольку переменная $uri содержит новые URL-декодированные строчные символы.

Произвольные переменные

В некоторых случаях данные, предоставленные пользователем, можно рассматривать как переменную Nginx. Непонятно, почему это происходит, но это встречается не так уж редко, а проверяется довольно-таки сложным путём, как видно из этого отчёта. Если мы поищем сообщение об ошибке, то увидим, что оно находится в модуле фильтра SSI, то есть это связано с SSI.

Одним из способов проверки является установка значения заголовка referer:

Мы просканировали эту неправильную конфигурацию и обнаружили несколько случаев, когда пользователь мог получить значение переменных Nginx. Количество обнаруженных уязвимых экземпляров уменьшилось, что может указывать на то, что уязвимость исправлена.

Чтение необработанного ответа сервера

С proxy_pass Nginx есть возможность перехватывать ошибки и заголовки HTTP, созданные бэкендом (серверной частью). Это очень полезно, если вы хотите скрыть внутренние сообщения об ошибках и заголовки, чтобы они обрабатывались Nginx. Nginx автоматически предоставит страницу пользовательской ошибки, если серверная часть ответит ей. А что происходит, когда Nginx не понимает, что это HTTP-ответ?

Если клиент отправляет недопустимый HTTP-запрос в Nginx, этот запрос будет перенаправлен на серверную часть как есть, и она ответит своим необработанным содержимым. Тогда Nginx не распознает недопустимый HTTP-ответ и просто отправит его клиенту. Представьте себе приложение uWSGI, подобное этому:

И со следующими директивами в Nginx:

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

proxy_hide_header почти не требует пояснений; он скроет любой указанный HTTP-заголовок от клиента.

Если мы отправим обычный GET-запрос, Nginx вернёт:

Но если мы отправим неверный HTTP-запрос, например:

То получим такой ответ:

merge_slashes отключены

Для директивы merge_slashes по умолчанию установлено значение «on», что является механизмом сжатия двух или более слешей в один, поэтому /// станет / . Если Nginx используется в качестве обратного прокси и проксируемое приложение уязвимо для включения локального файла, использование дополнительных слешей в запросе может оставить место для его использования. Об этом подробно рассказывают Дэнни Робинсон и Ротем Бар.

Мы нашли 33 Nginx-файла, в которых для параметра merge_slashes установлено значение «off».

Попробуйте сами

Мы создали репозиторий GitHub, где вы можете использовать Docker для настройки своего собственного уязвимого тестового сервера Nginx с некоторыми ошибками конфигурации, обсуждаемыми в этой статье, и попробуйте найти их самостоятельно!

Вывод

Nginx — это очень мощная платформа веб-серверов, и легко понять, почему она широко используется. Но с помощью гибкой настройки вы даёте возможность совершать ошибки, которые могут повлиять на безопасность. Не позволяйте злоумышленнику взломать ваш сайт слишком легко, не проверяя эти распространённые ошибки конфигурации.

Читайте также:  Не работает соленоид водительской двери приора

Вторая часть будет позднее.

Что ещё интересного есть в блоге Cloud4Y

Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем не чаще двух раз в неделю и только по делу.

Источник

Не работает домен по https

Здравствуйте. Имеется nginx, который я вручную поставил добавляяя вручную каждый модуль.
Вот так конфигурил:
./configure —with-http_ssl_module —conf-path=/etc/nginx/nginx.conf —add-module=/opt/geoip2/ngx_http_geoip2_module —with-http_dav_module —with-http_gunzip_module —with-http_gzip_static_module —http-log-path=/var/log/nginx/access.log —error-log-path=/var/log/nginx/error.log —with-debug —with-pcre-jit —with-ipv6 —with-http_realip_module —with-http_auth_request_module —with-http_addition_module —with-http_dav_module —with-http_gunzip_module —with-http_gzip_static_module —with-http_v2_module —with-http_sub_module —with-stream —with-mail —with-threads —with-stream_ssl_module —with-mail_ssl_module

Есть два сайта в sites-enabled: api и panel.
api работает по http и все норм. Но panel работает по https. Вроде как все модули подключил ssl, но всеравно не хочет заходить.
Конфига panel:

До того как ставил nginx с нуля, был скачан nginx по команде sudo apt-get install nginx. После этого я удалил командой sudo apt-get purge nginx nginx-common и поставил c нуля.

Ключи в папке snippets уже были. Нужно ли генерить новые ключи после каждой инсталяции nginx? И вообще, как думаете почему я не могу зайти по домену panel.MY_DOMEN.ru?
Раньше этот домен работал в прошлом nginx.

Добавлено через 1 час 56 минут
Вопрос такой — нужно ли ключ сертификата менять после переинсталяции nginx?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как проксировать чужой сайт (https) через свой сервер (домен)?
Добрый день. Есть свой домен, хостинг (на нём nginx) и пустой index.html (все доступы/управлялки).

Не работает https
Когда я функцией file_get_contents или get_headers или подобной открываю URL, который начинается с.

Https не работает
Привет. Недавно установил Apache 2.4. Сделал настройки по инструкциям, но вот с https проблема.

File_get_contents не работает с https
Здравствуйте, не могу получить данные с помощью file_get_contents, выдает ошибку: «failed to open.

Убрал http2. Ровно тоже самое блин.

Добавлено через 1 минуту
Я не понимаю почему в этих логах нет вообще ничего.
access_log /var/log/nginx/panel.access.log;
error_log /var/log/nginx/panel.error.log;

Даже на эту папку chmod -R 777 сделал

Добавлено через 1 минуту
Редактирую конфигу в /etc/nginx/sites-enabled

Добавлено через 1 минуту
Вот что мне вернул curl:
root@dev-MY_ADDRESS:/etc/nginx/sites-enabled# curl -v https://panel.MY_ADDRESS.ru/ * Trying 2a01:4f8:162:2249::12. * connect to 2a01:4f8:162:2249::12 port 443 failed: Connection refused * Trying 5.9.131.132. * Connected to panel.MY_ADDRESS.ru (5.9.131.132) port 443 (#0) * found 173 certificates in /etc/ssl/certs/ca-certificates.crt * found 692 certificates in /etc/ssl/certs * ALPN, offering http/1.1 * gnutls_handshake() failed: The TLS connection was non-properly terminated. * Closing connection 0 curl: (35) gnutls_handshake() failed: The TLS connection was non-properly terminated.

Добавлено через 44 секунды
Во блин может в этом косяк? gnutls_handshake() failed

В первом файле:
ssl_certificate /etc/letsencrypt/live/MY_URL.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/MY_URL.ru/privkey.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers «EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH»;
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the «preload» directive if you understand the implications.
#add_header Strict-Transport-Security «max-age=63072000; includeSubdomains; preload»;
add_header Strict-Transport-Security «max-age=63072000; includeSubdomains»;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

Добавлено через 36 секунд
Просто дело в том, что до того как я переустановил nginx, эти сертификаты были. И они работали,

Добавлено через 56 секунд
И еще не пойму, куда должно писаться если не может зайти на https

Источник

Оцените статью