มีตัวเลือกในการซ่อนรุ่นดังนั้นมันจะแสดงเฉพาะ nginx แต่มีวิธีซ่อนเช่นกันดังนั้นมันจะไม่แสดงอะไรเลยหรือเปลี่ยนส่วนหัวหรือไม่
มีตัวเลือกในการซ่อนรุ่นดังนั้นมันจะแสดงเฉพาะ nginx แต่มีวิธีซ่อนเช่นกันดังนั้นมันจะไม่แสดงอะไรเลยหรือเปลี่ยนส่วนหัวหรือไม่
คำตอบ:
เช่นเดียวกับ Apache นี่เป็นการแก้ไขอย่างรวดเร็วไปยังแหล่งที่มา จากCalomel.org :
Server: string เป็นส่วนหัวซึ่งถูกส่งกลับไปยังไคลเอนต์เพื่อแจ้งให้พวกเขาทราบว่าคุณใช้เซิร์ฟเวอร์ 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 แก้ไข: Props เพื่อฟลาเวียด้านล่างเพื่อชี้ให้เห็นตัวเลือกใหม่แทน Nginx มาตรฐานHttpHeadersModuleกับง่ามHttpHeadersMoreModule การคอมไพล์โมดูลโมดูลใหม่ยังคงเป็นการแก้ไขด่วนและเหมาะสมถ้าคุณต้องการใช้โมดูลมาตรฐานและจะไม่เปลี่ยนสตริงเซิร์ฟเวอร์บ่อยครั้ง แต่ถ้าคุณต้องการมากกว่านั้น HttpHeadersMoreModule เป็นโครงการที่แข็งแกร่งและให้คุณทำเวทย์มนตร์ดำทุกประเภทด้วยส่วนหัว HTTP ของคุณ
r->headers_out.server
สองคนสุดท้ายมีทั้งถ้าบล็อกชุดที่
หากคุณใช้ nginx เพื่อให้พร็อกซีแอปพลิเคชันด้านหลังและต้องการให้ back-end โฆษณาServer:
ส่วนหัวของตัวเองโดยไม่ต้องเขียนทับ nginx จากนั้นคุณสามารถเข้าไปข้างใน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!';
sudo service nginx restart
ยังไม่ลืมที่จะเริ่มต้นใหม่กับ Nginx
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 Extras
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 / อูบุนตู ฯลฯ ด้วยapt-get
.)
หากคุณไม่เป็นไรเพียงแค่เปลี่ยนส่วนหัวเป็นสตริงอีกห้าตัวอักษรหรือน้อยกว่าคุณสามารถแก้ไขไบนารีได้
sed -i 's/nginx\r/thing\r/' `which nginx`
ซึ่งเป็นวิธีการแก้ปัญหามีข้อดีที่โดดเด่นไม่กี่ กล่าวคือคุณสามารถอนุญาตให้จัดการเวอร์ชัน nginx ของคุณโดยตัวจัดการแพคเกจ (ดังนั้นจึงไม่มีการรวบรวมจากแหล่งที่มา) แม้ว่า nginx-extras จะไม่พร้อมใช้งานสำหรับ distro ของคุณและคุณไม่ต้องกังวลเกี่ยวกับสิ่งเพิ่มเติมใด ๆ โค้ดของบางอย่างเช่น nginx-extras จะมีช่องโหว่
แน่นอนคุณจะต้องตั้งค่าตัวเลือกserver_tokens off
ซ่อนหมายเลขรุ่นหรือแก้ไขชุดรูปแบบสตริงนั้นด้วย
ฉันพูดว่า "ห้าตัวอักษรหรือน้อยกว่า" เพราะแน่นอนคุณสามารถแทนที่:
Nginx \ r \ 0
กับ
bob \ r \ 0 \ r \ 0
ปล่อยให้สองไบต์สุดท้ายไม่เปลี่ยนแปลง
หากคุณต้องการมากกว่าห้าตัวอักษรคุณจะต้องเปิด server_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;
directive (รวมเวอร์ชันเซิร์ฟเวอร์) จากนั้นฉันจะเปลี่ยนเกณฑ์การค้นหาเพื่อจับคู่บรรทัดเหล่านั้นภายในไฟล์ไบนารี
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-extras
จากนั้นโหลดส่วนหัว http http ของโมดูลเพิ่มเติมโดยการแก้ไข nginx.conf และเพิ่มบรรทัดต่อไปนี้ภายในบล็อกเซิร์ฟเวอร์
load_module modules / ngx_http_headers_more_filter_module.so;
เมื่อเสร็จแล้วคุณจะสามารถเข้าถึงทั้งคำสั่ง more_set_headers และ more_clear_headers
แพ็คเกจเสริม Nginx เลิกใช้แล้วในขณะนี้
ดังนั้นต่อไปนี้ทำงานให้ฉันได้ในขณะที่ฉันพยายามติดตั้งแพ็คเกจต่างๆ more_set_headers 'เซิร์ฟเวอร์: เซิร์ฟเวอร์ส่วนตัวของฉันมาก';
คุณสามารถทำสิ่งต่อไปนี้และจะไม่มีการส่งข้อมูลเซิร์ฟเวอร์หรือรุ่นกลับ
server_tokens '';
หากคุณเพียงแค่ต้องการลบหมายเลขรุ่นที่ใช้งานได้
server_tokens off;
คุณกำลังถามเกี่ยวกับค่าส่วนหัวของเซิร์ฟเวอร์ในการตอบสนองหรือไม่? คุณสามารถลองเปลี่ยนมันด้วยคำสั่ง add_header แต่ฉันไม่แน่ใจว่ามันจะทำงาน http://wiki.codemongers.com/NginxHttpHeadersModule