Nginx の最適化、セキュリティ、アンチリーチ

目次

1. Nginxページの最適化

1) Nginx Web ページの圧縮 

2) Nginx の画像キャッシュを設定する  

3) Nginx接続タイムアウト設定

4) Nginxの同時実行設定 

CPUのコア数を表示し、コア数に応じてワークプロセス数を設定します。

ワーカー プロセス コアの数を変更します。

試験結果:

2、Nginx ページのセキュリティ 

1) Nginxのバージョン確認方法

方法 1: Curl がアクセスをシミュレートして取得する

方法 2: ブラウザからアクセスして表示する 

2) バージョン番号を非表示にする 

方法 1: 構成ファイルを変更し、バージョン番号をオフにする

試験結果: 

方法 2: ソース コード ファイルのバージョン番号を変更し、再コンパイルしてインストールする

3、Nginx ログのセグメント化 

ログ分割スクリプトを作成する

2) テスト用のスクリプトを実行します。 

3) ログスクリプトをスケジュールされたタスクに追加します 

4、Nginx アンチリーチ 

1) ホットリンクのプロセス

2) Nginx のアンチリーチ設定  

メイン構成ファイルを変更し、アンチリーチ設定を追加します。

error.png を /var/local/nginx/html に配置します 

ホットリンクテストを行う 

サードパーティ ユーザーはホットリンク ホストにアクセスします。

元のホストへのサードパーティのアクセス:

5、fpmパラメータの最適化 


1. Nginxページの最適化

1) Nginx Web ページの圧縮 

Nginx の ngx_http_gzip_module 圧縮モジュールは、ファイル コンテンツを圧縮する機能を提供します。関連する構成変更を行うことで、Nginx ページの圧縮を実現し、帯域幅を節約し、ユーザーのアクセス速度を向上させることができます。

vim /usr/local/nginx/conf/nginx.conf
http {
..........
gzip  on;
    gzip_min_length 1k;
    gzip_buffers 4 64k;
    gzip_http_version 1.1; 
    gzip_comp_level 6;
    gzip_vary on;
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
}

サービスを再起動し、アクセス テストを実行します。 

2) Nginx の画像キャッシュを設定する  

Nginx が Web ページ データをクライアントに返した後、キャッシュ時間を設定して、将来同じコンテンツがリクエストされたときに直接返せるようにすることで、リクエストの繰り返しを回避し、アクセス速度を高速化できます。

一般に、キャッシュ時間は静的 Web ページに設定され、動的 Web ページには設定されません。

vim /usr/local/nginx/conf/nginx.conf
http {
.................
 location ~* \.(gif|jpg|jepg|bmp|ico)$ {
             root html;
             expires 1d;             
         }
}

サービスを再起動してアクセスをテストします。

3) Nginx接続タイムアウト設定

  • HTTP には KeepAlive モードがあり、リクエストの処理後に TCP 接続を開いたままにするよう Web サーバーに指示します。同じクライアントから他のリクエストを受信した場合、サーバーは別の接続を確立せずに、この閉じられていない接続を使用します。
  • KeepAlive は一定期間継続され、その間リソースを消費します。過度の使用はパフォーマンスに影響を与えます
  • 企業 Web サイトでは、同じクライアントが長時間接続を占有し、リソースが無駄になることを避けるために、対応する接続​​タイムアウト パラメータを設定して接続アクセス時間を制御できます。構成ファイル nginx.conf を変更して、keepalive_timeout タイムアウトを設定できます。
vim /usr/local/nginx/conf/nginx.conf
 http {
 ...... 
     keepalive_timeout 65 180;       //设置连接超时时间    
     client_header_timeout 80;
     client_body_timeout 80;
 ...... 
 }
  • KeepAliveのタイムアウト(タイムアウト)を指定します。各 TCP 接続を維持できる最大時間を指定します。この時間が経過すると、サーバーは接続を閉じます。
  • Nginx のデフォルト値は 65 秒ですが、一部のブラウザーは最大 60 秒しか保持しないため、60 秒に設定できます。0 に設定すると、キープアライブ接続が無効になります。
  • 2 番目のパラメーター (オプション) は、応答ヘッダー Keep-Alive: timeout=time の時間値を指定します。このヘッダーを使用すると、サーバーが接続を閉じる必要がないように、一部のブラウザーが積極的に接続を閉じることができます。このパラメータがないと、Nginx は Keep-Alive 応答ヘッダーを送信しません。

サービスを再起動し、テストにアクセスします。 

4) Nginxの同時実行設定 

同時実行性の高いシナリオでは、ユーザー要求を処理するための高速な応答を確保し、ブロックを回避するために、より多くの Nginx プロセスを開始する必要があります。

CPUのコア数を表示し、コア数に応じてワークプロセス数を設定します。

 #1、查看cpu核数
 cat /proc/cpuinfo |grep processor|wc -l
 或
 cat /proc/cpuinfo |grep -c processor
 或
 cat /proc/cpuinfo | grep -c "physical id"

[root@localhost html]#ps aux | grep nginx

ワーカー プロセス コアの数を変更します。

vim /usr/local/nginx/conf/nginx.conf
 worker_processes  2;        #修改为与CPU核数相同
 worker_cpu_affinity 01 10;  #设置每个进程由不同cpu处理,进程数配为4时0001 0010 0100 1000
 ​

試験結果:

[root@localhost html]#ps aux | grep nginx

2、Nginx ページのセキュリティ 

——Nginxのバージョン番号を非表示にする

1) Nginxのバージョン確認方法

方法 1: Curl がアクセスをシミュレートして取得する

[root@localhost ~]#curl -I 192.168.73.105

方法 2: ブラウザからアクセスして表示する 

Firefox でブラウザにアクセスし、F12 でネットワーク情報を表示します

2) バージョン番号を非表示にする 

方法 1: 構成ファイルを変更し、バージョン番号をオフにする

 vim /usr/local/nginx/conf/nginx.conf
 http {
     include       mime.types;
     default_type  application/octet-stream;
     server_tokens off;      #添加这一行,关闭版本号
     ......
 }

試験結果: 

方法 2: ソース コード ファイルのバージョン番号を変更し、再コンパイルしてインストールする

cd /opt/nginx-1.12.0/src/core/
#修改前进行备份
cp nginx.h  nginx.h.bak
 
vimn ginx.h
 
#define NGINX_VERSION      "1.12.0"
#define NGINX_VER          "nginx/" NGINX_VERSION

構成を変更した後、Nginx ソフトウェア パッケージに切り替え、再コンパイルしてインストールします。

cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
 
make -J 2 && make install

メイン構成ファイルを再度変更し、バージョン番号を開いて表示します。

vim /usr/local/nginx/conf/nginx.conf
 http {
     include       mime.types;
     default_type  application/octet-stream;
     server_tokens on;
     ......
 }

サービスを再起動してテストします。 

3、Nginx ログのセグメント化 

Nginx と Apache の違いは、Nginx 自体がログ セグメンテーション ツールを設計していないため、運用および保守担当者がログ セグメンテーションを実現するためのスクリプトを作成する必要があることです。

ログ分割スクリプトを作成する

cd /opt
vim cutlogs.sh
 
#!/bin/bash
 
#nginx 分割日志脚本
#用变量day获取前天日期的时间记录
day=$(date -d "-1 day" "+%Y%m%d")
#获取日志的目录
logs_path="/var/log/nginx"
#获取运行时nginx的进程号
pid_path="/usr/local/nginx/logs/nginx.pid"
#二元表达式,如果前面不成立则执行后面的式子
#前面判断该目录是否存在,后面则表示不存在则自动创建该目录
[ -d $logs_path ] || mkdir -p $logs_path
#将生成的日志按照date生成的时间格式改名并移动到指定的路径中保存
mv /usr/local/nginx/logs/access.log ${logs_path}/access.log-$day
#重新生成一个新的日志
kill -USR1 $(cat $pid_path)
#日志文件清理,将30天前的日志进行清除
find $logs_path -mtime +30 -exec rm -rf {} \ ;

2) テスト用のスクリプトを実行します。 

3) ログスクリプトをスケジュールされたタスクに追加します 

[root@localhost opt]#vim cutlogs.sh
[root@localhost opt]#chmod +x cutlogs.sh 
[root@localhost opt]#crontab -e
0 1 * * * /opt/cutlogs.sh

4、Nginx アンチリーチ 

1) ホットリンクのプロセス

Nginx のホットリンクのプロセスは、Web ブラウジングを通じて Web サイトの写真を自分の Web サイトにリダイレクトする Apache のプロセスと同じです。

Apache Web ページの最適化、セキュリティ、およびリーチ防止

2) Nginx のアンチリーチ設定  

メイン構成ファイルを変更し、アンチリーチ設定を追加します。

vim /usr/local/nginx/conf/nginx.conf
http {
...........
server{
...........
location ~* \.(jpg|gif|swf)$ {
         root  html;
         expires 1d;
         valid_referers none blocked *.test.com test.com;
         if ( $invalid_referer ) {
           rewrite ^/ http://www.test.com/error.png;
           }
        }
............
}
...............
}

error.png を /var/local/nginx/html に配置します 

ホットリンクテストを行う 

ホットリンク ホストの HTML ページの設定:

サードパーティ ユーザーはホットリンク ホストにアクセスします。

アクセス前のセットアップ:

  1. ファイアウォール ツール firewalld および selinux を閉じます。
  2. ドメイン名に対応するIPを/etc/hostsに追加します。 

元のホストへのサードパーティのアクセス:

5、fpmパラメータの最適化 

Nginx の PHP 解析機能が FPM で実装されている場合、PHP の処理速度を向上させるために、FPM モジュールのパラメータを調整できます。

サーバーのメモリとサービス負荷に応じて FPM モジュールのパラメータを調整します

 vim /usr/local/php/etc/php-fpm.conf 
 pid = run/php-fpm.pid
 ​
 vim /usr/local/php/etc/php-fpm.d/www.conf
 --96行--
 pm = dynamic                #fpm进程启动方式,动态的
 --107行--
 pm.max_children=20          #fpm进程启动的最大进程数
 --112行--
 pm.start_servers = 5        #动态方式下启动时默认开启的进程数,在最小和最大之间
 --117行--
 pm.min_spare_servers = 2    #动态方式下最小空闲进程数
 --122行--
 pm.max_spare_servers = 8    #动态方式下最大空闲进程数
 ​
 ​
 kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`         #重启php-fpm
 netstat -anpt | grep 9000

おすすめ

転載: blog.csdn.net/qq_21003381/article/details/131005210
おすすめ