Nginx經驗總結(持續更新)
阿新 • • 發佈:2019-02-20
1. post方法請求靜態檔案
預設情況下,web伺服器都不允許post方法請求靜態檔案,會返回響應403 Not Allowed。但是有些時候確實有這種需求。可以通過配置檔案來改變這種設定:在需要處理靜態檔案的location裡這樣配置即可,location /static/ {
root /path/to/files/;
error_page 405 =200 $uri;
}
2. Nginx預設一次只能傳送50個子請求(subrequest)
在nginx原始碼中,src/http/ngx_http_request.h檔案中:在使用Openresty時,可以向configure指令碼傳參設置這個限制, ./configure --with-cc-opt="-D NGX_HTTP_MAX_SUBREQUESTS=250"#define NGX_HTTP_MAX_SUBREQUESTS 50
3. Nginx location匹配規則
匹配順序: a. 字串匹配,和location塊的順序無關,根據uri匹配所有的location,從而得到一個匹配度最大的location。 b. 正則匹配,按照location塊的順序從前向後,如果找到匹配的location,則直接由該location處理請求。如果所有的location都不匹配,則由在字串匹配中,匹配度最大的location處理。 匹配規則: = /uri/ ——字串精確匹配 ^~ /uri/ ——字串字首匹配 ~ /uri/ ——大小寫區分的正則匹配 ~* /uri/ ——大小寫不區分的正則匹配 @ /uri/ ——命名location,只用於內部重定向請求 其中,如果=和^~匹配成功之後會立即停止搜尋,即不再進行正則匹配。4. 監控Nginx的狀態
./configure --with-http_stub_status_modules
nginx的配置:
location /nginx_status {
# copied from http://blog.kovyrin.net/2006/04/29/monitoring-nginx-with-rrdtool/
stub_status on;
access_log off;
allow SOME.IP.ADD.RESS;
deny all;
}
然後通過瀏覽器訪問localhost/nginx_status,瀏覽器顯示Nginx的狀態
Active connections: 291 server accepts handled requests 16630948 16630948 31070465 Reading: 6 Writing: 179 Waiting: 106
5. Nginx啟用aio
預設Nginx是沒有開啟aio的,需要在配置編譯時,加上相應選項否則啟動Nginx會報錯unknown directive “aio”。./configure --with-file-aio
6. 限制請求內容的大小
指令:client_max_body_size,用於設定這個值,預設是1m。context可以是http,server或者location。7. 通過echo模組合併靜態檔案請求
正常html中包含多個js檔案或者css檔案,那麼瀏覽器需要多次http請求才能完成這些檔案的載入。比如html檔案:<html>
<head>
<script type='text/javascript' src='/static/a.js'></script>
<script type='text/javascript' src='/static/b.js'></script>
<script type='text/javascript' src='/static/c.js'></script>
……
</html>
那麼就需要3次請求。下面介紹echo模組實現請求合併。先修改html:<html>
<head>
<script type='text/javascript' src='/merge?/static/a.js&/static/b.js&/static/c.js'></script>
……
</html>
nginx配置檔案:location /static/ {
root /home/www/doc_root;
}
location /merge {
default_type 'text/javascript';
echo_foreach_split '&' $query_string; # 將查詢字串以&分割
echo_location_async $echo_it; # 傳送子請求到$echo_it對應的location
echo;
echo_end;
}
通過這種方式可以有效減少客戶端請求,降低伺服器端的壓力。8. nginx開啟gzip
gzip on; # 開啟gzip,預設關閉
gzip_comp_level 5; # 壓縮級別,1-9,級別越高壓縮率越高,但是相應的耗cpu
gzip_min_length 1025; # 當響應內容大小大於多少bytes後使用gzip
gzip_types text/plain application/x-javascript application/json text/javascript text/css # 對於什麼型別的內容使用gzip