運維面試篇-----3.nginx基礎面試
1.什麼是nginx?
Nginx (engine x) 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器
Nginx作爲負載均衡服務器:Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務,也可以支持作爲 HTTP代理服務器對外進行服務。Nginx採用C進行編寫,不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。
FastCGI,簡單的負載均衡和容錯
2.常見的模塊化結構
模塊化的結構。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。
3.五種負載均衡模式:
1.roudrobin 輪詢
2.weight 權重
3.ip——hash 解決session問題 i固定服務器
4.url——hash請求分配不同機器
5.fair 根據後因愛響應時間來分發請求,響應時間短的分發請求多
4.中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等
5.模塊依賴性
gzip模塊需要 zlib 庫
rewrite模塊需要 pcre 庫
ssl 功能需要openssl庫
5.nginx特點:
Ø 跨平臺:可以在大多數Unix like 系統編譯運行。而且也有Windows的移植版本。
Ø 配置異常簡單:非常的簡單,易上手。
Ø 非阻塞、高併發連接:數據複製時,磁盤I/O的第一階段是非阻塞的。官方測試能支持5萬併發連接,實際生產中能跑2~3萬併發連接數(得益於Nginx採用了最新的epoll事件處理模型(消息隊列)。
Ø Nginx代理和後端Web服務器間無需長連接;
Ø Nginx接收用戶請求是異步的,即先將用戶請求全部接收下來,再一次性發送到後端Web服務器,極大減輕後端Web服務器的壓力。
Ø 發送響應報文時,是邊接收來自後端Web服務器的數據,邊發送給客戶端。
Ø 網絡依賴性低,理論上只要能夠ping通就可以實施負載均衡,而且可以有效區分內網、外網流量。
Ø 支持內置服務器檢測。Nginx能夠根據應用服務器處理頁面返回的狀態碼、超時信息等檢測服務器是否出現故障,並及時返回錯誤的請求重新提交到其它節點上。
Ø 採用Master/worker多進程工作模式
Ø 此外還有內存消耗小、成本低廉(比F5硬件負載均衡器廉價太多)、節省帶寬、穩定性高等特點
6.nginx優化:
1.nginx配置的優化:
唯一可調的時nginx.conf ,因爲fastcgi是爲nginx管理進程的工具,當客戶端請求到達nginx時,fastcgi選擇並連接一個進程,並將web server的返回信息推送
從進程數優化
》設置爲web server打開的最大worker進程數,設爲auto
》設置每個worker進程的最大連接數,設置大點
從鏈接設置
》設置客戶端鏈接超時時間,服務器在這個時間之後關閉鏈接,設置小點
》設置客戶端響應超時時間,倆次客戶端讀取操作的時間,設置小點
gzip壓縮形式的數據傳輸
》對於比較大的數據可以開啓gzip壓縮傳輸的形式傳輸
從緩存設置
》指定緩存的最大數目,緩存的時間
2.從集羣架構優化
做nginx的lvs集羣,實現負載
**************************************88
1. 隱藏nginx header裏面的版本信息
執行:curl –I 127.0.0.1會顯示nginx的版本信息
隱藏操作:在http標籤內加入“server_tokenoff”參數
2. 更改源碼隱藏軟件名稱及版本號
在nginx編譯安裝之前,先更改,之後再編譯安裝
cd /nginx-1.6.3/src/core
sed –n ’13,17p’ nginx.h裏面修改NGINX_VERSION
修改ngx_http_header_filter_module.c
sed –I ‘s#Server:nginx#Server:Apache#g’ ngx_http_header_filter_module.c
修改ngx_http_special_response.c
3 更改nginx默認用戶及用戶組(worker進程優化)
建立nginx用戶 useradd nginx–s/sbin/nologin –M
id nginx確認
在nginx.conf最外層上面配置usernginx;即可
也可以編譯的時候指定用戶
3. 讓worker進程使用普通用戶運行
爲master服務降權:使用非root跑nginx master
注意不能用80特權端口,前端nginx反向代理轉端口在啓動的時候指定配置文件
4. 配置nginx worker進程個數
nginx由master和worker進程組成,master進程相當於管理員,worker進程爲用戶提供服務一般設置爲cpu核數×2,用top按1查看cpu數量
修改nginx.conf配置文件第一行
worker_processes 4;
5. 根據cpu核數進行nginx進程優化
work_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
6nginx事件處理模型優化
nginx的連接處理機制在不同的操作系統上採用不同的IO模型,在linux下,nginx使用epoll的IO多路複用模型,windows下使用icop模型
具體配置:
events{
use epoll;
worker_connections 1024;
}
6. 調整nginx worker單個進程允許的客戶端最大連接數
這個值根據服務器性能和程序的內存來指定(一個進程啓動使用的內存根據程序確定)
events{
use epoll;
worker_connections 201480;
}
這個參數是單個進程的最大連接數,實際最大連接數公式爲:
Max_client=worker_processes*worker_connections
8配置nginx worker進程最大打開文件數
worker_rlimit_nofile 65535;
相當於系統ulimit –HSn,應該是總的
9開啓高效的文件傳輸模式
參數在http標籤設置爲:sendfileon;tcp_nopush on;(只有在sendfile開啓模式下有效
10設置連接超時時間
建立連接也是消耗資源的,我們一般斷掉那些連上的鏈接,但是不做事的
php網站建議短鏈接,java網站建議長連接
http標籤設置:
keepalive_timeout 60;
設置客戶端連接保持會話的超時時間,超過這個時間,服務器會關閉該鏈接
tcp_nodelay on;
打開tcp_nodelay,在包含keepalive參數纔有效
client_header_timeout 15;
請求頭超時
client_body_timeout 15
請求主體超時
send_timeout 15;
指定響應客戶端超時時間,這個超時時間僅僅限於兩個連接活動之間的時間,如果超過這個時間,客戶端沒有任何活動,nginx將會關閉連接
11.上傳文件大小限制
http{
client_max_body_size 10m;
}
12.fastcgi調優(配合php引擎動態服務)
cache讀取緩存區
buffer寫入緩存區
fastcgi是靜態服務和動態服務之間的一個接口
http {
#向fastcgi傳送請求的超時時間,這個值是指已經完成兩次握手後向fastcgi傳送請求的超時時間
fastcgi_send_timeout 240;
#指定鏈接到後端fastcgi的超時時間
fastcgi_connect_timeout 240;
#指定收fastcgi答應的超時時間,這個值是指已經完成兩次握手後接收fastcgi應答的超時時間、
fastcgi_read_timeout 240;
#指定讀取fastcgi應答第一部分需要用多大的緩衝區,這個值表示將使用1個64kb的
fastcgi_buffer_size 64kb的緩衝區讀取應答的第一部分(應答頭),可以設置爲fastcgi_buffers選定的的緩衝區大小
fastcgi_buffers 64k;
#指定本地需要用多少和多大的緩衝區來緩衝fastcgi,如果一個php腳本所產生的頁面大小爲256kb,那麼會分配4個64kb的緩存區來緩存,如果頁面大於256kb,那麼大於256kb的部分會緩存到fastcgi_temp指定的路徑中,但是這並不是好方法,因爲內存中的數據處理速度大於硬盤,一般這個值應該爲站點中php所產生的頁面大小的中間值,如果站點大部分腳本產生的頁面大小爲256kb,那麼可以把這個值設置爲“816k ”464k“等
fastcgi_buffers 4 64k;
#建議設置爲fastcgi_buffer的兩倍,繁忙時段的buffer
fastcgi_busy_buffers_size 128k;
##在寫入fastcgi_temp_path時將用多大的數據庫,默認值是fastcgi_buffers的兩倍,設置上述數值小時負載上來時可能報 502 badgateway
fastcgi_temp_file_write_size 128k;
##表示開啓fastcgi緩存爲其指定一個名稱,開啓緩存非常有用,可以有效降低cpu的負載,並防止502錯誤
fastcgi_cache oldboy_nginx;
#用來指定應答代碼的緩存時間,實例中的值表示將2000和302應答緩存一個小時,要和fastcgi_cache配合使用
fastcgi_cache_valid 200 302 1h;
#將301應答緩存一天
fastcgi_cache_valic 301 1d;
#將其他應答緩存爲1分鐘
fastcgi_cache_valid any 1m;
##請求的數量
fastcgi_cache_min_uses 1;
#定義緩存的路徑
fastcgi_cache_path
13.配置nginx gzip壓縮功能(重要)
使用的模塊ngx_http_gzip_module(nginx)
mod_deflate模塊(apaceh)
常用的壓縮對象:純文本(js,css,html),對於圖片,視頻,FLASH什麼的不壓縮,gzip——types參數控制,因爲壓縮佔用cpu
對應參數的含義如下:
gzip on;
#開啓壓縮功能
gzip_min_length 1k;
#設置允許壓縮的頁面最小字節數,頁面字節數從header頭頂content-length中獲取,默認值0,不管頁面多大都進行壓縮,建議設置成大於1k,如果小於1k可能會越壓越大。
gzip_buffers 4 32k;
#壓縮緩衝區大小,表示申請4個單位爲32k的內存作爲壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來存儲gzip壓縮結果。
gzip_http_version 1.1;
##壓縮版本擁有設置http協議版本
gzip_comp_level 9;
###壓縮比例,用來指定gzip壓縮比 1最小9最大 建議設置爲2.設置過大消耗cpu資源就多
gzip_types text/css test/xmlapplication/javascript;
##指定壓縮的類型,test/html類型總是會被壓縮
gzip_vary on;
##vary header支持,改選項可以讓前端的緩存服務器經過gzip壓縮的頁面,例如用squid緩存經過nginx壓縮的數據。
14.配置nginx expires緩存功能
對於圖片,css,js等元素更改的機會較少,特別是圖片,這時可以將圖片設置在瀏覽器本地緩存365天或更長
location ~.*\.(gif|jpg|png|bmp|swf)$
{
expires 3650d;
location ~.*\.(js|css)$
{
expires 30d;
}
expire功能優點
1expires可以降低網站購買的帶寬,節約成本
2同事提升用戶訪問體驗
3減輕服務端壓力
缺點:
被緩存的頁面或數據更新了,用戶看到的可能還是舊的內容,反而影響用戶體驗
解決辦法:
第一個縮短緩存時間,例如1天,不徹底,除非更新頻率大於1天
第二個對緩存的對象改名
a圖片,附件一般不會被用戶修改,如果用戶修改了,實際上也是更改文件名重新傳來而已
b網升級對於js,css元素,一般可以改名,把css,js,推送到cdn
15.nginx日誌相關優化與安全
1)配置日誌切割腳本並寫入計劃任務
cd /app/logs
mv www_access.log www_acess_$(date +%F –d-1day).log
/application/nginx/sbin/nginx –s reload
cat >>/var/spool/cron/root<<eof
00 00 * * * /bin/sh cut_nginx_log.sh>/dev/null2>&1
eof
2)不記錄不需要的訪問日誌
對於健康檢查或某些(圖片,js,css)日誌,一般不記錄日誌,因爲在統計pv時是按照頁面計算,而且日誌寫入頻繁會消耗磁盤IO降低服務器性能。
參數:access_log off;
1. 訪問日誌的權限設置
假設日誌目錄爲/app/logs,則授權
chown –R root.root /app/logs
chmod –R 700 /app/logs
16 nginx站點目錄及文件URL訪問控制(重要:防止惡意解析)
1)根據擴展名限制程序和文件訪問
作用:禁止目錄下指定文件被訪問,或者禁止指定目錄下所有內容被訪問
最佳應用場景:集羣的共享存儲,本來就應該只是資源文件,禁止指定擴展名程序被執行,php,sh,pl
nginx下禁止訪問資源目錄下的php程序文件,配置方法如下:
location ~^/images/.*\.(php|php5|.sh|.pl|.py)$
{
deny all;
if ($request_method !~^(GET|HEAD|POST)${
return 404;
2)nginx下配置禁止訪問.txt文件
location ~*\.(txt|doc)${
if (-f $request_filename){
###rewrite^^^^^
break;
}
location ~*\.(txt|doc)${
root /data/www;
deny all;
}
3)使用ngx_http_access_module限制ip訪問
17.配置nginx圖片及目錄防盜鏈
原理:是利用http referer日誌信息
當瀏覽器向web服務器發送請求的時候,一般會帶上referer,告訴服務器我從那個頁面鏈接過來的,服務器可以藉此獲得一下信息用於處理
location~*\.(jpg|gif|png|swf|flv|wma|asf|mp3|mmf|zip|rar)${
valid_referers none blocked *.etiantian.orgetiantian.org;
if ($invalid_referer){
rewrite ^/ http://www.xiaofeng886.org/img/nolink.jpg;
}
}
18.nginx錯誤頁面優雅顯示
參數:error_page 403 /403.html;
19 nginx 方爬蟲優化
20 使用tmpfs文件系統給/tmp
提高效率,部分程序切圖片操作臨時放到/tmp下,可以把tmp設置成內存文件系統,佔用內存空間的,就是從內存裏拿出一塊來當磁盤用
mount –t tmpfs –o size=16m tmpfs /tmp
21放DDos攻擊
1)控制單個ip的併發請求防止DOS攻擊
使用limit_conn_zone進行控制,控制單個IP或域名的訪問次數,限制連續訪問
者http標籤添加控制,可以添加多個
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $binary_name zone=perserver:10m;
server {
limit_conn perip 10;
limit_conn perserver 100;
2)限制單個的請求速率防止DOS的訪問速率
使用limit_req_zone進行控制,控制單個ip訪問速率
22爲web服務增加用戶身份驗證(適合內部機密網址)
nginx配置
location /phpmyadmin/{
auth_basic “oldboy training”;
auth_basic_user_file/application/nginx/conf/htpasswd;
}
創建密碼文件
htpasswd –cb /application/nginx/conf/htpasswdoldboy 123456
cat /application/nginx/conf/htpasswd
chmod 400 /application/nginx/conf/htpasswd
chown nginx /application/nginx/conf/htpasswd
23 讓nginx運行於監牢模式
創建普通用戶,將站點目錄以及nginx.conf放到普通用戶目錄,之後用/application/nginx/sbin/nginx –c
配置文件來啓服務
注意相關日誌所在路徑,指定pid,端口不能用80
useradd inca
cd /home/inca
mkdir conf www log
echo inca >www/index.html
error_log /home/inca/log/error.log
pid /home/inca/log/nginx.pid
指定站點目錄
日誌
端口不能用80
用普通用戶啓動
解決端口問題
Nginx (engine x) 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器
Nginx作爲負載均衡服務器:Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務,也可以支持作爲 HTTP代理服務器對外進行服務。Nginx採用C進行編寫,不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。
FastCGI,簡單的負載均衡和容錯
2.常見的模塊化結構
模塊化的結構。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。
3.五種負載均衡模式:
1.roudrobin 輪詢
2.weight 權重
3.ip——hash 解決session問題 i固定服務器
4.url——hash請求分配不同機器
5.fair 根據後因愛響應時間來分發請求,響應時間短的分發請求多
4.中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等
5.模塊依賴性
gzip模塊需要 zlib 庫
rewrite模塊需要 pcre 庫
ssl 功能需要openssl庫
5.nginx特點:
Ø 跨平臺:可以在大多數Unix like 系統編譯運行。而且也有Windows的移植版本。
Ø 配置異常簡單:非常的簡單,易上手。
Ø 非阻塞、高併發連接:數據複製時,磁盤I/O的第一階段是非阻塞的。官方測試能支持5萬併發連接,實際生產中能跑2~3萬併發連接數(得益於Nginx採用了最新的epoll事件處理模型(消息隊列)。
Ø Nginx代理和後端Web服務器間無需長連接;
Ø Nginx接收用戶請求是異步的,即先將用戶請求全部接收下來,再一次性發送到後端Web服務器,極大減輕後端Web服務器的壓力。
Ø 發送響應報文時,是邊接收來自後端Web服務器的數據,邊發送給客戶端。
Ø 網絡依賴性低,理論上只要能夠ping通就可以實施負載均衡,而且可以有效區分內網、外網流量。
Ø 支持內置服務器檢測。Nginx能夠根據應用服務器處理頁面返回的狀態碼、超時信息等檢測服務器是否出現故障,並及時返回錯誤的請求重新提交到其它節點上。
Ø 採用Master/worker多進程工作模式
Ø 此外還有內存消耗小、成本低廉(比F5硬件負載均衡器廉價太多)、節省帶寬、穩定性高等特點
6.nginx優化:
1.nginx配置的優化:
唯一可調的時nginx.conf ,因爲fastcgi是爲nginx管理進程的工具,當客戶端請求到達nginx時,fastcgi選擇並連接一個進程,並將web server的返回信息推送
從進程數優化
》設置爲web server打開的最大worker進程數,設爲auto
》設置每個worker進程的最大連接數,設置大點
從鏈接設置
》設置客戶端鏈接超時時間,服務器在這個時間之後關閉鏈接,設置小點
》設置客戶端響應超時時間,倆次客戶端讀取操作的時間,設置小點
gzip壓縮形式的數據傳輸
》對於比較大的數據可以開啓gzip壓縮傳輸的形式傳輸
從緩存設置
》指定緩存的最大數目,緩存的時間
2.從集羣架構優化
做nginx的lvs集羣,實現負載
**************************************88
1. 隱藏nginx header裏面的版本信息
執行:curl –I 127.0.0.1會顯示nginx的版本信息
隱藏操作:在http標籤內加入“server_tokenoff”參數
2. 更改源碼隱藏軟件名稱及版本號
在nginx編譯安裝之前,先更改,之後再編譯安裝
cd /nginx-1.6.3/src/core
sed –n ’13,17p’ nginx.h裏面修改NGINX_VERSION
修改ngx_http_header_filter_module.c
sed –I ‘s#Server:nginx#Server:Apache#g’ ngx_http_header_filter_module.c
修改ngx_http_special_response.c
3 更改nginx默認用戶及用戶組(worker進程優化)
建立nginx用戶 useradd nginx–s/sbin/nologin –M
id nginx確認
在nginx.conf最外層上面配置usernginx;即可
也可以編譯的時候指定用戶
3. 讓worker進程使用普通用戶運行
爲master服務降權:使用非root跑nginx master
注意不能用80特權端口,前端nginx反向代理轉端口在啓動的時候指定配置文件
4. 配置nginx worker進程個數
nginx由master和worker進程組成,master進程相當於管理員,worker進程爲用戶提供服務一般設置爲cpu核數×2,用top按1查看cpu數量
修改nginx.conf配置文件第一行
worker_processes 4;
5. 根據cpu核數進行nginx進程優化
work_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
6nginx事件處理模型優化
nginx的連接處理機制在不同的操作系統上採用不同的IO模型,在linux下,nginx使用epoll的IO多路複用模型,windows下使用icop模型
具體配置:
events{
use epoll;
worker_connections 1024;
}
6. 調整nginx worker單個進程允許的客戶端最大連接數
這個值根據服務器性能和程序的內存來指定(一個進程啓動使用的內存根據程序確定)
events{
use epoll;
worker_connections 201480;
}
這個參數是單個進程的最大連接數,實際最大連接數公式爲:
Max_client=worker_processes*worker_connections
8配置nginx worker進程最大打開文件數
worker_rlimit_nofile 65535;
相當於系統ulimit –HSn,應該是總的
9開啓高效的文件傳輸模式
參數在http標籤設置爲:sendfileon;tcp_nopush on;(只有在sendfile開啓模式下有效
10設置連接超時時間
建立連接也是消耗資源的,我們一般斷掉那些連上的鏈接,但是不做事的
php網站建議短鏈接,java網站建議長連接
http標籤設置:
keepalive_timeout 60;
設置客戶端連接保持會話的超時時間,超過這個時間,服務器會關閉該鏈接
tcp_nodelay on;
打開tcp_nodelay,在包含keepalive參數纔有效
client_header_timeout 15;
請求頭超時
client_body_timeout 15
請求主體超時
send_timeout 15;
指定響應客戶端超時時間,這個超時時間僅僅限於兩個連接活動之間的時間,如果超過這個時間,客戶端沒有任何活動,nginx將會關閉連接
11.上傳文件大小限制
http{
client_max_body_size 10m;
}
12.fastcgi調優(配合php引擎動態服務)
cache讀取緩存區
buffer寫入緩存區
fastcgi是靜態服務和動態服務之間的一個接口
http {
#向fastcgi傳送請求的超時時間,這個值是指已經完成兩次握手後向fastcgi傳送請求的超時時間
fastcgi_send_timeout 240;
#指定鏈接到後端fastcgi的超時時間
fastcgi_connect_timeout 240;
#指定收fastcgi答應的超時時間,這個值是指已經完成兩次握手後接收fastcgi應答的超時時間、
fastcgi_read_timeout 240;
#指定讀取fastcgi應答第一部分需要用多大的緩衝區,這個值表示將使用1個64kb的
fastcgi_buffer_size 64kb的緩衝區讀取應答的第一部分(應答頭),可以設置爲fastcgi_buffers選定的的緩衝區大小
fastcgi_buffers 64k;
#指定本地需要用多少和多大的緩衝區來緩衝fastcgi,如果一個php腳本所產生的頁面大小爲256kb,那麼會分配4個64kb的緩存區來緩存,如果頁面大於256kb,那麼大於256kb的部分會緩存到fastcgi_temp指定的路徑中,但是這並不是好方法,因爲內存中的數據處理速度大於硬盤,一般這個值應該爲站點中php所產生的頁面大小的中間值,如果站點大部分腳本產生的頁面大小爲256kb,那麼可以把這個值設置爲“816k ”464k“等
fastcgi_buffers 4 64k;
#建議設置爲fastcgi_buffer的兩倍,繁忙時段的buffer
fastcgi_busy_buffers_size 128k;
##在寫入fastcgi_temp_path時將用多大的數據庫,默認值是fastcgi_buffers的兩倍,設置上述數值小時負載上來時可能報 502 badgateway
fastcgi_temp_file_write_size 128k;
##表示開啓fastcgi緩存爲其指定一個名稱,開啓緩存非常有用,可以有效降低cpu的負載,並防止502錯誤
fastcgi_cache oldboy_nginx;
#用來指定應答代碼的緩存時間,實例中的值表示將2000和302應答緩存一個小時,要和fastcgi_cache配合使用
fastcgi_cache_valid 200 302 1h;
#將301應答緩存一天
fastcgi_cache_valic 301 1d;
#將其他應答緩存爲1分鐘
fastcgi_cache_valid any 1m;
##請求的數量
fastcgi_cache_min_uses 1;
#定義緩存的路徑
fastcgi_cache_path
13.配置nginx gzip壓縮功能(重要)
使用的模塊ngx_http_gzip_module(nginx)
mod_deflate模塊(apaceh)
常用的壓縮對象:純文本(js,css,html),對於圖片,視頻,FLASH什麼的不壓縮,gzip——types參數控制,因爲壓縮佔用cpu
對應參數的含義如下:
gzip on;
#開啓壓縮功能
gzip_min_length 1k;
#設置允許壓縮的頁面最小字節數,頁面字節數從header頭頂content-length中獲取,默認值0,不管頁面多大都進行壓縮,建議設置成大於1k,如果小於1k可能會越壓越大。
gzip_buffers 4 32k;
#壓縮緩衝區大小,表示申請4個單位爲32k的內存作爲壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來存儲gzip壓縮結果。
gzip_http_version 1.1;
##壓縮版本擁有設置http協議版本
gzip_comp_level 9;
###壓縮比例,用來指定gzip壓縮比 1最小9最大 建議設置爲2.設置過大消耗cpu資源就多
gzip_types text/css test/xmlapplication/javascript;
##指定壓縮的類型,test/html類型總是會被壓縮
gzip_vary on;
##vary header支持,改選項可以讓前端的緩存服務器經過gzip壓縮的頁面,例如用squid緩存經過nginx壓縮的數據。
14.配置nginx expires緩存功能
對於圖片,css,js等元素更改的機會較少,特別是圖片,這時可以將圖片設置在瀏覽器本地緩存365天或更長
location ~.*\.(gif|jpg|png|bmp|swf)$
{
expires 3650d;
location ~.*\.(js|css)$
{
expires 30d;
}
expire功能優點
1expires可以降低網站購買的帶寬,節約成本
2同事提升用戶訪問體驗
3減輕服務端壓力
缺點:
被緩存的頁面或數據更新了,用戶看到的可能還是舊的內容,反而影響用戶體驗
解決辦法:
第一個縮短緩存時間,例如1天,不徹底,除非更新頻率大於1天
第二個對緩存的對象改名
a圖片,附件一般不會被用戶修改,如果用戶修改了,實際上也是更改文件名重新傳來而已
b網升級對於js,css元素,一般可以改名,把css,js,推送到cdn
15.nginx日誌相關優化與安全
1)配置日誌切割腳本並寫入計劃任務
cd /app/logs
mv www_access.log www_acess_$(date +%F –d-1day).log
/application/nginx/sbin/nginx –s reload
cat >>/var/spool/cron/root<<eof
00 00 * * * /bin/sh cut_nginx_log.sh>/dev/null2>&1
eof
2)不記錄不需要的訪問日誌
對於健康檢查或某些(圖片,js,css)日誌,一般不記錄日誌,因爲在統計pv時是按照頁面計算,而且日誌寫入頻繁會消耗磁盤IO降低服務器性能。
參數:access_log off;
1. 訪問日誌的權限設置
假設日誌目錄爲/app/logs,則授權
chown –R root.root /app/logs
chmod –R 700 /app/logs
16 nginx站點目錄及文件URL訪問控制(重要:防止惡意解析)
1)根據擴展名限制程序和文件訪問
作用:禁止目錄下指定文件被訪問,或者禁止指定目錄下所有內容被訪問
最佳應用場景:集羣的共享存儲,本來就應該只是資源文件,禁止指定擴展名程序被執行,php,sh,pl
nginx下禁止訪問資源目錄下的php程序文件,配置方法如下:
location ~^/images/.*\.(php|php5|.sh|.pl|.py)$
{
deny all;
if ($request_method !~^(GET|HEAD|POST)${
return 404;
2)nginx下配置禁止訪問.txt文件
location ~*\.(txt|doc)${
if (-f $request_filename){
###rewrite^^^^^
break;
}
location ~*\.(txt|doc)${
root /data/www;
deny all;
}
3)使用ngx_http_access_module限制ip訪問
17.配置nginx圖片及目錄防盜鏈
原理:是利用http referer日誌信息
當瀏覽器向web服務器發送請求的時候,一般會帶上referer,告訴服務器我從那個頁面鏈接過來的,服務器可以藉此獲得一下信息用於處理
location~*\.(jpg|gif|png|swf|flv|wma|asf|mp3|mmf|zip|rar)${
valid_referers none blocked *.etiantian.orgetiantian.org;
if ($invalid_referer){
rewrite ^/ http://www.xiaofeng886.org/img/nolink.jpg;
}
}
18.nginx錯誤頁面優雅顯示
參數:error_page 403 /403.html;
19 nginx 方爬蟲優化
20 使用tmpfs文件系統給/tmp
提高效率,部分程序切圖片操作臨時放到/tmp下,可以把tmp設置成內存文件系統,佔用內存空間的,就是從內存裏拿出一塊來當磁盤用
mount –t tmpfs –o size=16m tmpfs /tmp
21放DDos攻擊
1)控制單個ip的併發請求防止DOS攻擊
使用limit_conn_zone進行控制,控制單個IP或域名的訪問次數,限制連續訪問
者http標籤添加控制,可以添加多個
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $binary_name zone=perserver:10m;
server {
limit_conn perip 10;
limit_conn perserver 100;
2)限制單個的請求速率防止DOS的訪問速率
使用limit_req_zone進行控制,控制單個ip訪問速率
22爲web服務增加用戶身份驗證(適合內部機密網址)
nginx配置
location /phpmyadmin/{
auth_basic “oldboy training”;
auth_basic_user_file/application/nginx/conf/htpasswd;
}
創建密碼文件
htpasswd –cb /application/nginx/conf/htpasswdoldboy 123456
cat /application/nginx/conf/htpasswd
chmod 400 /application/nginx/conf/htpasswd
chown nginx /application/nginx/conf/htpasswd
23 讓nginx運行於監牢模式
創建普通用戶,將站點目錄以及nginx.conf放到普通用戶目錄,之後用/application/nginx/sbin/nginx –c
配置文件來啓服務
注意相關日誌所在路徑,指定pid,端口不能用80
useradd inca
cd /home/inca
mkdir conf www log
echo inca >www/index.html
error_log /home/inca/log/error.log
pid /home/inca/log/nginx.pid
指定站點目錄
日誌
端口不能用80
用普通用戶啓動
解決端口問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.