Centos6.5環境 Nginx 1.16.1をバージョン1.24.0にアップグレード

1. 背景

ここに画像の説明を挿入

2023 年 4 月 11 日、Nginx の最新の安定バージョンがバージョン番号 1.24.0 で正式にリリースされました。このバージョンは、開発バージョン 1.23.x (1.23.0 ~ 1.23.4) のバグ修正といくつかの新機能の追加をベースにした安定バージョンです。セキュリティ部門によるスキャンの結果、サイトが要件を満たしていないことが判明し、修正してこのバージョンにアップグレードするよう通知が発行されました。

データアドレス: http://nginx.org/en/download.html、セキュリティページリリースノート

関係する脆弱性:

抜け穴 リスクレベル 更新版
nginx のセキュリティ脆弱性 (CVE-2021-23017) [高い] nginx 1.21.0以降、1.20.1以降
nginx バッファエラーの脆弱性 (CVE-2022-41741) [高い] nginx 1.23.2+、1.22.1+
nginx の境界外書き込みの脆弱性 (CVE-2022-41742) [高い] nginx 1.23.2+、1.22.1+
NGINX 環境問題の脆弱性 (CVE-2019-20372) [真ん中] nginx 1.24.0

サイト環境:centos6.5 nginx 1.16.1 pcre 7.8 openssl 1.1.1k

2. アップグレードプロセス

1. 現在のバージョンを確認してください

nginx version: nginx/1.16.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
built with OpenSSL 1.1.1k  25 Mar 2021
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-openssl=/home/software/openssl-1.1.1k --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'


ここに画像の説明を挿入
2. バックアップ: 設定ファイルとバイナリ

cp -pr /etc/nginx/nginx.conf ./nginx.conf_20230530
cp -pr /usr/sbin/nginx ./nginx_20230530

3. コンパイルとインストール

wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzf nginx-1.24.0.tar.gz
pcre-config --version  #现场为7.8
cd nginx-1.24.0
vim scr/core/nginx.conf  #隐藏版本

1 #define NGINX_VERSION “1.2X”
2 #define NGINX_VER “nginx/” NGINX_VERSION

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-openssl=/home/software/openssl-1.1.1k --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module  --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'  #--prefix=/usr/local/nginx后不要写/

#/home/software/openssl-1.1.1k 
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --modules-path=/usr/lib64/nginx/modules  --with-pcre=/lib64/ --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-openssl=/home/software/openssl-1.1.1k --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module

make -j4
cd objs
ls  #如下
autoconf.err  nginx    ngx_auto_config.h   ngx_modules.c  src
Makefile      nginx.8  ngx_auto_headers.h  ngx_modules.o
which nginx  #再次确认
/usr/sbin/nginx
mv /usr/sbin/nginx /usr/sbin/nginx.20230530
cp ./nginx /usr/sbin/   #复制新的文件夹替换原二进制目录
nginx -t  #验证,确认如下输出
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

kill -USR2 `cat /var/run/nginx.pid`   #平滑升级
kill -QUIT `cat /var/run/nginx.pid.oldbin`
#向旧的Nginx 主进程(master)发送 WINCH 信号,它会逐步关闭自己的工作进程(主进程不 退出),这时所有请求都会由新版 Nginx 处理
kill -WINCH `cat /var/run/nginx.pid.oldbin` 
或直接
make upgrade #相当于以上2步骤的一起操作
ake upgrade  #执行后自动进行升级节约我们手敲几个命令仅此而已
/opt//nginx/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
kill -USR2 `cat /var/run/nginx.pid`
sleep 1
test -f /etc/nginx/nginx.conf
kill -QUIT `cat /var/run/nginx.pid.oldbin`

vim /etc/nginx/nginx.conf  #
server_tokens off;

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入

コンパイルパラメータの確認:

–prefix= インストールディレクトリを指します

–sbin-path は (実行) プログラムファイル (nginx) を指します

–conf-path= 設定ファイル (nginx.conf) を指します

–error-log-path= エラーログを指しますdirectory

–pid-path= は pid ファイル (nginx.pid) を指します。

–lock-path= はロック ファイル (nginx.lock) を指します (インストール ファイルは、他の人やユーザーがインストール ファイルを使用できないようにロックされています) -user

= プログラムの実行時に非特権ユーザーを指定します。

–group = プログラムの実行時に非特権ユーザー グループを指定します。

--builddir= コンパイル ディレクトリを指します

。 --with-rtsig_module rtsig モジュールのサポートを有効にします。 (リアルタイム信号)

--with-select_module 選択モジュール サポートを有効にする (ポーリング モード、高負荷環境では推奨されません) を使用して無効にします: –without-select_module

–with-poll_module ポーリング モジュール サポートを有効にする (機能は同じです) as select、select 機能と同じ、ポーリング モードです。高負荷環境での使用は推奨されません) –with-file-aio ファイル

aio サポート (APL ファイル転送形式) を有効に

します --with-ipv6 Enable ipv6 support

--with-http_ssl_module ngx_http_ssl_module サポートを有効にする (https リクエストをサポートするには、openssl がインストールされている必要があります)

--with-http_realip_module ngx_http_realip_module サポートを有効にします (このモジュールでは、リクエスト ヘッダーからクライアントの IP アドレス値を変更できます。デフォルトはオフです) --with

-http_addition_module ngx_http_addition_module サポートを有効にします (出力フィルタとして、不完全なバッファリング、部分応答リクエストをサポートします)

–with-http_xslt_module は ngx_http_xslt_module サポートを有効にします (XML リクエストのフィルタリングと変換)

–with-http_image_filter_module は ngx_http_image_filter_module サポート (JPEG/GIF/PNG 画像を送信するためのフィルタ) を有効にします (デフォルトは無効です。gd ライブラリが使用されます) –with-http_geoip_module は ngx_http_geoip_module を有効にし

ますサポート (このモジュールは、MaxMind GeoIP バイナリと一致するクライアント IP アドレスに基づいて ngx_http_geoip_module 変数を作成します)

--with-http_sub_module ngx_http_sub_module サポートを有効にします (nginx 応答内の一部のテキストを他のテキストに置き換えることができます)

--with-http_dav_module ngx_http_dav_module サポートを有効にします ( PUT、DELETE、MKCOL を追加: コレクション、COPY、および MOVE メソッドを作成します) これはデフォルトで閉じられており、

ngx_http_flv_module サポートを有効にするために –with-http_flv_module を有効にするためにコンパイルする必要があります (メモリ使用量を求めるための時間ベースのオフセット ファイルを提供します)

─With-HTTP_GZIP_STATIC_MODULE は ngx_http_gzip_stative_module サポートを啓発します (オンライン リアルタイム圧縮出力データ ストリーム)

-With-HTTP_RANDOM_INDEX_MODULE は ngx_http_index_module サポートを有効にします (ディレクトリからディレクトリ インデックスをランダムに選択します)

-With-HTTP_SECURE_LINK_MODULE は NGX_HTTP_SECURE_LINK_MODULE サポートを有効にします (必要なデータ ストリームの計算と確認)セキュリティリンクURL必須)

--with-http_degradation_module ngx_http_degradation_module サポートを有効にする (メモリ不足の場合に 204 または 444 コードを返すことができる) --with

-http_stub_status_module ngx_http_stub_status_module サポートを有効にする (最後の起動以降の nginx の動作ステータスを取得する)

--without-http_charset_module ngx_http_charset_module サポートを無効にする (リセット Web ページをエンコードしますが、サーバーからクライアントへの一方向のみで、再エンコードできるのは 1 バイトのエンコードのみです) --without-http_gzip_module ngx_http_gzip_module サポートを無効にします (このモジュールは、-with-

http_gzip_static_module と同じ機能があります)

--without - http_ssi_module は、ngx_http_ssi_module サポートを無効にします (このモジュールは、入力時にサーバー インクルード ファイル (SSI) を処理するフィルターを提供します。サポートされている SSI コマンドのリストは現在不完全です)

--without-http_userid_module ngx_http_userid_module サポートを無効にします (このモジュールは、クライアントからの後続のリクエストを決定するために使用される Cookie を処理するために使用されます)

--without-http_access_module ngx_http_access_module サポートを無効にします (このモジュールは、単純なホストベースのアクセス制御を提供します。IP に基づいて許可/拒否します) address )

–without-http_auth_basic_module ngx_http_auth_basic_module を無効にします (このモジュールは、http 基本認証方法に基づいてユーザー名とパスワードを使用して、サイトまたはそのコンテンツの一部を保護できます) –without-http_autoindex_module disable ngx_http_autoindex_module サポートを無効にします (このモジュールは、ディレクトリ リストを自動的に生成するために使用されます

) 、ngx_http_index_module モジュールがインデックス ファイルを見つけられない場合にのみリクエストを行います。)

--without-http_geo_module ngx_http_geo_module サポートを無効にします(値がクライアントの IP アドレスに依存する変数を作成します)

--without-http_map_module ngx_http_map_module サポートを無効にします(構成を次のように設定します)任意のキーと値のペア 変数)

–without-http_split_clients_module ngx_http_split_clients_module サポートを無効にします (このモジュールは、特定の条件に基づいてユーザーを分割するために使用されます。条件: IP アドレス、ヘッダー、Cookie など) –without-http_referer_module disable ngx_http_referer_module サポートを無効にします

(このモジュールはリクエストをフィルタリングし、ヘッダーに不正なリファラー値を持つリクエストを拒否するために使用されます)

--without-http_rewrite_module ngx_http_rewrite_module サポートを無効にします (このモジュールでは、正規表現を使用して URI を変更し、変数に従って設定をリダイレクトおよび選択できます。このオプションがサーバー レベルで設定されている場合、それらは場所よりも前に有効になります)さらに存在する場合は、ロケーション部分の書き換えルールが引き続き実行されます。ロケーション部分のルールによってURI書き換えが発生した場合、ロケーション部分は新しいURIとして再度実行されます。このサイクルは10回実行されます–without

-http_proxy_module は ngx_http_proxy_module サポートを無効にします (プロキシ サーバーの場合)

–without-http_fastcgi_module は ngx_http_fastcgi_module サポートを無効にします (このモジュールにより、Nginx は FastCGI プロセスと対話し、FastCGI プロセスの動作を制御できます)パラメータを渡します。) FastCGI 常駐型のパブリック ゲートウェイ インターフェイス。

–without-http_uwsgi_module は、ngx_http_uwsgi_module のサポートを無効にします (このモジュールは、医療用 uwsgi プロトコル、uWSGI サーバー関連に使用されます)

–without-http_scgi_module は、ngx_http_scgi_module のサポートを無効にします (このモジュールは、SCGI プロトコルのサポートを有効にするために使用されます。SCGI プロトコルは CGI プロトコルの代替です。アプリケーション プログラムと HTTP サービス インターフェイスの標準。FastCGI に似ていますが、その設計は実装が簡単です。)

--without-http_memcached_module ngx_http_memcached_module サポートを無効にします (このモジュールは、システム効率を向上させるための単純なキャッシュを提供するために使用されます)

-without-http_limit_zone_module は、ngx_http_limit_zone_module のサポートを無効にします (このモジュールは、条件に応じてセッションの同時接続数を制御できます)

–without-http_limit_req_module は、ngx_http_limit_req_module のサポートを無効にします (このモジュールを使用すると、特定のセッションまたは特定のアドレスに対するリクエストの数を制限できます)イベント)

–without-http_empty_gif_module は、ngx_http_empty_gif_module のサポートを無効にします (このモジュールは、メモリ内に 1*1 の透明 GIF イメージを常駐させ、非常に迅速に呼び出すことができます) –without -http_browser_module は、

ngx_http_browser_module のサポートを無効にします (このモジュールは、依存関係を作成するために使用されます。リクエストヘッダー。ブラウザが最新の場合、modernbrowser は、modernbrowservalue 命令によって割り当てられた値と等しくなります。ブラウザが古い場合、modern_browser は、modern_browser_value 命令によって割り当てられた値と等しくなります。ブラウザが古い場合、現代_ _ _ _b漕ぎ現代等しい_ _ _bロウサーバー_ _va l u eディレクティブによって割り当てられた値。ブラウザがo l dの場合 iancient_browser は、iancient_browser_value ディレクティブによって割り当てられた値と等しくなります。ブラウザが MSIE のいずれかのバージョンである場合、$msie は 1 に等しくなります)

- -without-http_upstream_ip_hash_module ngx_http_upstream_ip_hash_module サポートを無効にします (このモジュールは単純なロード バランシングに使用されます)

--with-http_perl_module は ngx_http_perl_module サポートを有効にします (このモジュールにより、nginx が Perl を直接使用するか、ssi 経由で Perl を呼び出すことができます)

--with-perl_modules_path= perl モジュール パスを設定します

--with-perl= Perl ライブラリ ファイル パスを設定します

。 –http-log-path= アクセス ログ パスを設定します。

–http-client-body-temp-path= http クライアント リクエストの一時ファイル パスを設定します。

–http-proxy-temp-path= 設定します。 http プロキシ一時ファイル パス

–http-fastcgi-temp-path= http fastcgi 一時ファイル パスを設定します

–http-uwsgi-temp-path= http uwsgi 一時ファイル パスを設定します

–http-scgi-temp-path= http scgi 一時ファイル パスを設定します

-without-http http サーバー機能を無効にする

–without-http-cache http キャッシュ機能を無効にする

–with-mail POP3/IMAP4/SMTP プロキシ モジュールのサポートを有効にする

–with-mail_ssl_module ngx_mail_ssl_module のサポートを

有効にする –without-mail_pop3_module Pop3 プロトコルを無効にする (POP3 は Post Officeプロトコル POP3 の 3 番目のバージョンであり、パーソナル コンピュータがインターネット上のメール サーバーに接続してメールを送受信する方法を指定するプロトコルです。インターネット電子メールの最初のオフライン プロトコル標準です。POP3 プロトコルにより、ユーザーは次のことを行うことができます。サーバーからローカルホストにメールを保存すると同時に、クライアントの操作に応じてメールサーバー上のメールを削除または保存します POP3 プロトコルは TCP/IP プロトコルファミリーのメンバーであり、主に使用されます–without- mail_imap_module imap

プロトコル (メール取得プロトコル) を無効にします。その主な機能は、メール クライアントがこのプロトコルを通じてメール サーバーからメール情報を取得できることです。 IMAP プロトコルは TCP/IP プロトコル上で動作し、使用されるポートは 143 です。POP3 プロトコルとの主な違いは、ユーザーがすべてのメールをダウンロードする必要がなく、直接操作できることです。 --without-mail_smtp_module smtp プロトコルを無効にします (SMTP は簡易メール転送プロトコルであり

、送信元アドレスから宛先アドレスにメールを送信するための一連のルールであり、転送モードを制御します) SMTP プロトコルは TCP/IP プロトコル ファミリに属しており、各コンピュータが手紙を送信または転送するときに次の宛先を見つけるのに役立ちます。) --with-google_perftools_module ngx_google_perftools_module のサポートを有効にします (デバッグ、

プロファイリング プログラム パフォーマンスのボトルネック)

--with-cpp_test_module ngx_cpp_test_module サポートを有効にする

--add-module= 外部モジュール サポートを有効にする

--with-cc= C コンパイラ パスを指す

--with-cpp= C 前処理パスを指す

--with-cc-opt= C を設定するコンパイラ パラメータ (PCRE ライブラリ、--with-cc-opt="-I /usr/local/include" を指定する必要があります。select() 関数を使用する場合は、同時にファイル記述子の数を増やす必要があります) --with-cc-opt="-D FD_SETSIZE =2048" を指定して渡すことができます。)

--with-ld-opt= リンク ファイルのパラメータを設定します。(PCRE ライブラリ、--with-ld-opt="-L /usr/local/lib" を指定する必要があります。)

--with-cpu-opt= コンパイル済みの CPU を指定します。使用可能な値は次のとおりです:pentium、 pentiumpro、pentium3、pentium4、athlon、opteron、amd64、sparc32、sparc64、ppc64

--without-pcre pcre ライブラリを無効にする

--with-pcre pcre ライブラリを有効にする

--with-pcre= pcre ライブラリ ファイル ディレクトリを指します

--with- pcre-opt= コンパイル時に追加の pcre ライブラリを設定します。 パラメータ

–with-md5= は、md5 ライブラリ ファイル ディレクトリを指します (メッセージ整合性保護を提供するメッセージ ダイジェスト アルゴリズムの 5 番目のバージョン)

–with-md5-opt=コンパイル時の md5 ライブラリ

–with-md5-asm md5 を使用してソースをアセンブルする

–with-sha1= sha1 ライブラリ ディレクトリを指します (デジタル署名アルゴリズム、主にデジタル署名に使用されます)

–with-sha1-opt= コンパイル時に sha1 ライブラリの追加パラメータを設定します

–with-sha1-asm sha1 アセンブリ ソースを使用します

– with-zlib = zlib ライブラリ ディレクトリを指します

–with-zlib-opt= コンパイル時に zlib の追加パラメータを設定します

–with-zlib-asm= 指定した CPU の zlib アセンブリ ソースを使用して最適化します。CPU タイプは Pentium、pentiumpro

–with -libatomic はアトミックです メモリ更新操作の実装はアーキテクチャを提供します

–with-libatomic= libatomic_ops インストール ディレクトリを指します
–with-openssl= openssl インストール ディレクトリを指します
–with-openssl-opt はコンパイル時に openssl の追加パラメータを設定します
–with-debug はデバッグ ログを有効にします

3. 付録

1) nginxシグナルコマンド

ここに画像の説明を挿入

このうち、nginx のメインプロセスは USR1 シグナルを受信すると、ログ ファイル (nginx 設定ファイルのログ名にちなんで命名され、設定ファイルの access_log 項目で設定された値) を再度開きます。存在しない場合は、新しいファイル (xxx.log) が自動的に作成されます。次に、ログ ファイルの所有者を「ワーカー プロセス (ワーカー プロセス)」に変更し、ワーカー プロセスにログ ファイルへの読み取りおよび書き込み権限を与えます (通常、マスターとワーカーは別のユーザーとして実行されるため、所有者を変更する必要があります)。 。その後、nginx マスター プロセスは、同じ名前のログ ファイル (つまり、先ほど mv コマンドで xxx.log_ 20130909.log に名前変更されたファイル) を閉じ、新しく開いたログ ファイルを使用するようにワーカー プロセスに通知します。ログ ファイル (メイン プロセスが今開いたファイル xxx .log) の場合、メイン プロセスは USR1 シグナルをワーカーに送信し、ワーカーがこのシグナルを受信した後、ログ ファイル (つまり、同意された xxx.log) を再度開きます。構成ファイル内)

メインプロセスでサポートされるシグナル:

TERM、INT: 直ちに終了します。
QUIT: ワーカープロセスが終了するのを待ってから終了
します。 KILL: プロセスを強制的に
終了します。 HUP: 構成ファイルを再ロードし、新しい構成でワーカープロセスを開始し、徐々にプロセスを閉じます。古いプロセス。
USR1: ログ ファイルを再度開きます。
USR2: 新しいマスター プロセスを開始してホット アップグレードを実現します。 WINCH: ワーカー プロセスを徐々に閉じます。
ワーカー プロセス

がサポートするシグナル

: TERM、INT: 直ちに終了します
。 QUIT: 要求が処理されるのを待ってから終了します。
USR1: ログ ファイルを再度開きます

ここに画像の説明を挿入
2) スムーズなアップグレードの原則

Nginx はデフォルトでマルチプロセス モードで動作します。つまり、メイン プロセス (マスター プロセス) の開始後、設定の読み込み、ポート バインディング、その他のアクションが完了し、指定された数のワーカー プロセス (ワーカー プロセス) がフォークアウトされます。 -processes は、リスニング ポート記述子 (fd) のファイルを保持し、その記述子にリスナー イベントを追加することで接続を受け入れます (accept)。

Nginx メイン プロセスは、起動が完了すると待機状態に入り、SIGCHLD、SIGHUP、SIGUSR2 などのさまざまなシステム メッセージに応答する責任があります。このようにして、制御信号を通じて進行状況を制御でき、公式は次のような関連機能も提供します: マスターを置き換えた後、USR2 を送信して、新しいマスター プロセスを開始し、新しいバージョンのスムーズな置き換えを完了します。古いマスター プロセスに QUIT を送信し、古いワーカー プロセスが現在のタスクの処理を終了するまで待機してから終了するように指示するか、WINCH シグナルを古いマスター プロセスに送信してワーカーを徐々にシャットダウンするように指示します。新しいマスターはリクエストの処理を新しいワーカー プロセスに転送します。また、古いワーカー プロセスに QUIT を送信して、終了する前にリクエストが処理されるのを待つように指示することもできます。これまでのところ、Nginx 全体のスムーズな移行は完了しています。 。

3) 構文ルールを書き直す

使用法: 一般に、書き換えルールはルートの場所 (場所 /{……}) またはサーバー タグに直接書き込まれます。最後のタグを使用することをお勧めします。ルート以外の場所 (場所 /cms/{……) })、ブレークマークを使用する

変数名には、「=」または「!=」演算子を使用できます。
「~」記号は、大文字と小文字を区別する一致を示します。
「~*」記号は、大文字と小文字を区別しない一致を示します。
「!~」、「! *」、および「 " " !~" 逆に
、「-f」と「!-f」はファイルが存在するかどうかを判断するために使用されます。「 -d」と「!-d」はディレクトリが存在するかどうかを判断します。「-e」と「!
-d」はディレクトリが存在するかどうかを判断します。
-e」はファイルまたはディレクトリが存在するかどうかを判断するために使用されます。
「-x」および「!-x」はファイルが実行可能かどうかを判断するために使用されます。また、
$! から $9 までの位置パラメータもサポートされています

rewrite コマンドの最後のパラメータは flag タグであり、サポートされる flag タグには主に次のタイプが含まれます。

last: 書き換え完了を示すApacheの[L]マークに相当;
Break: このルールのマッチングが完了するとマッチングが終了し、以降のルールはマッチングされなくなる
redirect: 一時的に302を返すリダイレクト、およびブラウザのアドレス バーはジャンプ URL アドレスの後に表示されます
。永続的: return 301 永続的なリダイレクト。ブラウザのアドレス バーにはリダイレクトされた URL アドレスが最後に表示され

、URI 書き換えを実現するために改行されます。ブラウザのアドレス バーの URL アドレスは変更されません
。 URL ジャンプを実現するために使用され、ブラウザのアドレス バーにはリダイレクトされた URL アドレスが表示されます。

4) Nginx テストページの例

#vim /usr/local/nginx/html/index.html

<html>

<head>

<title>source page</title>

</head>

<body>

<h1>www.source.com</h1>

<img src="http://t.zoukankan.com/linux.png" />

</body>

</html>

5) Nginx ホットリンク ホスト テスト ページ

#vim /usr/local/nginx/html/index.html

<html>

<head>

<title>steal page</title>

</head>

<body>

<h1>www.steal.com</h1>

<img src="http://www.source.com/linux.png" />

</body>

</html> 

#防盗链配置
location ~* .(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
    
    

valid_referers none blocked *.source.com source.com;

if ($invalid_referer) {
    
    

	rewrite ^/ http://www.source.com/error.jpg;

	#return 403;

    }
 }

6) Nginx ログカットスクリプト例

#!/bin/bash

# Name:cut_nginx_log.sh 

datetime=$(date -d "-1 day" "+%Y%m%d")

log_path="/usr/local/nginx/logs"

pid_path="/usr/local/nginx/logs/nginx.pid"

[ -d $log_path/backup ] || mkdir -p $log_path/backup

if [ -f $pid_path ]

then
	mv $log_path/access.log $log_path/backup/access.log-$datetime
	kill -USR1 $(cat $pid_path)
	find $log_path/backup -mtime +30 | xargs rm -f

else
	echo "Error,Nginx is not working!" | tee -a /var/log/messages

fi

7) Nginx patch(パッチ)フォーマット説明

diff --git src/http/modules/ngx_http_mp4_module.c src/http/modules/ngx_http_mp4_module.c
--- src/http/modules/ngx_http_mp4_module.c  //表示安全问题产生在ngx_http_mp4_module.c文件中,该行是导致风险的代码,后续已删除,不要加到ngx_files.c文件
+++ src/http/modules/ngx_http_mp4_module.c  ///表示问题要在ngx_http_mp4_module.c文件中得以修复,该行为修复安全bug新增到ngx_files.c文件中的内容
@@ -1121,6 +1121,12 @@ ngx_http_mp4_read_ftyp_atom(ngx_http_mp4  -1121,6表示修复前该处代码的位置为1121行的后6行,+1121,12表示修复后该处代码占1121行的后12行
         return NGX_ERROR;
     }
 
+    if (mp4->ftyp_atom.buf) {
    
       ///+号表示该行代码原来没有,后续修复版本要新加进去的内容;修复时+号无需再加到代码中了
+        ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
+                      "duplicate mp4 ftyp atom in \"%s\"", mp4->file.name.data);
+        return NGX_ERROR;
+    }
+
     atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
 
     ftyp_atom = ngx_palloc(mp4->request->pool, atom_size);
@@ -1179,6 +1185,12 @@ ngx_http_mp4_read_moov_atom(ngx_http_mp4
         return NGX_DECLINED;
     }
 
+    if (mp4->moov_atom.buf) {
    
    
+        ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
+                      "duplicate mp4 moov atom in \"%s\"", mp4->file.name.data);
+        return NGX_ERROR;
+    }
+

添付ファイル: Nginx セキュリティ速報アドレス

8) Nginx パッチ適用プロセス

nginx 公式 Web サイトにアクセスし、新しいバージョンとプレリリース バージョンのパッチ ファイルを見つけてダウンロードし、次のコマンドを実行します。

1. 該当バージョンのパッチファイルをアップロードし、nginx ソースコードのルートディレクトリに解凍します。
2. cd /path/to/nginx/source/code
3. patch -p1 < /path/to/patch/file //patch コマンドを実行して、パッチ ファイルを nginx ソース コード ディレクトリに適用します。
4. ./configure - -add -module=module/path --prefix=元の nginx パスと一致します //再コンパイル
5、make //make 後、上記のバイナリ ファイルを参照して置き換えてアップグレードします

おすすめ

転載: blog.csdn.net/ximenjianxue/article/details/130941296