Squeak.ru - шаблоны программирования

Как избежать ошибки 500 Django для неразрешенного хоста с помощью Nginx

Я использую Django 1.5.1 на производственном веб-сайте, но у меня есть огромное количество отчетов 500 из-за запрещенных запросов хостов. Виртуальный хост Nginx моего веб-сайта настроен следующим образом:

server {
    listen 80;
    server_name mywebsite.com.br;

    location / {
        uwsgi_pass unix:/opt/project/run/brmed_web.sock;
        include uwsgi_params;
    }
}

И я установил разрешенные настройки хоста на settings.py как:

ALLOWED_HOSTS = ['mywebsite.com.br']

Несмотря на то, что он отлично работает с моим разрешенным хостом, я продолжаю получать следующие ошибки для странных хостов:

Traceback (most recent call last):

  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 92, in get_response
    response = middleware_method(request)

  File "/usr/local/lib/python2.7/dist-packages/django/middleware/common.py", line 57, in process_request
    host = request.get_host()

  File "/usr/local/lib/python2.7/dist-packages/django/http/request.py", line 72, in get_host
    "Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): %s" % host)

SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): 108.166.113.25

Некоторые из хостов, если не все, явно злонамеренные, поскольку их запросы пытаются обмануть некоторые вещи PHP. Подробнее об одном из хостов можно узнать по этой ссылке.

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

17.06.2013


Ответы:


1

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

По сути, ваша конфигурация должна выглядеть так, чтобы пропускать только запросы к «mywebsite.com.br»:

server {
    listen 80 default_server;
    location / {
        # or show another site
        return 403 "Forbidden";
    }
}

server {
    listen 80;
    server_name mywebsite.com.br;
    location / {
        uwsgi_pass unix:/opt/project/run/brmed_web.sock;
        include uwsgi_params;
    }
}

Если вам необходимо также обслуживать другие поддомены (www.mywebsite.com.br и т. д.), вы можете установить для server_name значение «.mywebsite.com.br».

17.06.2013
  • Привет! Это сработало отлично! Я не знал, что Nginx делает эту процедуру, когда не совпадает с правильным именем сервера. 18.06.2013
  • Мне пришлось добавить ; после Запрещено. Кроме того, если вам необходимо также обслуживать другие поддомены (www.mywebsite.com.br и т. д.), вы можете установить для server_name значение .mywebsite.com.br. 16.12.2013
  • Просто к сведению: начиная с версии 0.8.21 nginx изменил имя параметра с default на default_server. 22.07.2015
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...