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

StackOverflow https://stackoverflow.com/questions/246227

  •  05-07-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

Apache と同様に、これはソースを簡単に編集して再コンパイルするだけです。から カロメル.org:

サーバー:文字列は、実行中のHTTPサーバーの種類と場合によってはどのバージョンを伝えるかをクライアントに返送するヘッダーです。この文字列は、AlexiaやNetcraftなどの場所で使用され、インターネット上で何のWebサーバーがライブであるかについて統計を収集します。nginxの著者と統計をサポートするには、この文字列をそのまま保持することをお勧めします。しかし、セキュリティのために、人々があなたが実行しているものを知りたくないかもしれませんし、ソースコードでこれを変更することができます。ソースファイルを編集します src/http/ngx_http_header_filter_module.c48行目と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 の標準に代わる新しいオプションを指摘した以下の Flavius に感謝します。 HttpHeadersモジュール フォークで HttpHeadersMoreモジュール. 。標準モジュールを再コンパイルすることは依然として簡単な解決策であり、標準モジュールを使用する必要があり、サーバー文字列を頻繁に変更しない場合には合理的です。しかし、それ以上のことが必要な場合は、HttpHeadersMoreModule が強力なプロジェクトであり、HTTP ヘッダーを使用してあらゆる種類のランタイム黒魔術を行うことができます。

他のヒント

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

proxy_pass_header Server;

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

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

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

次に、通常/etc/nginx/nginx.confにある nginx.conf http セクションに次の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を再起動することを忘れないでください。

簡単、/ etc / nginx / nginx.confを編集してコメントを削除

#server_tokens off;

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

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

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

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

  

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

     

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

     

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

Nginx Extrasのインストール

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

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

more_clear_headers Server;
server_tokens off;

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

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

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

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

「5文字以下」と言います。もちろん、いつでも交換できます:

  

nginx \ r \ 0

with

  

bob \ r \ 0 \ r \ 0

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

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

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

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

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

確認するには、 curl -I http://vurbu.com/ を試してください。 grepサーバー

戻る必要があります

Server: Hai

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`

nginx ドキュメントによれば、カスタム値または除外:

Syntax: server_tokens on | off | build | string;

しかし残念なことに、商用サブスクリプションの場合のみ:

  

さらに、商用サブスクリプションの一部として、   バージョン1.9.13エラーページの署名と&#8220;サーバー&#8221;応答   ヘッダーフィールドの値は、次の文字列を使用して明示的に設定できます。   変数。空の文字列は、&#8220; Server&#8221;の発行を無効にします。   フィールド。

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

応答のサーバーヘッダー値について尋ねていますか? add_headerディレクティブでこれを変更することもできますが、うまくいくかどうかはわかりません。 http://wiki.codemongers.com/NginxHttpHeadersModule

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top