回答:
以下を追加することで、NginxとOSのバージョンの出力を停止できます。
server_tokens off;
またはコンテキスト。http
server
location
または、サーバーヘッダーを完全に削除する場合は、ヘッダーがNginxソースにハードコーディングされているため、Headers Moreモジュールを使用してNginxをコンパイルする必要があります。このモジュールでは、httpヘッダーを変更できます。
more_clear_headers Server;
ただし、システムを識別するのに役立つ可能性のある実装を介してサーバーが偶然に実行する多くの隠れた方法があります。例:不正なSSL要求への応答方法。これを防ぐ実用的な方法は見当たりません。
私が提案するかもしれないことのいくつか:
DebianまたはUbuntuでapt-getを使用してnginxをインストールした場合、「サーバー」ヘッダーを設定またはクリアするためにパッケージnginx-extrasをインストールする必要がある場合があります
これが完了したら、nginx.conf(通常は/etc/nginx/nginx.conf)に以下の行を追加できます。
「サーバー」ヘッダーを完全にクリアするには:
more_clear_headers Server;
カスタム文字列を「サーバー」として設定するには
more_set_headers 'Server: some-string-here';
more_clear_headers Server;
Debian Jessie 8.5 nginxバージョン:nginx / 1.6.2
sudo apt-get install nginx-extras
ヘッダーを設定します
unknown directive "more_set_headers"
。でモジュールを明示的に有効にして解決しました/etc/nginx/nginx.conf
。構成load_module modules/ngx_http_headers_more_filter_module.so;
ファイルの先頭に追加するだけ です。
@Martin F.はい。ソースからコンパイルし、ソースをコンパイルする前に必要なものを変更する必要があります。
解凍した最後の安定バージョンをダウンロードし、ファイルの場所がわかっていると思います。その場合は、次の手順を実行します。
nano src/http/ngx_http_header_filter_module.c
正しく思い出せば、48行目を探します。
static char ngx_http_server_string[] = "Server: nginx" CRLF;
nginxをMyWhateverServerNameIWantなどに置き換えます
static char ngx_http_server_string[] = "Server: MyWhateverServerNameIWant" CRLF;
それから
nano src/core/nginx.h
行を探します
#define NGINX_VER "nginx/" NGINX_VERSION
「nginx /」を「MyWhateverServerNameIWant /」に変更して、読み取ります
#define NGINX_VER "MyWhateverServerNameIWant" NGINX_VERSION
最後に、バージョン番号も変更する場合
行#define NGINX_VERSION "1.0.4"を探します
必要なバージョンに合わせて「1.0.4」を変更します。たとえば、次のようになります
#define NGINX_VERSION "5.5.5"
それが役に立てば幸い。それにもかかわらず。サーバーの保護は、実行中のものを表示しないことをはるかに超えています。PHPは本質的に安全ではなく、Linuxも安全ではありません。もちろん、まともなセキュリティを実現するために必要な対策がすべて講じられていれば、Linuxは非常に安全です。PHPに関する限り、Suoshinを使用してコードのセキュリティを強化することをお勧めします。
ubuntuでnginxのカスタムフレーバーを実行する方法を十分に検討した後、luaモジュールを使用できることに気付きました。
Ubuntu 14.04では、nginx-extras
パッケージをインストールする場合、次を使用してサーバーヘッダーを削除できます。
header_filter_by_lua 'ngx.header["server"] = nil';
これをhttpブロックにスローすると、すべてのリクエストにServer
ヘッダーがなくなります。
動作しないnginx -V
場合は、luaモジュールがnginxのコピーにコンパイルされていることを確認するために実行してください。そうでない場合は、入手に使用できる代替パッケージがある可能性があります。
nginx-extra
はmore_set_headers "Server: whatever";
動作しているので、+ 1:D
header_filter_by_luaの代わりに、中括弧()の間に直接Luaソースをインライン化する新しいディレクティブheader_filter_by_lua_blockを使用することをお勧めします{}
。これにより、特殊文字をエスケープする必要はありません。
header_filter_by_lua_block {
ngx.header["server"] = nil
}
https://github.com/openresty/lua-nginx-module#header_filter_by_lua_block
何よりもまず、追加のモジュールをHeaders More Nginxとして使用するのはなぜですか?サーバーヘッダーを非表示にするだけです。数行あれば、簡単なパッチで同じソリューションに到達できます。
追加のモジュールを使用すると、不安定になる(環境でどの程度テストされているか、他のモジュールなどでテストされる)、またはセキュリティが不安定になる(このモジュールはバグやセキュリティ関連の修正で定期的に更新されますか?)
第二に。このスレッドでは、Nginxコードを調整してサーバーヘッダーを変更する方法について、返信279389として説明しています。問題は、HTTP / 2を忘れたことです。つまり、何も変わりません。サーバーヘッダーは引き続き表示されます。
少ないほど多いほど良い。はい、私は長い間、良い解決策を探していました。しかし、最終的に見つかりました:
私はついにその迷惑なNginxサーバーヘッダーから引き換えられました。
nginxソースコードフォルダーでこのbash関数を実行します。src /ではなく、nginx- $ versionで。
hidengxver () {
read -r -p "Your own http_server_string for safety: " http_server_string
first_string="static char ngx_http_server_string\[\] = \"Server: nginx\" CRLF;"
second_string="static char ngx_http_server_string\[\] = \"$http_server_string\" CRLF;"
sed -ire "s/$first_string/$second_string/g" src/http/ngx_http_header_filter_module.c
read -r -p "Your own NGINX_VER const: " nginx_ver
third_string="\#define NGINX\_VER \"nginx\/\" NGINX\_VERSION"
forth_string="\#define NGINX\_VER \"$nginx_ver\" NGINX\_VERSION"
sed -ire "s/$third_string/$forth_string/g" src/core/nginx.h
real_nginx_version=$( grep '#define NGINX_VERSION' src/core/nginx.h | gawk -F'"' '{print $2}' )
read -r -p "Your own NGINX_VERSION const: " new_nginx_version
fifth_string="\#define NGINX\_VERSION \"$real_nginx_version\""
sixth_string="\#define NGINX\_VERSION \"$new_nginx_version\""
sed -ire "s/$fifth_string/$sixth_string/g" src/core/nginx.h
}
この要点を参照してください。きっとあなたを助けるでしょう。