Nginx tarafından döndürülen sunucu üstbilgisini nasıl değiştirirsiniz?


141

Sürümü gizlemek için bir seçenek var, bu yüzden sadece nginx görüntüleyecek, ancak bunu gizlemenin bir yolu var, böylece hiçbir şey göstermeyecek veya başlığı değiştirmeyecek mi?


34
btw, nginx sürümünü gizlemek için 'server_tokens off' ayarını yapmanız gerekir.
yanchenko

2
Nginx'i başlıktan kaldırmayı önemsiyorsanız, yönlendirmelerden ve hata sayfalarından da kaldırmak isteyebilirsiniz.
fabianegli

Yanıtlar:


57

Apache gibi, bu kaynak için hızlı bir düzenleme ve yeniden derleme. Gönderen Calomel.org :

Server: string, hangi tür http sunucusunu çalıştırdığınızı ve muhtemelen hangi sürümü kullandığınızı söylemek için istemciye geri gönderilen başlıktır. Bu dize, Alexia ve Netcraft gibi yerler tarafından internette kaç ve ne tür web sunucusunun canlı olduğu hakkında istatistik toplamak için kullanılır. Nginx'in yazarını ve istatistiklerini desteklemek için bu dizeyi olduğu gibi tutmanızı öneririz. Ancak, güvenlik için insanların ne çalıştırdığınızı bilmesini istemeyebilirsiniz ve bunu kaynak kodunda değiştirebilirsiniz. src/http/ngx_http_header_filter_module.c 48 ve 49. satırlara bakarak kaynak dosyayı düzenleyin . Dizeyi istediğiniz herhangi bir şeyle değiştirebilirsiniz.

## 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;

Mart 2011 edit: Nginx'in standart HttpHeadersModule'unu çatallı HttpHeadersMoreModule ile değiştirerek yeni bir seçeneğe işaret ettiği için aşağıdaki Flavius ​​Props . Standart modülü yeniden derlemek hala hızlı bir çözümdür ve standart modülü kullanmak istiyorsanız ve sunucu dizesini sık sık değiştirmeyecekseniz mantıklıdır. Ancak bundan daha fazlasını istiyorsanız, HttpHeadersMoreModule güçlü bir projedir ve HTTP başlıklarınızla her türlü çalışma zamanı kara büyü yapmanıza izin verir.


18
'server_tokens off' kullanarak; bunu yapmanın en kolay yolu ... "http" veya "server" bloğuna koyduğunuzdan emin olun
farinspace

35
Bu, sürüm numarasını gizler, ancak soru "Sürüm numarasını gizleyebileceğimi biliyorum, 'Sunucu' dizesinin tamamını nasıl değiştirebilir veya silebilirim?" Kullanıma hazır nginx kullanarak bunu yapmanın bir yolu yoktur.
joelhardi

Sunucu üstbilgisini tamamen kaldırmak için başka bir hızlı düzeltme (sürüm 1.7.8 için): 49 ve 50 satırlarını (yukarıdaki 48, 49 satırlarına karşılık gelir), 280-283 ve 458-469'u yorumlayın. İleride başvurmak için: son ikisi, ayarlanan if bloklarıdır r->headers_out.server.
pauluss86

3
Bu cevap şimdi biraz ama eski. @Jamescampbell'in cevabı şimdi daha doğru.
jmcollin92

Sunucunuzu maskelemek için bu yöntemi kullanmayı planlıyorsanız, sunucunun hata iletilerini değiştirmek için src / http / ngx_http_special_response.c dosyasını da düzenlemek isteyebilirsiniz.
Brogan

143

Bir arka uç uygulamasını proxy yapmak için nginx kullanıyorsanız ve arka ucun, Server:nginx üzerine yazmadan kendi başlığının reklamını yapmasını istiyorsanız, stanza'nızın içine server {…}girip şunları ayarlayabilirsiniz:

proxy_pass_header Server;

Bu, nginx'i bu üstbilgiyi yalnız bırakmaya ikna edecek ve arka uç tarafından ayarlanan değeri yeniden yazmayacaktır.


11
Bu değişikliği güvenlik nedeniyle yapıyorsanız, bunun yeterli olduğundan emin değilim. Sunucunuzun bir hata mesajı döndürmesi gerekiyorsa, başlık yine de 'nginx' olacaktır
KC Baltz

10
ancak bu sorunu kolayca çözer, ancak dikkate alınması gereken bir şey vardır: ters proxy kullanırken statik dosyalar nginx aracılığıyla sunulur, bu nedenle örneğin firebug net panelinde görüntüyü açtığınızda sunucuyu nginx olarak görebilirsiniz
dav

IMO, bu en iyi cevap. Bu çözüm herhangi bir özel yazılım uzantısı gerektirmez ve temel nginx ile çalışır.
Kris

81

Son güncelleme bir süre önceydi, işte Ubuntu'da benim için çalışan şey:

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

Ardından , genellikle /etc/nginx/nginx.conf konumunda bulunan httpbölümüne aşağıdaki iki satırı ekleyin nginx.conf:

sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';

Ayrıca, nginx ile yeniden başlatmayı da unutmayın sudo service nginx restart.


2
YUM'da benzer bir şey var mı? yum install nginx-extras işe yaramadı.
PKHunter

3
@PKHunter Şeytan'ın YUM dilinde denemedim ama ne bulabileceğimi göreceğim.
jamescampbell

2
Bu kesinlikle en iyi cevap. Kabul edilmelidir. Bu, tüm vakalara cevap veren tek şey.
jmcollin92

6
Sunucuya boş bir dize ayarlamak sunucu başlığını bastıracaktır:more_set_headers 'Server: ';
Cody Craven

1
Teşekkür ederim bu herhangi bir tür derleme olmadan bir cazibe gibi çalışır. Aferin;)
MitchellK

37

Basit, /etc/nginx/nginx.conf dosyasını düzenleyin ve yorumu kaldırın

#server_tokens off;

Http bölümünü arayın .


3
Bu güzel çalışıyor, bunu yaptıktan sonra başlık bilgileri hakkında sunucu hakkında tüm görebilirsiniz: nginx (sürüm numarası yok) Teşekkürler! : D
jacktrade

13
Sorunun yazarı, sürüm numarasını kaldıran ancak "sunucu" başlığında döndürülen değeri özelleştirmenize izin vermeyen bu seçeneğin zaten farkında.
Makotosan

12
Bu her şeyi değil, sadece sunucu sürümünü gizler.
Dijital site

3
Sunucu = nginx
sasha

Ben nginx sürümünü geçmek bir güvenlik endişesi olduğunu düşünüyorum. Pek çok insan için bu "yeterince iyi" bir çözümdür. Ayrıca, 80 ve 443 numaralı bağlantı noktaları için bir sunucu bloğunuz olması durumunda, her sunucu bloğuna girmek zorunda kalacağını belirtmek gerekir.
Jeremy

35

Çok basit: Bu satırları sunucu bölümüne ekleyin:

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

10
Sen 3th parti modülü ile nginx derlemek zorunda wiki.nginx.org/HttpHeadersMoreModule bunun için
hostmaster

10
Ubuntu'ya nginx-extrabu modülü almak için yükleyebilirsiniz .
Stan Bondi

11
apt-get otomatik genişlemesine inanacaksak, sonunda bir "s" ile nginx-ekstralar
Tjunkie

1
Not: Varolan Server: değerini geçersiz kılmak için "Server:" önekine ihtiyacınız vardır.
elBradford

25

Özel bir modül var: http://wiki.nginx.org/NginxHttpHeadersMoreModule

Bu modül, belirttiğiniz herhangi bir çıktı veya giriş başlığını eklemenize, ayarlamanıza veya silmenize olanak tanır.

Bu standard geliştirilmiş bir versiyonudur başlıklarıyla neye "başlıklarına yerleşik" sıfırlama veya takas gibi daha yardımcı programları sağlar çünkü modülü Content-Type, Content-Lengthve Server.

Ayrıca , çıkış başlıklarını more_set_headers ve more_clear_headers yönergelerinde değiştirirken, seçeneği -skullanarak isteğe bağlı bir HTTP durum kodu ölçütleri ve seçeneği kullanarak isteğe bağlı bir içerik türü ölçütleri belirtmenize olanak tanır ...-t


3
Nginx ile derleyin--add-module=/path-to-headers-more-nginx-module
mate64

Görünüşe göre bu OpenResty'ye taşındı: github.com/openresty/headers-more-nginx-module#readme
Ben Creasy

Centos 7 için nginx'i kaynaktan derlemeye gerek kalmadan bu modülü almanın bir yolu var mı?
Prachi

19

Nginx Extras'ı yükleyin

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

Nginx.conf dosyasına aşağıdaki iki satır eklenerek sunucu ayrıntıları yanıttan kaldırılabilir (http bölümünün altında)

more_clear_headers Server;
server_tokens off;

Birincisi, yukarıda @jamescampbell'in bahsettiği şey budur. İkincisi, bu yum install nginx-extrasNginx'in kaynaktan derlenmesini gerektirir ( işe yaramaz - bu çalışmanın Debia / Ubuntu vb. İle çalıştığını düşünüyorum apt-get.)
Khom Nazid

Kaynaktan derlenmiş nginx olmadan çalışır. Modülü yüklemeniz yeterlidir: nginx.conf'dan ngx_http_headers_more_filter_module
creekorful

"apt-get install nginx-extras"
komutunu

15

Üstbilgiyi beş veya daha az harfli başka bir dizeye değiştirmeniz yeterliyse, ikiliyi yamalayabilirsiniz.

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

Bir çözüm olarak birkaç önemli avantajı vardır. Yani, dağıtımınız için nginx-extras mevcut olmasa bile, nginx sürümlendirmenizin paket yöneticisi tarafından işlenmesine izin verebilirsiniz (bu nedenle, kaynaktan derleme yok) ve ek herhangi bir şey için endişelenmenize gerek yok nginx-extras'ın savunmasız olması gibi bir kod.

Tabii ki, server_tokens offsürüm numarasını gizlemek veya bu format dizesini yamalamak için seçeneği ayarlamak isteyeceksiniz .

"Beş harf veya daha az" diyorum çünkü elbette her zaman değiştirebilirsiniz:

nginx \ r \ 0

ile

bob \ r \ 0 \ r \ 0

son iki baytı değişmeden bırakır.

Aslında beşten fazla karakter istiyorsanız, server_token'leri açık bırakmak ve (biraz daha uzun) format dizesini değiştirmek isteyeceksiniz, ancak yine de bu uzunluk üzerinde - 1 ( satırbaşı).

... Yukarıdakilerin hiçbiri size mantıklı gelmiyorsa veya daha önce hiç bir ikili kod eklemediyseniz, bu yaklaşımdan uzak durmak isteyebilirsiniz.


1
@PKHunter hm? Bunun avantajı, sıfırdan derlemek zorunda kalmadan çalışmasıdır . Kaynak kodu yok. Derlenmiş ikiliyi doğrudan yama yapar .
Parthian Shot

1
Dosya formatının farkında değil - sadece bir bayt dizisini farklı bir bayt dizisiyle değiştiriyor - bu yüzden değiştirdiğiniz bayt dizisinin gerçekten değiştirmek istediğiniz dizge olduğunu doğrulamak her zaman faydalıdır. , diyelim ki, bir altyordamda çalıştırılabilir kod (ki bu pek olası değildir, ancak yine de).
Parthian Shot

1
Böylece sedyukarıdaki komutu çalıştırırsınız , `which nginx`bölüm ikilinin yolunu döndürür ve sedkomut bayt değişimini yapar.
Parthian Shot

1
Yanıtın ilerleyen bölümlerinde belirtilen null baytlar, değiştirmeyi boş bir baytla sonlandırdığınız sürece dizenin tüm uzunluğundan daha kısa üstbilgiler kullanabileceğinizi belirtir. en.wikipedia.org/wiki/Null-terminated_string
Parthian Shot

1
Ah. Evet, çalıştırılabilir. Ayrıca, dosyaya yazma iznine sahip bir kullanıcı olmanız gerekir. nginxDeğişikliklerin yürürlüğe girmesi için yeniden başlatmanız gerekirse şaşırmam . Bütün bunlar ne dedi? Diğer cevaplardan birini kullanmamanızı tavsiye ediyorum. Söylediğim her şey size zaten aşina değilse ve /etcdizinin ne için olduğunu bilmiyorsanız , böyle bir kesmek tehlikeli olabilir.
Part Atışı

2

Tek yol src / http / ngx_http_header_filter_module.c dosyasını değiştirmektir. 48. satırdaki nginx'i farklı bir dizeye değiştirdim.

Nginx config dosyasında yapabilecekleriniz server_tokens değerini kapalı olarak ayarlamaktır . Bu, nginx'in sürüm numarasını yazdırmasını önleyecektir.

Bir şeyleri kontrol etmek için kıvırmayı deneyin -I http://vurbu.com/ | grep Sunucusu

Geri dönmeli

Server: Hai

3
Tek yol bu değil. Diğer yanıtlarda başka alternatifler de gösterilmiştir.
Radko Dinev

1

Parthian Shot'un cevabını okuduktan sonra /usr/sbin/nginxikili dosyaya giriyorum . Sonra dosyanın bu üç satırı içerdiğini öğrendim.

Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx

Temelde ilk ikisi server_tokens on;yönerge içindir (Sunucu sürümü dahil). Sonra arama ölçütlerini ikili dosyadaki bu satırlarla eşleşecek şekilde değiştiriyorum.

sed -i 's/Server: nginx/Server: thing/' `which nginx`

Daha ileri kazdıktan sonra nginx tarafından üretilen hata mesajının da bu dosyaya dahil olduğunu öğrendim.

<hr><center>nginx</center>

Bunlardan üçü, biri versiyonsuz, ikisi versiyon içeriyordu. Bu yüzden hata iletisi içinde nginx dizesini değiştirmek için aşağıdaki komutu çalıştırın.

sed -i 's/center>nginx/center>thing/' `which nginx`

Bunun için teşekkürler. Ancak /usr/sbinklasör içinde yürütülen ilk komutunuz bunu verir:sed: can't read is: No such file or directory
Khom Nazid

1

Nginx belgelerine göre özel değerleri veya hatta hariç tutmayı destekler:

Syntax: server_tokens on | off | build | string;

ancak ne yazık ki sadece ticari bir abonelikle :

Ayrıca, ticari aboneliğimizin bir parçası olarak, 1.9.13 sürümünden başlayarak, hata sayfalarındaki imza ve “Sunucu” yanıt başlığı alan değeri, değişkenler içeren dize kullanılarak açıkça ayarlanabilir. Boş bir dize “Sunucu” alanının yayılmasını devre dışı bırakır.


0

Gönderinin biraz eski olduğunu biliyorum, ancak kaynaktan nginx derlemeden Debian tabanlı dağıtım üzerinde çalışan bir çözüm buldum.

İlk önce nginx-extras paketini kurun

sudo apt install nginx-extras

Sonra nginx.conf dosyasını düzenleyerek ve sunucu bloğuna aşağıdaki satırı ekleyerek nginx http headers more modülünü yükleyin

load_module modülleri / ngx_http_headers_more_filter_module.so;

Tamamlandığında, more_set_headers ve more_clear_headers yönergelerine erişebilirsiniz.


0

Nginx-extra paketi kullanımdan kaldırıldı.

Bundan dolayı çeşitli paketler more_set_headers 'Sunucu: Benim Çok Kendi Sunucum' yüklemeye çalışırken aşağıdaki benim için çalıştı.

Sadece aşağıdakileri yapabilirsiniz ve hiçbir sunucu veya sürüm bilgisi geri gönderilmeyecektir

    server_tokens '';

sadece sürüm numarasını kaldırmak istiyorsanız bu işe yarar

   server_tokens off;

-4

Yanıtta Sunucu üstbilgisi değerini mi soruyorsunuz? Bunu bir add_header yönergesi ile değiştirmeyi deneyebilirsiniz, ancak işe yarayıp yaramayacağından emin değilim. http://wiki.codemongers.com/NginxHttpHeadersModule


1
evet, sunucu başlığı. ama lighttpd gibi temiz bir yolu yok mesela burada sadece server.tag = "ne olursa olsun" var mı? add_header yalnızca 200, 204, 301, 302 veya 304 yanıt kodları için çalışır, bu nedenle sunucu bir şekilde 500 yapacaksa çalışmaz
daniels
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.