2014-09-26 11 views
1

Я пытаюсь поймать весь трафик, не попавший в файл конфигурации с поддержкой сайтов, и вместо того, чтобы метать 404 по умолчанию, вместо этого вместо 200 вместо этого следует использовать пустой ответ ,Поймать все не обработанные запросы с HTTP 200 + статическим файлом

Так, например, если мой сайт https://www.example.com на IP x.x.x.x и кто-то переводит https://www.bad.com на мой IP в x.x.x.x они бы просто получить 200 с пустым содержанием.

Для этого у меня есть файл, расположенный на /var/www/index.html, который является пустой файл, и иметь следующий набор правил в {nginxdir}/conf.d/200catchall.conf, который импортируется в стандартном {nginxdir} /nginx.conf файла:

# Serve blank page to any requests not intended for one of our servers 
server { 
     listen 443; 
     server_name _; 
     location/{ 
       root /var/www 
     } 
} 

Это отлично подходит для рендеринга 200 пустого экрана для запроса на https://www.bad.com. Тем не менее, он пытается пройти через каталог, когда запрашивается что-то вроде https://www.bad.com/cgibin/nofile.php, и заканчивает тем, что бросали ошибку error.log и приводит в конечном счете, в 404.

Я также попытался заменить root директиву с try_files /var/www/index.html директивы , который, кажется, дает тот же результат ...

Вытягивали мои волосы на некоторое время на этом - любой совет?

ответ

4

Чтобы избежать отправки любого содержимого обратно, минимальная нагрузка на сервер, вернуть вместо него 204 No Content ответ. См. Wikipedia Entry.

server { 
    listen 80 default_server; 
    listen 443 ssl default_server; 

    return 204; 
} 

Альтернативный подход к созданию поймать всех серверов является described here.

+0

Это то, что в конечном итоге помогло мне. Я использую 204 для всех запросов, которые не предназначены для моего сервера. Благодаря! – matt

1

Простейшее поймать-все выглядит следующим образом:

server { 
    listen 80 default_server; 
    listen 443 ssl default_server; 

    return 200; 
} 
+0

Спасибо за быстрый ответ Alexey ... проблема в том, что если я получаю запрос для большинства форматов файлов, кроме * .html (например, 'https: // www.bad.com/flarg/blarf.zip') браузер фактически загружает ответ как этот тип файла, вместо того, чтобы отображать пустую страницу html ... любые советы? – matt

Смежные вопросы