バージョンを非表示にしてnginxのみを表示するオプションがありますが、何も表示したりヘッダーを変更したりしないように非表示にする方法はありますか?
バージョンを非表示にしてnginxのみを表示するオプションがありますが、何も表示したりヘッダーを変更したりしないように非表示にする方法はありますか?
回答:
Apacheと同様に、これはソースをすばやく編集して再コンパイルします。Calomel.orgから:
Server:文字列は、クライアントに返送されるヘッダーであり、実行しているhttpサーバーのタイプと、場合によってはどのバージョンかを伝えます。この文字列は、AlexiaやNetcraftなどの場所で、インターネット上に存在するWebサーバーの数と種類に関する統計を収集するために使用されます。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年3月編集: Nginxの標準のHttpHeadersModuleをフォークされたHttpHeadersMoreModuleに置き換えて、新しいオプションを指摘するための以下のフラビウスへの小道具。標準モジュールを再コンパイルすることはまだ簡単な修正であり、標準モジュールを使用したいがサーバー文字列を頻繁に変更しない場合には理にかなっています。しかし、それ以上の機能が必要な場合、HttpHeadersMoreModuleは強力なプロジェクトであり、HTTPヘッダーを使用してあらゆる種類のランタイムブラックマジックを実行できます。
r->headers_out.server
ます。
nginxを使用してバックエンドアプリケーションのプロキシを作成し、バックエンドがServer:
nginxを上書きせずに独自のヘッダーをアドバタイズするようにしたい場合は、server {…}
スタンザの内部に移動して設定できます。
proxy_pass_header Server;
これにより、nginxはそのヘッダーをそのままにし、バックエンドによって設定された値を書き換えないようになります。
最後の更新は少し前のことなので、Ubuntuで私のために働いたものは次のとおりです。
sudo apt-get update
sudo apt-get install nginx-extras
次に、次の2行をの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
このモジュールを使用すると、指定した出力または入力ヘッダーを追加、設定、またはクリアできます。
これは、標準の拡張版であるヘッダー、それはのように「ヘッダBUILTIN」リセットまたはクリアのような多くのユーティリティを提供したため、モジュール
Content-Type
、Content-Length
およびServer
。さらに、
-s
オプションを使用してオプションのHTTPステータスコード基準を指定し、オプションを使用してオプションのコンテンツタイプ基準を指定する-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に次の2行を追加することで、サーバーの詳細を応答から削除できます(httpセクションの下)
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
動作しません-これはDebia / Ubuntuなどでapt-get
。で動作すると思います)
ヘッダーを5文字以下の別の文字列に変更するだけで問題がなければ、バイナリにパッチを適用するだけです。
sed -i 's/nginx\r/thing\r/' `which nginx`
これには、解決策として、いくつかの顕著な利点があります。つまり、あなたのディストリビューションでnginx-extrasが利用できない場合でも、パッケージマネージャがnginxのバージョン管理を処理できるようにする(ソースからコンパイルしない)ことができ、その他のことについて心配する必要はありません。 nginx-extrasのようなコードが脆弱です。
もちろん、オプションを設定server_tokens off
して、バージョン番号を非表示にするか、そのフォーマット文字列にもパッチを適用する必要があります。
もちろん「5文字以下」と言いますが、いつでも置き換えることができます。
nginx \ r \ 0
と
ボブ\ r \ 0 \ r \ 0
最後の2バイトは変更されません。
実際に5文字以上が必要な場合は、server_tokensをオンのままにして、(少し長い)フォーマット文字列を置き換えます。ただし、フォーマット文字列の長さによって課されるその長さには上限があります-1(キャリッジリターン)。
...上記のいずれも意味をなさない場合、または以前にバイナリにパッチを適用したことがない場合は、このアプローチを避けたい場合があります。
sed
、上記のコマンドを実行するだけで、`which nginx`
パーツはバイナリへのパスを返し、sed
コマンドはバイト置換を行います。
nginx
、変更を有効にするために再起動する必要があるとしても、私は驚かないでしょう。言ったことは?他の答えは使用しないでください。私が言っていることのすべてがまだおなじみでなく、/etc
ディレクトリの目的がわからない場合、このようなハッキングは一種の危険です。
唯一の方法は、ファイルsrc / http / ngx_http_header_filter_module.cを変更することです。48行目のnginxを別の文字列に変更しました。
nginx設定ファイルでできることは、server_tokensをオフに設定することです。これにより、nginxがバージョン番号を出力できなくなります。
確認するには、curl -I http://vurbu.com/を試してください。grepサーバー
戻るはず
Server: Hai
パルティアンショットの回答を読んだ後、/usr/sbin/nginx
バイナリファイルを掘り下げます。次に、ファイルにこれらの3行が含まれていることがわかりました。
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
基本的に、最初の2つはserver_tokens on;
ディレクティブ用です(サーバーバージョンが含まれています)。次に、バイナリファイル内のこれらの行に一致するように検索条件を変更します。
sed -i 's/Server: nginx/Server: thing/' `which nginx`
さらに掘り下げた後、nginxによって生成されたエラーメッセージもこのファイルに含まれていることがわかりました。
<hr><center>nginx</center>
3つあり、1つはバージョンなし、2つはバージョンが含まれています。そこで、次のコマンドを実行して、エラーメッセージ内のnginx文字列を置き換えます。
sed -i 's/center>nginx/center>thing/' `which nginx`
/usr/sbin
フォルダには、これを得られますsed: can't read is: No such file or directory
私は投稿が少し古いことを知っていますが、ソースからnginxをコンパイルせずにDebianベースのディストリビューションで機能する簡単な解決策を見つけました。
最初にnginx-extrasパッケージをインストールします
sudo apt install nginx-extras
次に、nginx.confを編集し、サーバーブロック内に次の行を追加して、nginx http headers moreモジュールをロードします
load_module modules / ngx_http_headers_more_filter_module.so;
完了すると、more_set_headersディレクティブとmore_clear_headersディレクティブの両方にアクセスできるようになります。
応答のServerヘッダー値について質問していますか?add_headerディレクティブで変更してみることができますが、うまくいくかどうかはわかりません。http://wiki.codemongers.com/NginxHttpHeadersModule