Nginx的優化、安全與防盜鏈實例詳解
目錄
- 1.Nginx的頁面優化
- 1.1 Nginx的網頁壓縮
- 1.2 配置Nginx的圖片緩存
- 1.3 Nginx的連接超時設置
- 1.4 Nginx的并發設置
- 2.Nginx的頁面安全
- 2.1 查看Nginx版本的方式
- 方式一:curl模擬訪問獲取
- 方式二:瀏覽器訪問查看
- 2.2 隱藏版本號
- 3.Nginx的日志分割
- 4.Nginx防盜鏈
- 4.1 盜鏈的過程
- 4.2 Nginx防盜鏈的設置
- 5.fpm參數優化
- 總結
1.Nginx的頁面優化
1.1 Nginx的網頁壓縮
在Nginx的ngx_http_gzip_module壓縮模塊提供對文件內容壓縮的功能。進行相關的配置修改,就能實現Nginx頁面的壓縮,達到節約帶寬,提升用戶訪問速度
vim /usr/local/nginx/conf/nginx.confhttp {..........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;}
重啟服務,進行訪問測試:
1.2 配置Nginx的圖片緩存
當Nginx將網頁數據返回給客戶端后,可設置緩存的時間,以方便在日后進行相同內容的請求時直接返回,避免重復請求,加快了訪問速度。
一般針對靜態網頁設置,對動態網頁不設置緩存時間。
vim /usr/local/nginx/conf/nginx.confhttp {................. location ~* \.(gif|jpg|jepg|bmp|ico)$ { root html; expires 1d; }}
重啟服務,測試訪問:
1.3 Nginx的連接超時設置
- HTTP有一個KeepAlive模式,它告訴web服務器在處理完一個請求后保持這個TCP連接的打開狀態。若接收到來自同一客戶端的其它請求,服務端會利用這個未被關閉的連接,而不需要再建立一個連接。
- KeepAlive 在一段時間內保持打開狀態,它們會在這段時間內占用資源。占用過多就會影響性能。
- 在企業網站中,為了避免同一個客戶長時間占用連接,造成資源浪費,可設置相應的連接超時參數,實現控制連接訪問時間。可以修改配置文件 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的超時時間(timeout) 。指定每個TCP連接最多可以保持多長時間,服務器將會在這個時間后關閉連接。
- Nginx的默認值是65秒,有些瀏覽器最多只保持60秒,所以可以設定為60秒。若將它設置為0,就禁止了keepalive 連接。
- 第二個參數(可選的)指定了在響應頭Keep-Alive: timeout=t ime中的time值。這個頭能夠讓一 些瀏覽器主動關閉連接,這樣服務器就不必去關閉連接了。沒有這個參數,Nginx 不會發送Keep- Alive 響應頭。
重啟服務,訪問測試:
1.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的版本號
2.1 查看Nginx版本的方式
方式一:curl模擬訪問獲取
[root@localhost ~]#curl -I 192.168.73.105
方式二:瀏覽器訪問查看
火狐訪問瀏覽器 ,F12查看網絡信息
2.2 隱藏版本號
方法一:修改配置文件,關閉版本號
vim /usr/local/nginx/conf/nginx.conf http { include mime.types; default_type application/octet-stream; server_tokens off; #添加這一行,關閉版本號 ...... }
測試結果:
方法二:修改源碼文件中的版本號,重新編譯安裝
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 /optvim 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 -e0 1 * * * /opt/cutlogs.sh
4.Nginx防盜鏈
4.1 盜鏈的過程
Nginx盜鏈的過程與apache一致,均是通過網頁瀏覽,將網站圖片重定向到自己的網站上
4.2 Nginx防盜鏈的設置
修改主配配置文件,添加防盜鏈設置
vim /usr/local/nginx/conf/nginx.confhttp {...........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; }}............}...............}
在 /var/local/nginx/html 下放置好error.png
進行盜鏈測試
盜鏈主機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
總結
到此這篇關于Nginx的優化、安全與防盜鏈的文章就介紹到這了,更多相關Nginx優化 安全與防盜鏈內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
