आप सर्वर हेडर को नगीनक्स द्वारा कैसे बदल सकते हैं?


141

संस्करण को छिपाने का एक विकल्प है, इसलिए यह केवल नगनेक्स प्रदर्शित करेगा, लेकिन क्या इसे छिपाने का एक तरीका है ताकि यह कुछ भी नहीं दिखाएगा या हेडर को बदल देगा?


34
btw, nginx संस्करण को छिपाने के लिए आपको 'server_tokens off' सेट करना होगा।
२२

2
यदि आप हेडर से नेग्नेक्स को हटाने के बारे में परवाह करते हैं, तो आप इसे रीडायरेक्ट और त्रुटि पृष्ठों से निकालना भी पसंद कर सकते हैं।
फाबियानगली

जवाबों:


57

अपाचे की तरह, यह स्रोत और recompile के लिए एक त्वरित संपादन है। से Calomel.org :

सर्वर: स्ट्रिंग हेडर है जो क्लाइंट को यह बताने के लिए वापस भेजा जाता है कि आप किस प्रकार का http सर्वर चला रहे हैं और संभवतः किस संस्करण में हैं। इस स्ट्रिंग का उपयोग एलेक्सिया और नेटक्राफ्ट जैसी जगहों पर आँकड़ों को इकट्ठा करने के लिए किया जाता है कि इंटरनेट पर कितने और किस तरह के वेब सर्वर हैं। 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 संपादित करें: फ्लेवियस के प्रॉप्स नीचे एक नया विकल्प उनका कहना है, Nginx के मानक की जगह के लिए HttpHeadersModule साथ काँटेदार HttpHeadersMoreModule । मानक मॉड्यूल को फिर से जमा करना अभी भी जल्दी ठीक है, और समझ में आता है कि क्या आप मानक मॉड्यूल का उपयोग करना चाहते हैं और सर्वर स्ट्रिंग को अक्सर नहीं बदलेंगे। लेकिन अगर आप इससे अधिक चाहते हैं, तो HttpHeadersMoreModule एक मजबूत परियोजना है और आपको अपने HTTP हेडर के साथ सभी प्रकार के रनटाइम ब्लैक मैजिक करने देता है।


18
'server_tokens off;' का उपयोग करना यह अब तक का सबसे आसान तरीका है ... इसे "http" या "सर्वर" ब्लॉक में रखना सुनिश्चित करें
farinspace

35
यह संस्करण संख्या को छुपाता है, लेकिन सवाल था "मुझे पता है कि मैं संस्करण संख्या को छिपा सकता हूं, मैं पूरे 'सर्वर' स्ट्रिंग को कैसे बदलूं या हटाऊं?" ऐसा करने का कोई तरीका नहीं है कि आउट-ऑफ-द-बॉक्स नेग्नेक्स का उपयोग किया जाए।
जौल्हारडी

सर्वर हेडर को पूरी तरह से हटाने के लिए एक और त्वरित फिक्स (संस्करण 1.7.8 के लिए) है: लाइन्स 49 और 50 पर टिप्पणी करें (लाइन्स 48, 49 से ऊपर), 280-283 और 458-469। भविष्य के संदर्भ के लिए: अंतिम दो यदि सेट हैं तो दोनों ब्लॉक हैं r->headers_out.server
पल्लूसी 4६

3
यह उत्तर अब थोड़ा लेकिन पुराना है। @Jamescampbell का जवाब अब अधिक तीखा है।
jmcollin92

यदि आप अपने सर्वर को मास्क करने के लिए इस पद्धति का उपयोग करने की योजना बनाते हैं, तो आप सर्वर के त्रुटि संदेशों को बदलने के लिए src / http / ngx_http_special_response.c फ़ाइल को संपादित करना भी चाह सकते हैं।
ब्रोगन

143

यदि आप एक बैक-एंड एप्लिकेशन को प्रॉक्सी करने के लिए nginx का उपयोग कर रहे हैं और चाहते हैं कि Server:nginx को ओवरराइट किए बिना अपने हेडर का विज्ञापन करें , तो आप अपने server {…}श्लोक के अंदर जा सकते हैं और सेट कर सकते हैं :

proxy_pass_header Server;

यह नेगनेक्स को उस हेडर को अकेले छोड़ने के लिए मनाएगा और बैक-एंड द्वारा निर्धारित मूल्य को फिर से नहीं लिखेगा।


11
यदि आप सुरक्षा कारणों से यह परिवर्तन कर रहे हैं, तो मुझे यकीन नहीं है कि यह पर्याप्त है। यदि आपके सर्वर को एक त्रुटि संदेश वापस करने की आवश्यकता है, तो हेडर अभी भी 'nginx' होगा
KC बाल्ट्ज

10
हालाँकि यह समस्या को आसानी से हल करता है, हालाँकि इसमें एक बात और ध्यान रखने वाली है: रिवर्स प्रॉक्सी का उपयोग करते समय स्टैटिक फाइलें nginx के माध्यम से दी जा रही हैं, इसलिए जब आप फ़ायरबग नेट पैनल में उदाहरण के लिए छवि को खोलते हैं, तब भी आप सर्वर को nginx के रूप में देख सकते हैं
dav

IMO, यह सबसे अच्छा जवाब है। इस समाधान के लिए किसी विशेष सॉफ़्टवेयर एक्सटेंशन की आवश्यकता नहीं होती है, और यह बेस नगनेक्स के साथ काम करता है।
क्रिश

81

अंतिम अपडेट कुछ समय पहले हुआ था, इसलिए यहाँ उबंटू पर मेरे लिए काम किया गया है:

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


2
क्या YUM पर भी कुछ ऐसा ही है? yum स्थापित नगनेक्स-एक्सट्रा काम नहीं करते थे।
PKHunter

3
@PKHunter मैंने इसे YUM के शैतान की जीभ में आज़माया नहीं है लेकिन मैं देखूंगा कि मुझे क्या मिल सकता है।
jamescampbell

2
यह निश्चित रूप से सबसे अच्छा जवाब है। इसे स्वीकार किया जाना चाहिए। यह केवल एक है जो सभी मामलों का जवाब देता है।
jmcollin92

6
सर्वर के लिए एक खाली स्ट्रिंग सेट करना: सर्वर हेडर को दबाएगा:more_set_headers 'Server: ';
कोडी क्रेवेन

1
धन्यवाद, यह किसी भी तरह के किसी भी तरह के बिना किसी आकर्षण के काम करता है। शाबाश;)
मिशेल

37

सरल, /etc/nginx/nginx.conf संपादित करें और टिप्पणी को हटा दें

#server_tokens off;

HTTP अनुभाग खोजें ।


3
यह अच्छा काम करता है, एक बार जब आप यह सब करते हैं तो आप हेडर की जानकारी के सर्वर के बारे में देख सकते हैं: nginx (कोई संस्करण संख्या नहीं) धन्यवाद! : D
जैकट्रेड

13
प्रश्न के लेखक को पहले से ही इस विकल्प के बारे में पता है, जो संस्करण संख्या को हटा देता है, लेकिन आपको "सर्वर" हेडर में दिए गए मान को अनुकूलित करने की अनुमति नहीं देता है।
मकोतोसन

12
यह सब कुछ नहीं छिपाता है, लेकिन केवल सर्वर संस्करण।
डिजिटल साइट

3
सर्वर = nginx के लिए प्रतिक्रिया शीर्षलेख को नहीं निकालता है
sasha

मुझे लगता है कि नगीनक्स के संस्करण को पारित करना एक सुरक्षा चिंता है। तो कई लोगों के लिए, यह एक "अच्छा पर्याप्त" समाधान है। इसके अलावा यह ध्यान देने योग्य है कि यह प्रत्येक सर्वर ब्लॉक में जाना होगा, अगर आपके पास पोर्ट 80 और 443 के लिए सर्वर ब्लॉक है।
जेरेमी

35

यह बहुत सरल है: इन पंक्तियों को सर्वर सेक्शन में जोड़ें:

server_tokens off;
more_set_headers 'Server: My Very Own Server';

10
आप 3th पार्टी मॉड्यूल के साथ nginx संकलित करने के लिए है wiki.nginx.org/HttpHeadersMoreModule के लिए कि
hostmaster

10
उबंटू पर आप nginx-extraउस मॉड्यूल को प्राप्त करने के लिए इंस्टॉल कर सकते हैं ।
स्टेन बॉडी

11
अगर हम विश्वास करना चाहते हैं कि ऑटो-एक्सपेंशन हो जाए, तो यह अंत में "s" के साथ nginx-extras है
Tjunkie

1
ध्यान दें, आपको मौजूदा सर्वर को ओवरराइड करने के लिए "सर्वर:" उपसर्ग की आवश्यकता है: मान।
इलाबर्डफोर्ड

25

एक विशेष मॉड्यूल है: http://wiki.nginx.org/NginxHttpHeadersMoreModule

यह मॉड्यूल आपको आपके द्वारा निर्दिष्ट किसी भी आउटपुट या इनपुट हेडर को जोड़ने, सेट करने या साफ़ करने की अनुमति देता है।

इस मानक का एक उन्नत संस्करण है हेडर मॉड्यूल क्योंकि यह की तरह रीसेट करके या समाशोधन "हेडर निर्मित" की तरह अधिक उपयोगिताओं प्रदान करता है Content-Type, Content-Lengthऔर Server

यह आपको -sविकल्प का उपयोग करके एक वैकल्पिक HTTP स्थिति कोड मानदंड और विकल्प का उपयोग करके एक वैकल्पिक सामग्री प्रकार मानदंड निर्दिष्ट करने की अनुमति देता है , -tजबकि आउटपुट हेडर को अधिक_सेट_हेडर्स और more_clear_headers निर्देशों के साथ संशोधित करता है ...


3
संकलित nginx साथ--add-module=/path-to-headers-more-nginx-module
mate64

ऐसा लगता है कि OpenResty में स्थानांतरित कर दिया गया था: github.com/openresty/headers-more-nginx-module#readme
बेन

क्या सेंटोस 7 के लिए स्रोत से पुनर्जन्म नगण्य होने के बिना इस मॉड्यूल को प्राप्त करने का कोई तरीका है?
प्राची

19

Nginx अतिरिक्त स्थापित करें

sudo apt-get update
sudo apt-get install nginx-extras

सर्वर विवरण nginx.conf (http अनुभाग के तहत) में दो पंक्तियों को जोड़कर प्रतिक्रिया से हटाया जा सकता है

more_clear_headers Server;
server_tokens off;

एक, यह @jamescampbell ऊपर उल्लिखित है। दूसरा, इसके लिए Nginx को स्रोत से संकलित करने की आवश्यकता है ( yum install nginx-extrasकाम नहीं करता है - मुझे लगता है कि यह काम डेबिया / उबंटू आदि पर काम करता है apt-get)।)
खोम नाजिद

यह nginx स्रोत से संकलित किए बिना काम करता है। आपको केवल मॉड्यूल लोड करने की आवश्यकता है: ngx_http_headers_more_filter_module nginx.conf से
creekorful

"apt-get install nginx-extras" चलाने के बाद, इसने मेरे nginx के संस्करण को 1.16 से 1.14 तक
घटा दिया

15

यदि आप ठीक से हेडर को दूसरे स्ट्रिंग पाँच अक्षरों या उससे कम में बदल रहे हैं, तो आप बस बाइनरी पैच कर सकते हैं।

sed -i 's/nginx\r/thing\r/' `which nginx`

जो, समाधान के रूप में, कुछ उल्लेखनीय फायदे हैं। अर्थात्, आप अपने nginx संस्करण को पैकेज प्रबंधक द्वारा नियंत्रित करने की अनुमति दे सकते हैं (इसलिए, स्रोत से कोई संकलन नहीं) भले ही nginx-extras आपके distro के लिए उपलब्ध नहीं है, और आपको अतिरिक्त में से किसी के बारे में चिंता करने की आवश्यकता नहीं है नग्नेक्स-एक्सट्रा जैसी किसी चीज़ का कोड असुरक्षित है।

बेशक, आप विकल्प को सेट करना चाहते server_tokens offहैं, संस्करण संख्या को छिपाने के लिए, या उस प्रारूप स्ट्रिंग को भी पैच कर सकते हैं।

मैं कहता हूं "पांच अक्षर या उससे कम" क्योंकि निश्चित रूप से आप हमेशा बदल सकते हैं:

nginx \ r \ 0

साथ में

बॉब \ r \ 0 \ r \ 0

पिछले दो बाइट्स को अपरिवर्तित छोड़ दें।

यदि आप वास्तव में पाँच से अधिक वर्ण चाहते हैं, तो आप server_tokens को छोड़ना चाहते हैं, और (थोड़ी लंबी) प्रारूप स्ट्रिंग को बदल सकते हैं, हालांकि फिर से प्रारूप स्ट्रिंग की लंबाई द्वारा लगाए गए उस लंबाई की एक ऊपरी सीमा है - 1 (के लिए) कैरिज रिटर्न)।

... यदि उपरोक्त में से कोई भी आपके लिए समझ में नहीं आता है, या आपने पहले कभी बाइनरी पैच नहीं किया है, तो आप इस दृष्टिकोण से दूर रहना चाह सकते हैं, हालांकि।


1
@PKHunter hm? इसका लाभ यह है कि यह खरोंच से संकलित किए बिना काम करता है । कोई स्रोत कोड शामिल नहीं है। यह सीधे संकलित बाइनरी को पैच कर रहा है।
पार्थियन ने

1
यह फाइल फॉर्मेट के बारे में बिल्कुल भी जानकारी नहीं है- यह सिर्फ बाइट्स के एक अलग अनुक्रम के साथ बाइट्स के अनुक्रम की जगह ले रहा है- इसलिए यह वास्तव में यह सत्यापित करने के लिए हमेशा सार्थक है कि आप जिस बाइट्स की जगह ले रहे हैं उसका अनुक्रम सिर्फ वह स्ट्रिंग है जिसे आप बदलना चाहते हैं और नहीं , कहते हैं, एक सबरूटीन में निष्पादन योग्य कोड (जो कि बहुत कम संभावना है, लेकिन अभी भी)।
पार्थियन शॉट

1
तो आप बस उस sedकमांड को ऊपर चलाएंगे , यह `which nginx`हिस्सा बाइनरी के लिए रास्ता देता है, और sedकमांड बाइट रिप्लेसमेंट करता है।
पार्थियन शॉट

1
उत्तर में बाद में उल्लिखित नल बाइट्स इस तथ्य को संदर्भित करता है कि आप स्ट्रिंग की पूरी लंबाई की तुलना में छोटे हेडर का उपयोग कर सकते हैं जब तक आप एक नल बाइट के साथ प्रतिस्थापन को समाप्त करते हैं। en.wikipedia.org/wiki/Null-terminated_string
पार्थियन शॉट

1
आह। हाँ, यह निष्पादन योग्य है। और आपको फ़ाइल को लिखने की अनुमति के साथ एक उपयोगकर्ता होने की भी आवश्यकता होगी। और अगर आप nginxपरिवर्तनों को प्रभावी करने के लिए पुनः आरंभ करने की आवश्यकता है तो मुझे आश्चर्य नहीं होगा । वो सब कहा? मेरा आपसे आग्रह है कि आप अन्य उत्तरों में से एक का उपयोग न करें। अगर मैं कह रहा हूं कि सभी चीजें पहले से ही आपके लिए परिचित नहीं हैं, और आप नहीं जानते कि /etcनिर्देशिका क्या है, तो इस तरह का एक हैक खतरनाक है।
पार्थियन शॉट

2

फ़ाइल src / http / ngx_http_header_filter_module.c को संशोधित करने का एकमात्र तरीका है। मैंने ४। पर एक अलग स्ट्रिंग में नंगेक्स को बदल दिया।

आप nginx config फ़ाइल में क्या कर सकते हैं बंद करने के लिए server_tokens सेट करने के लिए है। यह नेगनेक्स को संस्करण संख्या को प्रिंट करने से रोकेगा।

चीजों की जाँच करने के लिए, कोशिश कर्ल मैं http://vurbu.com/ | grep सर्वर

इसे वापस लौटना चाहिए

Server: Hai

3
खैर, यह एकमात्र तरीका नहीं है। अन्य प्रतिक्रियाओं में अन्य विकल्प दिखाए गए हैं।
राडको दिनेव

1

पार्थियन शॉट के उत्तर को पढ़ने के बाद, मैं /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
खोम नाज़िद

1

Nginx प्रलेखन के अनुसार यह कस्टम मान या बहिष्करण का समर्थन करता है:

Syntax: server_tokens on | off | build | string;

लेकिन दुख की बात केवल एक व्यावसायिक सदस्यता के साथ :

इसके अतिरिक्त, हमारी वाणिज्यिक सदस्यता के हिस्से के रूप में, संस्करण 1.9.13 से शुरू होने पर त्रुटि पृष्ठों पर हस्ताक्षर और "सर्वर" प्रतिक्रिया हेडर फ़ील्ड मान स्पष्ट रूप से चर के साथ स्ट्रिंग का उपयोग करके सेट किया जा सकता है। एक खाली स्ट्रिंग "सर्वर" फ़ील्ड के उत्सर्जन को निष्क्रिय करता है।


0

मुझे पता है कि पोस्ट थोड़े पुरानी है, लेकिन मुझे एक समाधान आसान लगा है, जो स्रोत से नग्नेक्स को संकलित किए बिना डेबियन आधारित वितरण पर काम करता है।

पहले nginx-extras पैकेज स्थापित करें

sudo apt स्थापित नग्नेक्स-एक्सट्रा

फिर nginx.conf को संपादित करके और सर्वर ब्लॉक के अंदर निम्न पंक्ति जोड़कर nginx http हेडर को अधिक मॉड्यूल लोड करें

load_module मॉड्यूल / ngx_http_headers_more_filter_module.so;

एक बार यह हो जाने के बाद आपके पास और अधिक_सेट_हेडर्स और अधिक_क्लेअर_हेडर्स निर्देशों तक पहुँच होगी।


0

अब नगनेक्स-अतिरिक्त पैकेज को हटा दिया गया है।

इसलिए निम्न ने अब मेरे लिए काम किया क्योंकि मैंने विभिन्न पैकेज अधिक_सेट_हेडर्स 'सर्वर: माई वेरी ओन सर्वर' स्थापित करने की कोशिश की;

आप बस निम्नलिखित कर सकते हैं और कोई सर्वर या संस्करण जानकारी वापस नहीं भेजी जाएगी

    server_tokens '';

यदि आप अभी संस्करण संख्या को निकालना चाहते हैं तो यह काम करता है

   server_tokens off;

-4

क्या आप प्रतिक्रिया में सर्वर हेडर मूल्य के बारे में पूछ रहे हैं? आप एक add_header निर्देश के साथ इसे बदलने की कोशिश कर सकते हैं, लेकिन मुझे यकीन नहीं है कि यह काम करेगा। http://wiki.codemongers.com/NginxHttpHeadersModule


1
हाँ, सर्वर हैडर। लेकिन वहाँ उदाहरण के लिए जहां मैं सिर्फ server.tag = "जो कुछ" है के लिए lighttpd पर एक क्लीनर तरीका है? add_header केवल प्रतिक्रिया कोड 200, 204, 301, 302 या 304 के लिए काम करता है, इसलिए यदि सर्वर किसी तरह 500 करेगा तो यह काम नहीं करेगा
डेनियल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.