Існує можливість приховати версію, щоб вона відображала лише nginx, але чи є спосіб приховати це, щоб нічого не відображати чи змінювати заголовок?
Існує можливість приховати версію, щоб вона відображала лише nginx, але чи є спосіб приховати це, щоб нічого не відображати чи змінювати заголовок?
Відповіді:
Як і Apache, це швидке редагування джерела та перекомпіляція. З сайту Calomel.org :
Сервер: рядок - це заголовок, який надсилається клієнту назад, щоб повідомити, який тип http-сервера ви використовуєте та, можливо, яку версію. Цей рядок використовується в таких місцях, як Alexia та Netcraft для збору статистичних даних про те, скільки та який тип веб-сервера живуть в Інтернеті. Щоб підтримати автора та статистику для Nginx, радимо зберегти цю рядок такою, якою є. Але, для безпеки, можливо, ви не хочете, щоб люди знали, що ви працюєте, і ви можете змінити це у вихідному коді. Відредагуйте вихідний файл,
src/http/ngx_http_header_filter_module.c
перегляньте рядки 48 та 49. Ви можете змінити рядок на все, що завгодно.
## vi src/http/ngx_http_header_filter_module.c (lines 48 and 49)
static char ngx_http_server_string[] = "Server: MyDomain.com" CRLF;
static char ngx_http_server_full_string[] = "Server: MyDomain.com" CRLF;
Березень 2011 року редагуйте: Реквізити до Флавію нижче, щоб вказати на новий варіант, замінивши стандартний HginpHeadersModule Nginx на роздвоєний HttpHeadersMoreModule . Перекомпіляція стандартного модуля все ще є швидким виправленням, і має сенс, якщо ви хочете використовувати стандартний модуль і не будете часто змінювати рядок сервера. Але якщо ви хочете більше цього, HttpHeadersMoreModule - це сильний проект, який дозволяє робити всілякі чорні магії виконання під час заголовків HTTP.
r->headers_out.server
.
Якщо ви використовуєте nginx для проксі-сервера додаткової програми та хочете, щоб бек-енд рекламував власну Server:
заголовок, не перезаписуючи його, ви можете зайти всередину вашої server {…}
строфи та встановити:
proxy_pass_header Server;
Це переконає nginx залишити цей заголовок у спокої і не переписати значення, встановлене бек-ендом.
Останнє оновлення було деякий час тому, ось ось що працювало для мене на Ubuntu:
sudo apt-get update
sudo apt-get install nginx-extras
Потім додайте наступні два рядки до http
розділу nginx.conf
, який зазвичай знаходиться за адресою /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
Крім того, не забудьте перезапустити nginx за допомогою sudo service nginx restart
.
more_set_headers 'Server: ';
Просто, відредагуйте /etc/nginx/nginx.conf та видаліть коментар із
#server_tokens off;
Пошук у розділі http .
Дуже просто: додайте ці рядки до розділу сервера:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
щоб отримати цей модуль.
Існує спеціальний модуль: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Цей модуль дозволяє додавати, встановлювати або очищати будь-який вихідний або вхідний заголовок, який ви вказали.
Це розширена версія стандартних заголовків модуль , оскільки він забезпечує більше утиліта , як скидання або очищення «вмонтовані заголовками» , як
Content-Type
,Content-Length
іServer
.Він також дозволяє вказати необов'язкові критерії коду статусу HTTP, використовуючи
-s
опцію та необов’язкові критерії типу вмісту, використовуючи-t
параметр, змінюючи вихідні заголовки за допомогою директив more_set_headers та more_clear_headers ...
--add-module=/path-to-headers-more-nginx-module
Встановіть додатки Nginx
sudo apt-get update
sudo apt-get install nginx-extras
Інформацію про сервер можна видалити з відповіді, додавши наступні два рядки в nginx.conf (у розділі http)
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
не працює - я думаю, це працює на Debia / Ubuntu і т apt-get
.
Якщо ви все добре, просто змінивши заголовок на інший рядок на п'ять літер або менше, ви можете просто переклеїти двійковий файл.
sed -i 's/nginx\r/thing\r/' `which nginx`
Що, як рішення, має кілька помітних переваг. А саме, що ви можете дозволити вашій версії nginx керувати менеджером пакунків (отже, ніякого компіляції з джерела), навіть якщо nginx-додатки недоступні для вашого дистрибутива, і вам не потрібно турбуватися про будь-який із додаткових код чогось на зразок nginx-extras є вразливим.
Звичайно, ви також хочете встановити параметр server_tokens off
, приховати номер версії або також виправити цей рядок формату.
Я кажу "п’ять літер чи менше", оскільки, звичайно, завжди можна замінити:
nginx \ r \ 0
з
bob \ r \ 0 \ r \ 0
Останні два байти залишаються незмінними.
Якщо вам потрібно більше п'яти символів, вам потрібно залишити сервер_tokens включеним і замінити (трохи довший) рядок формату, хоча знову ж таки є верхня межа цієї довжини, накладена довжиною рядка формату - 1 (для повернення вагона).
... Якщо жодне з перерахованого вище не має для вас сенсу, або ви ніколи не виправляли бінарний файл, ви, можливо, захочете триматися подалі від цього підходу.
sed
команду вище, `which nginx`
частина повертає шлях до двійкового файла, а sed
команда виконує заміну байтів.
nginx
щоб зміни вступили в силу. Все, що сказали? Я закликаю вас не використовувати одну з інших відповідей. Якщо всі речі, про які я говорю, вам уже не знайомі, і ви не знаєте, для чого це /etc
каталог, то такий хак такий небезпечний.
Єдиний спосіб - змінити файл src / http / ngx_http_header_filter_module.c. Я змінив nginx у рядку 48 на інший рядок.
Що можна зробити у файлі конфігурації nginx, це встановити server_tokens вимкнено . Це не дозволить nginx друкувати номер версії.
Щоб перевірити речі, спробуйте curl -I http://vurbu.com/ | grep Сервер
Це має повернутися
Server: Hai
Після того, як я прочитав відповідь Парфяна Шот, я переконуюсь у /usr/sbin/nginx
двійковий файл. Тоді я дізнався, що файл містить ці три рядки.
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
В основному перші два з них призначені для server_tokens on;
директив (включена версія сервера). Потім я змінюю критерії пошуку, щоб відповідати цим рядкам у двійковому файлі.
sed -i 's/Server: nginx/Server: thing/' `which nginx`
Після того, як я копаю далі, я виявив, що повідомлення про помилку, створене nginx, також міститься в цьому файлі.
<hr><center>nginx</center>
Їх три, одна без версії, дві з них включали версію. Тому я запускаю наступну команду для заміни рядка nginx у повідомленні про помилку.
sed -i 's/center>nginx/center>thing/' `which nginx`
/usr/sbin
папки, дає це:sed: can't read is: No such file or directory
Згідно з документацією на nginx він підтримує власні значення або навіть виключення:
Syntax: server_tokens on | off | build | string;
але, на жаль, лише з комерційною підпискою :
Крім того, у рамках комерційної підписки, починаючи з версії 1.9.13, підпис на сторінках помилок та значення поля заголовка відповіді «Сервер» можна встановити явно, використовуючи рядок зі змінними. Порожня рядок вимикає емісію поля "Сервер".
Я знаю, що публікація якась стара, але я знайшов рішення, яке легко працює на дистрибутиві на основі Debian без компіляції nginx з джерела.
Спочатку встановіть пакет nginx-extras
sudo apt встановити nginx-додатки
Потім завантажте додатковий модуль заголовків nginx http, відредагувавши nginx.conf і додавши наступний рядок всередині блоку сервера
модулі load_module / ngx_http_headers_more_filter_module.so;
Після цього ви отримаєте доступ до директив more_set_headers і more_clear_headers.
Зараз додатковий пакет Nginx застарілий.
Отже, тепер для мене працювали, коли я намагався встановити різні пакунки more_set_headers 'Server: My Very Own Server';
Ви можете просто виконати наступне, і інформація про сервер чи версію не буде надсилатися назад
server_tokens '';
якщо ви просто хочете видалити номер версії, це працює
server_tokens off;
Ви запитуєте про значення заголовка Сервера у відповіді? Ви можете спробувати змінити це за допомогою директиви add_header, але я не впевнений, чи спрацює це. http://wiki.codemongers.com/NginxHttpHeadersModule