Có một tùy chọn để ẩn phiên bản để nó sẽ chỉ hiển thị nginx, nhưng có cách nào để ẩn quá để nó không hiển thị bất cứ điều gì hoặc thay đổi tiêu đề?
Có một tùy chọn để ẩn phiên bản để nó sẽ chỉ hiển thị nginx, nhưng có cách nào để ẩn quá để nó không hiển thị bất cứ điều gì hoặc thay đổi tiêu đề?
Câu trả lời:
Giống như Apache, đây là một chỉnh sửa nhanh chóng về nguồn và biên dịch lại. Từ Calomel.org :
Chuỗi máy chủ: là tiêu đề được gửi lại cho máy khách để cho họ biết loại máy chủ http nào bạn đang chạy và có thể là phiên bản nào. Chuỗi này được sử dụng bởi những nơi như Alexia và Netcraft để thu thập số liệu thống kê về số lượng và loại máy chủ web đang hoạt động trên Internet. Để hỗ trợ tác giả và số liệu thống kê cho Nginx, chúng tôi khuyên bạn nên giữ chuỗi này. Nhưng, để bảo mật, bạn có thể không muốn mọi người biết bạn đang chạy gì và bạn có thể thay đổi điều này trong mã nguồn. Chỉnh sửa tệp nguồn
src/http/ngx_http_header_filter_module.c
khi nhìn vào dòng 48 và 49. Bạn có thể thay đổi Chuỗi thành bất cứ điều gì bạn muốn.
## 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;
Chỉnh sửa tháng 3 năm 2011: Đạo cụ cho Flavius bên dưới để chỉ ra một tùy chọn mới, thay thế httpHeadersModule tiêu chuẩn của Nginx bằng httpHeadersMoreModule rẽ nhánh . Biên dịch lại mô-đun tiêu chuẩn vẫn là cách khắc phục nhanh và có ý nghĩa nếu bạn muốn sử dụng mô-đun chuẩn và sẽ không thay đổi chuỗi máy chủ thường xuyên. Nhưng nếu bạn muốn nhiều hơn thế, thì httpHeadersMoreModule là một dự án mạnh mẽ và cho phép bạn thực hiện tất cả các loại phép thuật đen thời gian chạy với các tiêu đề HTTP của bạn.
r->headers_out.server
.
Nếu bạn đang sử dụng nginx để ủy quyền một ứng dụng back-end và muốn back-end quảng cáo Server:
tiêu đề của riêng mình mà không cần ghi đè lên nó, thì bạn có thể vào bên trong khổ server {…}
thơ của mình và đặt:
proxy_pass_header Server;
Điều đó sẽ thuyết phục nginx để lại tiêu đề đó một mình và không viết lại giá trị được đặt bởi back-end.
Bản cập nhật cuối cùng cách đây một thời gian, vì vậy đây là những gì hoạt động với tôi trên Ubuntu:
sudo apt-get update
sudo apt-get install nginx-extras
Sau đó thêm hai dòng sau vào http
phần của nginx.conf
, thường nằm ở /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
Ngoài ra, đừng quên khởi động lại nginx với sudo service nginx restart
.
more_set_headers 'Server: ';
Đơn giản, chỉnh sửa /etc/nginx/nginx.conf và xóa nhận xét khỏi
#server_tokens off;
Tìm kiếm phần http .
Rất đơn giản: Thêm các dòng này vào phần máy chủ:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
để có được mô-đun đó.
Có một mô-đun đặc biệt: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Mô-đun này cho phép bạn thêm, đặt hoặc xóa bất kỳ tiêu đề đầu ra hoặc đầu vào nào mà bạn chỉ định.
Đây là một phiên bản nâng cao của tiêu chuẩn tiêu đề mô-đun vì nó cung cấp các tiện ích giống như đặt lại hoặc thanh toán bù trừ "BUILTIN tiêu đề" như
Content-Type
,Content-Length
, vàServer
.Nó cũng cho phép bạn chỉ định một tùy chọn tiêu chuẩn mã trạng thái HTTP bằng cách sử dụng
-s
tùy chọn và một tùy chọn tiêu chí kiểu nội dung bằng cách sử dụng-t
tùy chọn trong khi sửa đổi các tiêu đề đầu ra với more_set_headers và more_clear_headers chỉ thị ...
--add-module=/path-to-headers-more-nginx-module
Cài đặt Nginx Extras
sudo apt-get update
sudo apt-get install nginx-extras
Chi tiết máy chủ có thể được xóa khỏi phản hồi bằng cách thêm hai dòng sau vào nginx.conf (trong phần http)
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
không hoạt động - Tôi cho rằng điều này hoạt động trên Debia / Ubuntu, v.v. apt-get
)
Nếu bạn ổn với việc chỉ thay đổi tiêu đề thành một chuỗi khác năm chữ cái trở xuống, bạn có thể chỉ cần vá nhị phân.
sed -i 's/nginx\r/thing\r/' `which nginx`
Mà, như một giải pháp, có một vài lợi thế đáng chú ý. Cụ thể, bạn có thể cho phép phiên bản nginx của mình được xử lý bởi người quản lý gói (vì vậy, không biên dịch từ nguồn) ngay cả khi nginx-bổ sung không có sẵn cho bản phân phối của bạn và bạn không cần phải lo lắng về bất kỳ bổ sung nào mã của một cái gì đó như nginx-bổ sung dễ bị tổn thương.
Tất nhiên, bạn cũng sẽ muốn đặt tùy chọn server_tokens off
, để ẩn số phiên bản hoặc vá chuỗi định dạng đó.
Tôi nói "năm chữ cái hoặc ít hơn" bởi vì tất nhiên bạn luôn có thể thay thế:
nginx \ r \ 0
với
bob \ r \ 0 \ r \ 0
để lại hai byte cuối cùng không thay đổi.
Nếu bạn thực sự muốn có nhiều hơn năm ký tự, bạn sẽ muốn bật server_tokens và thay thế chuỗi định dạng (dài hơn một chút), mặc dù một lần nữa có giới hạn trên về độ dài được áp đặt bởi độ dài của chuỗi định dạng - 1 (đối với vận chuyển trở lại).
... Nếu không có điều nào ở trên có ý nghĩa với bạn, hoặc bạn chưa bao giờ vá nhị phân trước đó, bạn có thể muốn tránh xa phương pháp này.
sed
lệnh trên, `which nginx`
phần này trả về đường dẫn đến nhị phân và sed
lệnh thực hiện thay thế byte.
nginx
để những thay đổi có hiệu lực. Tất cả những gì đã nói? Tôi đề nghị bạn không sử dụng một trong những câu trả lời khác. Nếu tất cả những điều tôi nói không quen thuộc với bạn và bạn không biết /etc
thư mục đó dùng để làm gì, thì một vụ hack như thế này là nguy hiểm.
Cách duy nhất là sửa đổi tệp src / http / ngx_http_header_filter_module.c. Tôi đã thay đổi nginx trên dòng 48 thành một chuỗi khác.
Những gì bạn có thể làm trong tệp cấu hình nginx là đặt server_tokens tắt . Điều này sẽ ngăn nginx in số phiên bản.
Để kiểm tra mọi thứ, hãy thử curl -I http://vurbu.com/ | máy chủ grep
Nó sẽ trở lại
Server: Hai
Sau khi tôi đọc câu trả lời của Parthian Shot, tôi đào sâu vào /usr/sbin/nginx
tệp nhị phân. Sau đó tôi phát hiện ra rằng tập tin chứa ba dòng này.
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
Về cơ bản, hai trong số chúng có nghĩa là server_tokens on;
chỉ thị (Bao gồm phiên bản máy chủ). Sau đó, tôi thay đổi tiêu chí tìm kiếm để khớp với các dòng trong tệp nhị phân.
sed -i 's/Server: nginx/Server: thing/' `which nginx`
Sau khi tôi đào xa hơn, tôi phát hiện ra rằng thông báo lỗi do nginx tạo ra cũng được bao gồm trong tệp này.
<hr><center>nginx</center>
Có ba trong số họ, một không có phiên bản, hai trong số đó bao gồm phiên bản. Vì vậy, tôi chạy lệnh sau để thay thế chuỗi nginx trong thông báo lỗi.
sed -i 's/center>nginx/center>thing/' `which nginx`
/usr/sbin
thư mục mang lại điều này:sed: can't read is: No such file or directory
Theo tài liệu nginx, nó hỗ trợ các giá trị tùy chỉnh hoặc thậm chí loại trừ:
Syntax: server_tokens on | off | build | string;
nhưng thật đáng buồn chỉ với một thuê bao thương mại :
Ngoài ra, là một phần của đăng ký thương mại của chúng tôi, bắt đầu từ phiên bản 1.9.13, chữ ký trên các trang lỗi và giá trị trường tiêu đề phản hồi của Máy chủ trực tuyến có thể được đặt rõ ràng bằng cách sử dụng chuỗi có biến. Một chuỗi trống sẽ vô hiệu hóa phát xạ của trường Server Server.
Tôi biết bài đăng này hơi cũ, nhưng tôi đã tìm thấy một giải pháp dễ dàng hoạt động trên bản phân phối dựa trên Debian mà không cần biên dịch nginx từ nguồn.
Lần đầu tiên cài đặt gói nginx-ngoại vi
sudo apt cài đặt nginx-bổ sung
Sau đó tải mô-đun nginx http thêm mô-đun bằng cách chỉnh sửa nginx.conf và thêm dòng sau vào khối máy chủ
mô-đun load_module / ngx_http_headftimemore_filter_module.so;
Khi đã xong, bạn sẽ có quyền truy cập vào cả chỉ thị more_set_headers và more_clear_headers.
Gói Nginx-thêm hiện không được chấp nhận.
Do đó, sau đây đã làm việc cho tôi khi tôi đã thử cài đặt các gói khác nhau more_set_headers 'Server: My Very own Server';
Bạn chỉ có thể làm như sau và không có thông tin máy chủ hoặc phiên bản nào được gửi lại
server_tokens '';
nếu bạn chỉ muốn xóa số phiên bản thì nó hoạt động
server_tokens off;
Bạn đang hỏi về giá trị tiêu đề Máy chủ trong phản hồi? Bạn có thể thử thay đổi điều đó bằng một lệnh add_header, nhưng tôi không chắc liệu nó có hoạt động không. http://wiki.codemongers.com/NginxHttpHeadersModule