文章目錄
- 一:Nginx優化與防盜鏈實驗
- 1.1:方法一:配置Nginx隱藏版本號
- 1.2:方法二:修改原始碼
- 二:修改Nginx用戶與組
- 三:配置Nginx網頁快取時間
- 四:實作Nginx的日志切割
- 4.1:日志分隔思路
- 五:配置Nginx實作連接超時
- 3.3:重啟服務
- 3.4:訪問http://20.0.0.41,在用Fidder抓包工具
- 六:nginx運行行程數
- 七:配置Nginx實作網頁壓縮功能
- 八:防盜鏈優化
- 模仿盜鏈程序
- 九、對FPM模塊進行引數優化
一:Nginx優化與防盜鏈實驗
前言
最近整理了一下Nginx的優化,詳細介紹,更改用戶與組、配置網頁快取、日志切割、設定連接超時等;

1.1:方法一:配置Nginx隱藏版本號
直接修改
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y
解壓縮
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
rh
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# tar zxvf nginx-1.12.2.tar.gz
創建管理用戶
[root@localhost nginx-1.12.2]# useradd -M -s /sbin/nologin nginx
編譯及安裝
[root@localhost nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
編譯
[root@localhost nginx-1.12.2]# make
[root@localhost nginx-1.12.2]# make install
路徑優化,便于系統管理
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
使用service控制
[root@localhost nginx-1.12.2]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
#增加權限
[root@localhost nginx-1.12.2]# chmod +x /etc/init.d/nginx
#重啟服務
[root@localhost nginx-1.12.2]# service nginx start
#查看埠
[root@localhost nginx-1.12.2]# netstat -ntap | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22235/nginx: master
- 客戶機訪問

- 使用curl -l命令檢測
-i引數可以顯示 http response 的頭資訊,連同網頁代碼一起,-I 引數則只顯示 http response 的頭資訊,
[root@server3 nginx-1.12.2]# curl -I http://192.168.158.30
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Wed, 11 Nov 2020 03:46:42 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 11 Nov 2020 03:21:54 GMT
Connection: keep-alive
ETag: "5fab58d2-264"
Accept-Ranges: bytes
- 修改組態檔

- 重啟服務
[root@server3 conf]# curl -I http://192.168.158.30
HTTP/1.1 200 OK
Server: nginx #已經隱藏版本號
Date: Wed, 11 Nov 2020 03:56:19 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 11 Nov 2020 03:21:54 GMT
Connection: keep-alive
ETag: "5fab58d2-264"
Accept-Ranges: bytes
1.2:方法二:修改原始碼
- Nginx原始碼檔案/usr/src/ nginx-1.12.2/src/ core/nginx. h包含了版本資訊,可以隨意設定
- 重新編譯安裝,隱藏版本資訊
- define NGINX_VERSION “1.12.2″,修改版本號為1.2.2
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
rh
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
nginx-1.12.2.tar.gz rh
[root@localhost opt]# yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y
[root@localhost opt]# tar zxvf nginx-1.12.2.tar.gz
[root@localhost nginx-1.12.2]# cd src/
[root@localhost src]# ls
core event http mail misc os stream
[root@localhost src]# cd core/
[root@localhost core]# vim nginx.h
[root@localhost core]# vim nginx.h

- 編譯安裝
[root@localhost core]# cd ../../
[root@localhost nginx-1.12.2]# ls
auto CHANGES.ru configure html man src
CHANGES conf contrib LICENSE README
[root@localhost nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
#編譯
[root@localhost nginx-1.12.2]# make
[root@localhost nginx-1.12.2]# make install
[root@server3 nginx-1.12.2]# curl -I 192.168.158.30
HTTP/1.1 200 OK
Server: nginx/1.2.2
Date: Wed, 11 Nov 2020 04:29:48 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 11 Nov 2020 04:29:13 GMT
Connection: keep-alive
ETag: "5fab6899-264"
Accept-Ranges: bytes
二:修改Nginx用戶與組
- 新建用戶賬號,如 nginx
- 修改主組態檔user選項,指定用戶賬號
- 重啟 nginx服務,使配置生效
- 使用 ps aux命令查看nginx的行程資訊,驗證運行用戶賬號改變效果
[root@server3 core]# id nobody
uid=99(nobody) gid=99(nobody) 組=99(nobody)
[root@server3 core]# cd /usr/local/nginx/conf/
[root@server3 conf]# vi nginx.conf

[root@server3 ~]# service nginx stop
[root@server3 ~]# service nginx start
[root@server3 ~]# ps aux | grep nginx
root 48547 0.0 0.0 20500 608 ? Ss 13:53 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 48548 0.0 0.0 23028 1384 ? S 13:53 0:00 nginx: worker process
root 48550 0.0 0.0 112676 984 pts/2 R+ 13:53 0:00 grep --color=auto nginx
三:配置Nginx網頁快取時間
- 當Nginx將網頁資料回傳給客戶端后,可設定快取時,以方便在日后進行相同的內容請求時直接放回,避免重復請求,加快了訪問速度
- 一般針對靜態網頁設定,對動態網頁不設定快取時間
設定方法
- 修改Nginx的組態檔,在location段加入expires引數
[root@localhost conf]# vim nginx.conf
末行添加

四:實作Nginx的日志切割
- 隨著Nginx運行時間增加,日志也會增加,為了方便掌握Nginx運行狀態,需要時刻關注Nginx日志檔案
- 太大的日志檔案對監控是一一個大災難定期進行日志檔案的切割
- Nginx自身不具備日志分割處理的功能,但可以通過
- Nginx信號控制功能的腳本實作日志的自動切割
- 通過Linux的計劃任務周期性地進行日志切割
4.1:日志分隔思路
- 設定時間變數
- 設定保存日志路徑
- 將目前的日志檔案進行重命名
- 重建新日志檔案
- 洗掉時間過長的日志檔案
- 設定cron任務,定期執行腳本自動進行日志分割
- date -d:設定時間格式
[root@client1 ~]# date -d "-1 day" "+%Y%m%d"
20201111
[root@client1 opt]# date -d "1 day"
2020年 11月 13日 星期五 09:08:10 CST
[root@client1 opt]# date -d "0 day"
2020年 11月 12日 星期四 09:08:39 CST
[root@client1 opt]# date -d "-1 day"
2020年 11月 11日 星期三 09:08:43 CST
撰寫腳進行日志分割的思路
#!/bin/bash
#Filename:test.sh
#設定日期名稱
d=$(date -d "-1 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}/tase.cpm-access.log-$d
#生成新日志
kill -USR1 $(cat $pid_path)
#洗掉30天前的日志
find $logs_path -mtime +30 | xargs rm -rf
- 運行腳本
[root@localhost opt]# chmod +x shuai.sh
[root@localhost nginx]# cd /opt/
[root@localhost opt]# ./shuai.sh
[root@localhost opt]# ls /var/log/nginx/
tase.cpm-access.log-20201111
- 定時任務
[root@client1 opt]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
五:配置Nginx實作連接超時
超時引數為避免同-客戶端長時間占用連接,造成資源浪費,可設定相應的連接超時引數,實作控制連接訪問時間
- 超時引數
Keepalive_timeout
設定連接保持超時時間
Client_header_timeout
指定等待客戶端發送請求頭的超時時間
Client_body_timeout
設定請求體讀超時時間
- 修改配置
[root@localhost opt]# cd /usr/local/nginx/conf/
[root@localhost conf]# ls
fastcgi.conf nginx.conf
fastcgi.conf.default nginx.conf.default
fastcgi_params scgi_params
fastcgi_params.default scgi_params.default
koi-utf uwsgi_params
koi-win uwsgi_params.default
mime.types win-utf
mime.types.default
[root@localhost conf]# vim nginx.conf

第一個是客戶端的超時時間,第二個是服務端的超時時間,引數放在http中以上就是進行超時時間的設定
3.3:重啟服務
[root@localhost html]# service nginx stop
[root@localhost html]# service nginx start
3.4:訪問http://20.0.0.41,在用Fidder抓包工具

六:nginx運行行程數
在高并發場景,需要啟動更多的 Nginx行程以保證快速回應,以處理用戶的請求,避免造成阻塞
可以使用 ps auxi命令查看Ngnx運行行程的個數
更改行程數的配置方法
修改組態檔,修改行程配置引數
修改組態檔的 worker_ processes引數
一般設為CPU的個數或者核數
在高并發情況下可設定為CPU個數或者核數的2倍
運行行程數多一些,回應訪問請求時, Nginx就不會臨時啟動新的行程提供服務,減少了系統的開銷,提升了服務速度
使用 ps aux查看運行行程數的變化情況
默認情況, Nginx的多個行程可能跑在一個cPU上,可以分配不同的行程給不同的CPU處理,充分利用硬體多核多CPU
在一臺4核物理服務器,可進行以下配置,將行程進行分配
Worker_cpu_affinity 0001 0010 0100 1000 ‘//核心數的序列位置’
[root@localhost ~]# cat /proc/cpuinfo | grep -c "physical"
8

- 重啟服務
[root@localhost conf]# pkill -9 nginx
[root@localhost conf]# netstat -anpt | grep nginx
[root@localhost conf]# nginx
[root@localhost conf]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 41766/nginx: master
[root@localhost conf]# ps aux | grep nginx
root 41766 0.0 0.0 20496 612 ? Ss 10:35 0:00 nginx: master process nginx
nginx 41767 0.0 0.0 23024 1384 ? S 10:35 0:00 nginx: worker process
nginx 41768 0.0 0.0 23024 1388 ? S 10:35 0:00 nginx: worker process
nginx 41769 0.0 0.0 23024 1396 ? S 10:35 0:00 nginx: worker process
nginx 41770 0.0 0.0 23024 1380 ? S 10:35 0:00 nginx: worker process
root 41774 0.0 0.0 112680 984 pts/0 S+ 10:36 0:00 grep --color=auto nginx
七:配置Nginx實作網頁壓縮功能
- Nginx的ngx_htto_gzip_ module壓縮模塊提供對檔案內容壓縮的功能
- 允許Nginx服務器將輸出內容在發送客戶端之前進行壓縮,以節約網站帶寬,提升用戶的訪問體驗,默認已經安裝
- 可在組態檔中加入相應的壓縮功能引數對壓縮性能進行優化
- 優化網頁壓縮設定
[root@localhost conf]# vi /usr/local/nginx/conf/nginx.conf
#搜索gzip on 第一行取消注釋
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
- 重啟服務
[root@localhost conf]# service nginx stop
[root@localhost conf]# service nginx start

八:防盜鏈優化
防盜鏈概述
- 在企業網站服務中,一般都要配置防盜鏈功能,以避免網站內容被非法盜用,造成經濟損失
- Nginx防盜鏈功能也非常強大,默認情況下,只需要進行簡單的配置,即可實作防盜鏈處理
使用三臺主機模擬防盜鏈
| IP地址 | 域名 | 用途 | 系統 |
|---|---|---|---|
| 20.0.0.12 | www.tom.com | 源主機 | CentOS7 |
| 20.0.0.13 | -------------- | 盜鏈主機 | CentOS7 |
模仿盜鏈程序
- 源主機配置
[root@localhost ~]# vi /etc/hosts
192.168.73.40 www.test.com
- 盜鏈網站首頁配置
[root@server3 html]# vi index.html
<html><body><h1>This is Copy!</h1><img src=http://20.0.0.12/a.jpg / ></body></html>
- 源主機防盜鏈配置
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
location ~*\.(gif|jpg|swf)$ {
valid_referers none blocked *.test.com test.com;
if ($invalid_referer) {
rewrite ^/ http://www.test.com/error.png;
}
}

- 測驗

九、對FPM模塊進行引數優化
- Nginx 的 PHP 決議功能實作如果是交由 FPM 處理的,為了提高 PHP 的處理速度,可對FPM 模塊進行引數跳轉,
- FPM 優化引數:
pm 使用哪種方式啟動 fpm 行程,可以說 static 和 dynamic,前者將產生固定數量的 fpm 行程,后者將以動態的方式產生 fpm 行程
pm.max_children :static 方式下開啟的 fpm 行程數
pm.start_servers :動態方式下初始的 fpm 行程數量
pm.min_spare_servers :動態方式下最大的 fpm 空閑行程數
pm.max_spare_servers :動態方式下最大的 fpm 空閑行程數
- 優化原因:服務器為云服務器,運行了個人論壇,記憶體為1.5G,fpm行程數為20,記憶體消耗近1G,處理比較慢
- 優化引數調整
FPM啟動時有5個行程,最小空閑2個行程,最大空閑8個行程,最多
可以有20個行程存在
[root@localhost ~]# vi /usr/local/php/etc/php-fpm.d/www.conf
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
[root@localhost ~]# /usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php-fpm.d/www.conf
[root@localhost ~]# netstat -ntap | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2094/php-fpm: maste
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225444.html
標籤:其他
上一篇:關于輸出中空格的控制
