記事ディレクトリ
1.Nginxサービスの最適化
1.バージョン番号を非表示にするようにNginxを構成します
利点:
- Nginxのバージョン番号を非表示にして、セキュリティの脆弱性の開示を回避します
Nginxは、バージョン番号メソッドを非表示にします。
- 構成ファイルの方法を変更する
- ソースコードメソッドを変更する
1.方法1
[root@server1 ~]# vi /etc/nginx.conf
添加:
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; #添加隐藏版本号
}
[root@server1 ~]# systemctl stop nginx #关闭服务
[root@server1 ~]# systemctl start nginx #重启服务
[root@server1 ~]# curl -I http://localhost #访问测试
パッケージをテストキャプチャして、バージョンが非表示になっているかどうかを確認します
2.方法2
[root@server1 ~]# vi nginx-1.12.2/src/core/nginx.h
#define nginx_version 1112202
#define NGINX_VERSION "1.1.1"
#define NGINX_VER "IIS/" NGINX_VERSION
[root@server1 ~]# systemctl stop nginx #关闭服务
[root@server1 ~]# cd nginx-1.12.2/
[root@server1 nginx-1.12.2]# make && make install #编译安装(需要先关闭服务才可以编译安装)
[root@server1 nginx-1.12.2]# systemctl start nginx #重启服务
[root@server1 nginx-1.12.2]# cd
[root@server1 ~]# curl -I http://localhost #访问网站进行命令检测
キャプチャパッケージをテストしてバージョンを表示する
2.Nginxユーザーとグループを変更します
Nginxランタイムプロセスでは、Webサイトファイルを読み取るときにアクセス制御を実現するために、ユーザーとグループのサポートが必要です。
Nginxは、デフォルトで誰もユーザーアカウントとグループアカウントを使用しません
変更方法:
- コンパイルおよびインストール時にユーザーとグループを指定する
- 構成ファイルを変更して、ユーザーとグループを指定します
vi /usr/local/nginx/conf/nginx.conf
修改:
user nginx nginx;
systemctl stop nginx;
systemctl start nginx;
ps aux | grep nginx # 查看效果
3. NginxWebページのキャッシュ時間を構成します
NginxがWebページデータをクライアントに返した後、キャッシュ時間を設定して、将来同じコンテンツリクエストが行われたときに直接返されるようにすることができます。これにより、繰り返しのリクエストを回避し、アクセス速度を高速化できます。
通常、静的Webページに設定され、動的Webページのキャッシュ時間を設定しません。
vi /usr/local/nginx/conf/nginx.conf
添加:
location / {
root html;
index index.html index.htm;
expires 2d; ###设置缓存时间为1天
}
キャッシュが
設定されていません設定後のキャプチャと表示
4.Nginxログセグメンテーションを実現します
1. Nginxの実行時間が長くなると、ログも増加します。Nginxの実行状態を簡単に把握するには、常にNginxログファイルに注意を払う必要があります。
2.ログファイルが大きすぎると、監視するのが困難になります
- ログファイルを定期的にカットする
3. Nginx自体にはログ分離処理の機能はありませんが、ログの自動カットはNginx信号制御機能のスクリプトで実現できます。
4.Linuxのスケジュールされたタスクを通じて定期的にログを切り取ります
5.ログカット用のスクリプトを書くというアイデア
- 時間変数を設定する
- 保存ログパスを設定する
- 現在のログファイルの名前を変更します
- 新しいログファイルを再構築します
- 長すぎるログファイルを削除する
- cronタスクを設定し、スクリプトを定期的に実行して、ログを自動的に分割します
#获取当天的日期
[root@server1 ~]# date +%Y%m%d
20201130
#获取昨天的日期
[root@server1 ~]# date -d "-1 day"
2020年 11月 29日 星期日 14:00:07 -03
#获取明天的日期
[root@server1 ~]# date -d "+1 day"
2020年 12月 01日 星期二 14:00:36 -03
1.ログ分割スクリプトを作成します
[root@server1 ~]# vim rzfg.sh
#!/bin/bash
# 日志分割
d=$(date -d "-2 day" "+%Y%m%d")
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path
mv /usr/local/nginx/logs/access.log ${
logs_path}/test.com-access.log-$d
kill -HUP $(cat $pid_path)
find $logs_path -mtime +30 | xargs rm -rf
chmod +x rzfg.sh ##
./rzfg.sh ##执行脚本
cd /var/log/nginx #
[root@server1 ~]# vim rzfg.sh
[root@server1 ~]# chmod +x rzfg.sh #给脚本增加执行权限
[root@server1 ~]# ./rzfg.sh
[root@server1 ~]# cd /var/log/nginx/ #查看脚本中移动的日志
[root@server1 nginx]# ll
[root@server1 ~]# crontab -e #制作计划
[root@server1 ~]# crontab -l #查看计划
0 1 * * * /usr/bin/sh /root/rzfg.sh
分钟 时 日 月 星期
第二に、Nginxの詳細な最適化
1.接続タイムアウトを達成するようにNginxを構成します
1.1同じクライアントが接続を長時間占有してリソースを浪費するのを防ぐために、対応する接続タイムアウトパラメータを設定して、接続アクセス時間を制御できます。
1.2タイムアウトパラメータ
-
keepalive_timeout#接続キープタイムアウトを設定します
-
client_header_timeout#クライアントがリクエストヘッダーを送信するのを待機するタイムアウト期間を指定します
-
client_body_timeout#リクエスト本文の読み取りタイムアウト時間を設定します
vi /etc/nginx.conf
#keepalive_timeout 0;
keepalive_timeout 65 180; #设置连接保持超时时间,第一个数是服务器超时关闭时间,第二数是客户端超时关闭的时间
client_header_timeout 80; #指定等待客户端发送请求头的超时时间
client_body_timeout 80; #设置请求体读超时时间
テスト
2.実行中のNginxプロセスの数を変更します
2.1同時実行性の高いシナリオでは、高速応答を確保し、ユーザーリクエストを処理してブロックを回避するために、より多くのNginxプロセスを開始する必要があります。
2.2構成ファイルのworker_processesパラメーターを変更します
- 通常、cpuまたはcoreの数に設定されます
- 同時実行性が高い場合は、cpuの数またはコアの数の2倍に設定できます。
2.3プロセス数を増やすと、システムオーバーヘッドを削減し、サービス速度を向上させることができます
2.4 ps auxを使用して、実行中のプロセス数の変化を表示します
[root@server1 ~]#cat /proc/cpuinfo | grep -c "physical id" # 查看cpu的个数
[root@server1 ~]# cat /proc/cpuinfo | grep -c "physical"
[root@server1 ~]# vi /etc/nginx.conf
[root@server1 ~]# nginx -t
[root@server1 ~]# ulimit -n 65535 >> /etc/rc.local
[root@server1 ~]# systemctl stop nginx
[root@server1 ~]# systemctl start nginx
[root@server1 ~]# ps aux | grep nginx 查看状态
注: ulimit -n 65535 #查看和更改本地打开资源
添加修改:
worker_processes 4; #工作进程
worker_cpu_affinity 00000001 00000010 00000100 00001000; #CPU或者核的分配情况
use epoll;
worker_connections 4096;
3.Webページ圧縮を実装するようにNginxを構成します
- Nginxのngx_http_gzip_module圧縮モジュールは、ファイルコンテンツを圧縮する機能を提供します
- Nginxサーバーが出力コンテンツをクライアントに送信する前に圧縮できるようにして、Webサイトの帯域幅を節約し、ユーザーのアクセスエクスペリエンスを向上させます。デフォルトでインストールされます
- 対応する圧縮関数パラメーターを構成ファイルに追加して、圧縮パフォーマンスを最適化できます。
vi /usr/local/nginx/conf/nginx.conf
添加:
gzip on; # 开启gzip压缩功能
gzip_min_length 1k; # 压缩阈值
gzip_buffers 4 16k; # buffer大小为4个16k缓冲区大小
gzip_http_version 1.1; # 压缩版本
gzip_comp_level 6; # 压缩比率,最小为1,处理速度快,传输速度慢,9最大压缩比,处理速度慢,传输速度快
gzip_types text/plain application/x-javascript text/css image/jpg image/png image/gif application/xml text/javascript application/x-http-php application/javascript application/json;
gzip_disable "MSIE [1-6]\."; # 配置禁用gzip条件,支持正则,表示ie6以下不启用gzip
gzip_vary on; # 选择支持very header 可以让前端的缓存服务器缓存经过gzip压缩的页面
パケットキャプチャを表示するには、ブラウザで
http://20.0.0.13にアクセスしてください
4.アンチリーチを実装するようにNginxを構成します
- 企業のウェブサイトサービスでは、リーチング防止機能は通常、ウェブサイトのコンテンツの違法な使用を回避し、経済的損失を引き起こすように構成されています
- Nginxの盗難防止チェーン機能も非常に強力です。デフォルトでは、リーチ防止処理を実現するために必要なのは単純な構成のみです。
1.構成プロセス
- アンチリーチを実現するようにNginxを構成する
- サービスを再開し、もう一度写真にアクセスして、盗難防止効果を確認してください
2.構成手順
- 〜*。(jpg | gif | swf)$ :. jpgまたは.swfで終わる大文字と小文字を区別しないファイルに一致します
- valid_referes:信頼できるWebサイト、つまり、対応する画像を参照できるWebサイトを設定します
- URLまたはドメイン名:参照元に関連する文字列を含むURL
- ifステートメント:リンクのソースドメイン名がvalid_referersにリストされているリストになく、$ invalid_refererが1の場合、次の操作が実行されます。つまり、403ページを書き換えるか戻ります。
3.構成操作
[root@server1 ~]# vi /etc/nginx.conf
[root@server2 ~]# vi /etc/hosts
添加:
20.0.0.13 www.aa.com
[root@server1 ~]# nginx -t
[root@server1 ~]# systemctl stop nginx
[root@server1 ~]# systemctl start nginx
/ usr / local / nginx / html /に移動し、元のindex.htmlファイルを削除し、2つの画像を追加し、新しいindex.htmlファイルを追加します
[root@server1 ~]# cd /usr/local/nginx/html/
[root@server1 html]# ll
[root@server1 html]# rm -rf index.html
別のホットリンクで操作します(環境はNginx環境です)
[root@server2 ~]# vi /usr/local/nginx/html/index.html
[root@server2 ~]# vi /etc/hosts
添加:
20.0.0.13 www.aa.com
このマシンで
20.0.0.13をテストすると、このマシンの
ホットリンク(20.0.0.14)にアクセスして、このマシン
20.0.0.13にアクセスできます。
5.FPM最適化パラメーター
1.静的パラメータ
pm.max_children: 指定启动的进程数量
2.動的パラメータ
pm.max_children:指定启动进程数的最大值
pm.start_servers: 动态方式下初始的fpm进程数
pm.min_spare_servers: 动态方式下最小的fpm空闲进程数
pm.max_spare_servers: 动态方式下最大的fpm空闲进程数
3.フォーラムインストールデバイスで操作します
動的な方法
[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# setenforce 0
[root@server1 ~]# systemctl status nginx
[root@server1 ~]# netstat -anpt | grep 9000
[root@server1 ~]# cd /usr/local/php/etc/php-fpm.d/
[root@server1 php-fpm.d]# ls -lh
[root@server1 php-fpm.d]# vi www.conf
[root@server1 php-fpm.d]# cd
pm = dynamic
pm.max_children = 20 static模式下空闲进程数上限,大于下面的值
pm.start_servers = 5 动态方式下默认开启的进程数,在最小和最大之间
pm.min_spare_servers = 2 动态方式下最少空闲进程数
pm.max_spare_servers = 8 动态方式下最大空闲进程数
[root@server1 ~]# ps aux | grep php-fpm 查看进程状态 默认进程2个
[root@server1 ~]# pkill php-fpm 终止进程
[root@server1 ~]# /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini 重新加载
[root@server1 ~]# ps aux | grep php-fpm