Nginx服務優化

wuwukai 2021-08-15 21:14:58 阅读数:141

本文一共[544]字,预计阅读时长:1分钟~
nginx

一、隱藏版本號

可以使用Fiddler工具抓取數據包,查看Nginx版本

也可以再Centos中使用curl -I http://192.168.80.12顯示響應報文首部信息

方法一:修改配置文件方式

vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; #添加,關閉版本號
......
}
systemctl restart nginx
curl -I http://192.168.80.12

方法二:修改源碼文件,重新編譯安裝

vim /opt/nginx-1.12.0/src/core/nginx.h
#define NGINX_VERSION "1.1.1" #修改版本號
#define NGINX_VER "apache" NGINX_VERSION
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
vim /usr/local/nginx/conf/nginx.conf
http {
include
mime. types;
default type application/octet-stream;
server_tokens on;
......
}
systemctl restart nginx
curl -I http://192.168.80.12

二、修改用戶與組

vim /usr/local/nginx/conf/nginx.conf
usre nginx nginx; #取消注釋,修改用戶為nginx,組為nginx
systemctl restart nginx
ps aux | grep nginx #主進程由root創建,子進程由nginx創建

三、緩存時間

當Nginx將網頁數據返回給客戶端後,可設置緩存的時間,以方便再日後進行相同內容的請求時直接返回,避免重讀請求,加快了訪問速度

一般針對靜態網頁設置,對動態網頁不設置緩存時間

vim /usr/local/nginx/conf/nginx.conf
http {
......
server {
......
location / {
root html;
index index.html index.htm;
}
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ { #加入新的location,以圖片作為緩存對象
root html;
expires 1d; #指定緩存時間,1天
}
......
}
}

四、日志分割

vim /opt/fenge.sh
#!/bin/bash
# Filename: fenge.sh
day=$(date -d "-1 day" "+%Y%m&d") #顯示前一天時間
logs_path="/var/log/nginx" #指定日志存放比特置
pid_path="/usr/local/nginx/logs/nginx.pid" #指定pid存放比特置
[ -d $logs_path ] || mkdir -p $logs_path #創建日志文件目錄
mv /usr/local/nginx/logs/accesss.log $(logs_path)/123.com-access.log-$day #移動並重命名日志文件
kill -USR1 $(cat $pid_path) #重建新日志文件
find $logs_path -mtime +30 -exec rm -rf {}\;
或 find $log_path -mtime +30 | xargs rm -rf #删除30天之前的日志文件
chmod +x /opt/fenge.sh
/opt/fenge
ls /var/log/nginx
ls /usr/local/nginx/logs/access
crontab -e
0 1 * * * /opt/fenge.sh

在Linux操作系統中,每個文件都有很多的時間參數,其中有三個比較主要,分別是ctime,atime,mtime

ctime(status time): 當修改文件的權限或者屬性的時候,就會更新這個時間,ctime並不是creat time,更像是change time,只有當更新文件的屬性或者權限的時候才會更新這個時間,但是更改內容的話是不會更新這個時間。

atime(accesstime): 當使用這個文件的時候就會更新這個時間

mtime(modification time): 當修改文件的內容數據的時候,就會更新這個時間,而更改權限或者屬性,mtime不會改變,這就是和ctime的區別。

五、鏈接超時

vim /usr/local/nginx/conf/nginx.conf
http {
......
keepalive_timeout 65 180;
client_header_timeout 80;
client_body_timeout 80;
......
}

HTTP有一個KeepAlive模式,它告訴web服務器在處理完一個請求後保持這個TCP連接的打開狀態。若接收到來自客戶端的其它請求,服務端會利用這個未被關閉的連接,而不需要再建立一個連接

KeepAlive 在一段時間內保持打開狀態,它們會在這段時間內占用資源,占用過多就會影響性能

keepalive_timeout
指定KeepAlive的超時時間(timeout)。指定每個TCP連接最多可以保持多長時間,服務器將會在這個時間後關閉連接。 Nginx的默認值是65秒,有些瀏覽器最多只保持 60 秒,所以可以設定為 60 秒。若將它設置為0,就禁止了keepalive 連接
第二個參數(可選的)指定了在響應頭Keep-Alive:timeout=time中的time值。這個頭能够讓一些瀏覽器主動關閉連接,這樣服務器就不必去關閉連接了。沒有這個參數,Nginx 不會發送 Keep-Alive 響應頭

client_header_timeout
客戶端向服務端發送一個完整的 request header 的超時時間。如果客戶端在指定時間內沒有發送一個完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)

client_body_timeout指定客戶端與服務端建立連接後發送 request body 的超時時間。如果客戶端在指定時間內沒有發送任何內容,Nginx 返回 HTTP 408(Request Timed Out)

六、更改進程數

cat /proc/cpuinfo | grep -c "physical id" #查看cpu核數
ps aux | grep nginx #查看nginx主進程中包含幾個子進程
vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; #修改為核數相同或者2倍
worker_cpu_affinity 01 10; #設置每個進程由不同cpu處理,進程數配2 4 6 8分別為0001 0010 0100 1000
systemctl restart nginx
壓力測試,看cpu能否處理這麼多連接數

七、網頁壓縮

7.1、修改配置文件

vim /usr/local/nginx/conf/nginx.conf
http {
......
gzip on; #取消注釋,開啟gzip壓縮功能
gzip_min_length 1k; #最小壓縮文件大小
gzip_buffers 4 64k; #壓縮緩沖區,大小為4個64k緩沖區
gzip_http_version 1.1; #壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)
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; #壓縮類型,錶示哪些網頁文檔啟用壓縮功能
......
}

7.2、修改網頁配置文件

7.3、測試

八、配置防盜鏈

8.1、修改配置文件

vim /usr/local/nginx/conf/nginx.conf
http {
......
server {
......
location ~* \.(png|gif|swf)$ {
valid_referers none blocked *.gxd.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.123.com/fangdao.jpg;
}
}
......
}
}

8.2、配置域名解析

echo "192.168.80.12 www.123.com" >> /etc/hosts
echo "192.168.80.12 www.aaa.com" >> /etc/hosts

8.3、測試

www.123.com

www.aaa.com

~* .(png|gif|swf)$ :這段正則錶達式錶示匹配不區分大小寫,以.jpg 或.gif 或.swf 結尾的文件

valid_referers :設置信任的網站,可以正常使用圖片

none:允許沒有http_refer的請求訪問資源(根據Referer的定義,它的作用是指示一個請求是從哪裏鏈接過來的,如果直接在瀏覽器的地址欄中輸入一個資源的URL地址,那麼這種請求是不會包含 Referer字段的),如http://www.123.com/1.png 我們使用 http://www.123com訪問顯示的圖片,可以理解成 http://www.123.com/1.png 這個請求是從 http://www.123.com這個鏈接過來的

blocked:允許不是http://開頭的,不帶協議的請求訪問資源

*.123.com:只允許來自指定域名的請求訪問資源,如 http://www.123.com

if語句:如果鏈接的來源域名不在valid_referers所列出的列錶中,$invalid_referer為true,則執行後面的操作,即進行重寫或返回 403 頁面

版权声明:本文为[wuwukai]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815211437129V.html