web-dev-qa-db-ja.com

nginxによって返されるサーバーヘッダーを変更するにはどうすればよいですか?

バージョンを非表示にしてnginxのみを表示するオプションがありますが、それを非表示にして、何も表示したりヘッダーを変更したりする方法はありますか?

129
daniels

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月edit:Nginxの標準 HttpHeadersModule をforkに置き換えて、新しいオプションを指摘するためのFlaviusへの小道具 HttpHeadersMoreModule 。標準モジュールを再コンパイルすることはまだ簡単な解決策であり、標準モジュールを使用する必要があり、サーバー文字列を頻繁に変更しない場合に意味があります。しかし、それ以上が必要な場合、HttpHeadersMoreModuleは強力なプロジェクトであり、HTTPヘッダーを使用してあらゆる種類のランタイムブラックマジックを実行できます。

57
joelhardi

Nginxを使用してバックエンドアプリケーションをプロキシし、バックエンドでnginxを上書きせずに独自のServer:ヘッダーをアドバタイズする場合、server {…}スタンザの内部に移動して設定できます。

proxy_pass_header Server;

これにより、nginxはそのヘッダーをそのままにして、バックエンドによって設定された値を書き換えないようになります。

134
Brandon Rhodes

最後の更新は少し前だったので、Ubuntuで私がうまくいったのは次のとおりです。

Sudo apt-get update
Sudo apt-get install nginx-extras

次に、通常[/etc/nginx/nginx.confにあるnginx.confhttpセクションに次の2行を追加します。

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を再起動することを忘れないでください。

69
jamescampbell

シンプル、/ etc/nginx/nginx.confを編集し、コメントを削除します

#server_tokens off;

httpセクションを検索します。

36
Rui Marques

非常に簡単です:サーバーセクションに次の行を追加します。

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

特別なモジュールがあります: http://wiki.nginx.org/NginxHttpHeadersMoreModule

このモジュールを使用すると、指定した出力または入力ヘッダーを追加、設定、またはクリアできます。

これは、標準 headers モジュールの拡張バージョンです。これは、Content-TypeContent-LengthServerなどの「組み込みヘッダー」のリセットやクリアなどのユーティリティを提供するためです。

また、 more_set_headers および で出力ヘッダーを変更しながら、-sオプションを使用してオプションのHTTPステータスコード条件を指定し、-tオプションを使用してオプションのコンテンツタイプ条件を指定できます。 more_clear_headers ディレクティブ...

25
Flavius

Nginx Extrasをインストールする

Sudo apt-get update
Sudo apt-get install nginx-extras

サーバーの詳細は、nginx.confに次の2行を追加することで応答から削除できます(httpセクションの下)

more_clear_headers Server;
server_tokens off;
17
Aamish Baloch

ヘッダーを5文字以下の別の文字列に変更するだけで問題ない場合は、単純にバイナリにパッチを適用できます。

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

ソリューションとして、いくつかの顕著な利点があります。つまり、nginx-extrasがディストリビューションで利用できなくても、パッケージマネージャーがnginxのバージョン管理を処理できるようにすることができるため(ソースからのコンパイルはできません)、追加の心配はありませんnginx-extrasのようなコードは脆弱です。

もちろん、オプションserver_tokens offを設定して、バージョン番号を非表示にしたり、そのフォーマット文字列にパッチを適用したりすることもできます。

「5文字以下」と言うのは、もちろん、いつでも置き換えることができるからです。

nginx\r\0

bob\r\0\r\0

最後の2バイトを変更せずに残します。

実際に5文字以上が必要な場合は、server_tokensをオンのままにして、(少し長い)フォーマット文字列を置き換えますが、フォーマット文字列の長さによって課されるその長さに上限があります-1キャリッジリターン)。

...上記のいずれにも意味がない場合、または以前にバイナリにパッチを適用したことがない場合は、このアプローチを避けてください。

15
Parthian Shot

唯一の方法は、ファイルsrc/http/ngx_http_header_filter_module.cを変更することです。 48行目のnginxを別の文字列に変更しました。

Nginx構成ファイルでできることは、server_tokensをオフに設定することです。これにより、nginxがバージョン番号を出力できなくなります。

確認するには、curl -I http://vurbu.com/ | grepサーバー

戻るはずです

Server: Hai
2
Jauder Ho

Parthian Shotの答えを読んだ後、/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`
0
Afrig Aminuddin

Nginx documentation によれば、カスタム値または除外さえもサポートしています:

Syntax: server_tokens on | off | build | string;

悲しいことに、商用サブスクリプションのみ:

さらに、バージョン1.9.13以降の商用サブスクリプションの一部として、エラーページの署名と「サーバー」応答ヘッダーフィールド値を、変数付きの文字列を使用して明示的に設定できます。空の文字列は、「サーバー」フィールドの出力を無効にします。

0
adrhc

私はこの投稿がちょっと古いことを知っていますが、ソースから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ディレクティブの両方にアクセスできるようになります。

0
americium1997