Nginx筆記

  Nginx:反向代理服務器,反向代理,負載均衡,支持高併發,php

缺點:只能用於靜態頁面,不能編譯java代碼,如用jsp須要請求Tomcat,和Tomcat關聯。
Nginx客戶端不去請求真正的服務器,而是請求Nginx服務器並代理請求,經過必定機率保定均勻的分發給服務器。
Nginx依賴於底層的Liunx系統.
Nginx默認端口是80
Nginx的開發學習模塊
配置Nginx集羣
vi /etc/nginx/nginx.conf
upstream 集羣名稱:tomcat{
    server 192.168.21.140:8080 權重:weight=1; 
    server 192.168.21.144:8080 權重:weight=3;
}
nginx - tc /etc/nginx/nginx.conf 測試是否成功
/etc/nginx/conf.d/default.conf->proxy_pass http://tomcat要代理的路徑
cd default.conf
nginx -s reload -c /etc/nginx/nginx.conf 從新加載nginx服務器
 
shutdown.sh中止服務器
 
Nginx使用緣由
緣由一.IO多路複用
 什麼是IO多路複用?
  多個描述符的IO操做都能在一個線程內併發交替地順序完成,這就是IO多路複用,這裏的「複用」指的  是 複用同一個線程。
 IO多路複用的實現方式select poll epoll。
  select不斷遍歷效率低下有限制。
  epoll效率比select高沒有限制。
 
緣由二.輕量級
 功能模塊少:只保留了核心模塊的代碼
 代碼模塊化:易讀,二次改進
 
緣由三.CPU親和(affinity)
 是一種把CPU核心的Nginx工做進程綁定方式,把每一個worker進程固定在一個CPU上執行,
 減小切換CPU的cache miss,得到更好的性能。
 
緣由四:採用sendfile
 sendfile處理靜態文件有優點
 把全部的文件傳輸指經過內核空間傳遞給Socket響應給用戶
 
一.Nginx快速搭建與基本參數使用
Mainline version 開發版
Stable version 穩定版
Legacy version 歷史版本
 
Nginx的安裝步驟:
複製yum源
ls
vim /etc/yum
vim /etc/yum.repos.d/
vim /etc/yum.repos.d/nginx.repo
把替換掉以前的
修改centos/7版本
保存
yum list |grep nginx 顯示一下
yum install nginx 快速安裝
ng
nginx -v 查看版本
nginx -V 查看參數
--------------------------------
二.基本參數使用
 1.安裝目錄
rpm -q| nginx 安裝目錄
rpm -ql nginx 登陸服務器
 
/etc/logrotate.d/nginx 日誌切割
/etc/nginx/nginx.conf 主要配置文件,啓動會讀
/etc/nginx/conf.d/default.conf 安裝會默認server加載的配置
/etc/nginx/fastcgi_params 
/etc/nginx/uwsgi_params cig和fastcgi相關配置
/etc/nginx/scgi_params
/etc/nginx/mime.types 
 
Nginx安裝模塊
/usr/lib64/nginx/modules 
/etc/nginx/modules
 
Nginx的命令
/usr/sbin/nginx 服務啓動和關閉
/usr/sbin/nginx-debug 調試分析
/usr/share/man/man8/nginx.8.gz 幫助文檔
 
/var/cache/nginx Nginx的緩存目錄,Nginx除了作http代理服務,也能夠作緩存服務!!!
/var/log/nginx Nginx的日誌目錄
 
 2.安裝編譯參數
 
 3.Nginx基本配置語法
 
 vi nginx.conf Nginx主目錄
 cd /etc/nginx/conf.d/
 vi default.conf
 一個server能夠有多個location
 location / {
  root /usr/share/nginx/html; 請求的路徑
  index index.html index.htm; 默認訪問的頁面
 }
 systemctl restart nginx.service
 systemctl reload nginx.service重啓Nginx服務
 
 1.HTTP請求
  curl http://www.imooc.com
  curl -v http://www.imooc.com > /dev/null 查看被隱藏request和response的內容
 2.Nginx日誌類型
  包括:error.log access_log
  依賴於log_format的配置,log_format有一些變量組成
  /etc/nginx/nginx.conf
  tail -f /var/log/nginx/error.lof 
  tail -n 200 /var/log/nginx/access.log
 3.Nginx變量
  HTTP請求變量 arg_PAREMETER,http_HEADER,sent_http_HEADER
  內置變量 Nginx內置的如:$remote_addr
...等
 
  自定義變量 
 4.Nginx模塊
  官方模塊:
Nginx的客戶端狀態模塊, 如:location /mystatus {
      stub_status;
       }
目錄中選中一個隨機頁面:location /{
   root /opt/app/code;
random_index on;
#index index.html index.htm;
     }
HTTP內容替換如:location / {
   root /opt/app/code;
   index index.html index.htm;
   sub_filter'<a>imooc'要替換的 '<a>IMOOC'替換後的;
                           sub_filter_once off;替換全部叫imooc
}
 
注在/etc/nginx/conf.d/default.conf配置!
保存
模塊配置完後檢查語法是否正確:nginx -t -c /etc/nginx/nginx.conf
從新加載:nginx -s reload -c /etc/nginx/nginx.conf
ip a/ifconfig 查看ip地址,複製到瀏覽器 如116.65.103.228//mystatus。
  第三方模塊
 
  5.Nginx的請求限制
   TCP鏈接在http請求之上,經過FIN和ACK保持鏈接的狀態。
   HTTP請求創建在一次TCP鏈接基礎上。
   一次TCP請求至少產生一次HTTP請求。
   鏈接頻率限制
     語法: Syntax:limit_conn_zone key zone=name:size;
    Default:-
    Context:http
 
    Syntax:limit_conn zone number;
    Default:-
    Context:http,server,location
   請求頻率限制
     語法: Syntax:limit_req_zone key zone=name:size rate=rate;
            Default:-
        Context:http
 
    Syntax:limit_req zone=name [burst=number][nodelay];
    Default:-
    Context:http,server,location
   模塊配置完後檢查語法是否正確:nginx -t -c /etc/nginx/nginx.conf
   從新加載:nginx -s reload -c /etc/nginx/nginx.conf
   壓力測試工具測試請求和鏈接:ab -n 40 -c 20 http://本地ip地址/1.html
   注:在default.conf裏寫,上面的key寫的是$binary_remtoe_addr:表示客戶端的地址,
 
  6.Nginx的訪問控制
    ip138查詢本身的公網ip
    1.IP的訪問控制:http_access_module
      語法:location ~ ^/admin.html{
       root /opt/app/code;
       allow 222.128.189.0/24; 只容許該id訪問  /24是ip段
          deny all;        不容許全部
       index  index.html index.htm;
         }
      http_access_module侷限性解決方式:
    1.geo模塊,2.經過HTTP自定義變量傳遞,3.http_x_forward_for,該方式客戶端能夠改寫,不安全
 
    2.用戶的信任登陸: http_auth_basic_module
        rpm -qf /usr/bin/htpasswd
  yum install httpd-tools -y
  htpasswd -c ./auth_mod^C
cd ..
htpasswd -c ./auth_conf jeson
cd conf.d/
   vi /auth_mod.conf
location /admin.html{
     root /opt/app/code;
     auth_basic "Auth access test!";
     auth_basic_user_file /etc/nginx/auth_conf;
     index  inex.html index.htm;
}
模塊配置完後檢查語法是否正確:nginx -t -c /etc/nginx/nginx.conf
        從新加載:nginx -s reload -c /etc/nginx/nginx.conf
這時訪問頁面!!!
 
   http_auth_basic_module侷限性解決方式:
  1.Nginx結合LUA實現高效驗證
  2.Nginx和LDAP打通,利用nginx-auth-ldap模塊
  
進階學習
  一.靜態資源WEB服務
     簡單可分兩類靜態請求和動態請求:
      1.服務端動態請求須要通過服務端的解釋器進行一些比較複雜的邏輯運算,而後那對應的數據進行指示性的封裝,返回給用戶
      2.靜態請求偏偏相反,像一些TXT文件,FLV/MPEG視頻,PNG/GIF圖片,HTML/CSS/JS瀏覽器端渲染,都是靜態資源
     靜態資源服務場景CDN:傳輸延遲最小化,分發網絡技術
3.文件讀取
  Syntax:sendfile on|off;
  Default:sendfile off;
  Context:http,server,location,if in location
    引讀:-with-file-aio異步文件讀取
4.配置語法-tcp_noputh
  Syntax:tcp_nopush no|off;
  Default:tcp_nopush off;
  Context:http,server,location
  做用:sendfile開啓的狀況下,提升網絡包的傳輸效率
5.配置語法-tcp_nodelay
  Syntax:tcp_nodelay no|off;
  Default:tcp_nodelay no;
  Context:http,server,location
  做用:keepalive鏈接下,提升網絡包的傳輸實時性
6.配置語法-壓縮
  Syntax:gzip on|off;
  Default:gzip off;
  Context:http,server,location,if in location
  做用:壓縮傳輸
          Syntax:gzip_comp_level level;
  Default:gzip_comp_level 1;
  Context:http,server,location
  做用:壓縮比例 
7.擴展Nginx壓縮模塊
  http_gzip_static_module-預讀gzip功能
  http_gunzip_module-應該支持gunzip的壓縮方式
 
在vi /etc/nginx/conf.d/static_server.conf下配置壓縮語法
     
   瀏覽器緩存
 HTTP協議定義的緩存機制 如:Expires;Cache-controll等
 效驗過時機制 從Cache-control(max-age)裏檢查聲明週期是否到期
 
客戶端添加Cache-Control,Expires驗證是否過時語法:
  Syntax:expires [modified] time;
  expires epoch | max | off;
  Default:expires off;
  Context:http,server,location,if in location
          注:Cache-Control是瀏覽器返回的。
    
     跨域訪問
瀏覽器默認禁止跨域訪問
配置語法:
  Syntax:add_header name value [always];
  Default:-;
  Context:http,server,location,if location
注:瀏覽器會判斷頭信息HTTPResponse裏邊Access-Control-Allow-Origirn,判斷服務端是否容許訪問
實際寫法如:add_header Access-Control-Allow-Origin http://www.jesonc.com  或加*意思容許全部站點訪問;
   add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;   
    把瀏覽器中Disable cache選中,做用清理客戶端瀏覽器緩存,以防緩存影響開發和調試。
#號做用註釋,
     防盜鏈
目的:防止資源被盜用。
區別哪些請求是非正常的用戶請求
http_refer防盜鏈配置模塊:
location / {
   valid_referers none blocked 116.62.103.228;注:也可使用匹配的寫法如:~/google./;
   依次意思:容許哪些refer訪問,表示那些沒有帶refer,refer不是標準的http://協議這種方式進來的,表示要訪問的ip
       if($invalid_referer){//判斷是否爲1,如是1 返回403
                 return 403;
            }
}
curl -I http://116.62.103.228/wei.png做用:經過命令請求頭信息
curl -I "http://www.baidu.com" -I http://116.62.103.228/wei.png:像訪問百度的有設防盜鏈會返回403
  二.代理服務
Http     Http server
ICMP/POP/IMAP ->Nginx->   Mail server
HTTPS     Http server
RTMp     media server
區別在於代理的對象不同
正向代理代理的對象是客戶端
反向代理代理的對象是服務端
配置語法:
  Syntax:proxy_pass URL;
  Default:-;
  Context:http,server,location,limit_except
  所支持的協議:
  http://localhost:8080/uri/
  https://192.168.1.1:8080/uri/
  http://unix:/tmp/backend.socket:/uri/;
反向代理使用方式
  proxy_pass http://127.0.0.1:8080;
查看本機由於Nginx所啓用的端口:netstat -luntp|grep nginx
正向代理使用方式
  location / {
     if($http_x_forwarded_for !~* "^116.62.103.228"){
    return 403;
      }
  }
緩衝區語法:
  Syntax:proxy_buffering no | off;
  Default:proxy_buffering on;
  Context:http,server,location;
  擴展:proxy_buffer_size,proxy_buffers,proxy_busy_buffers_size
  減小了io的損耗
跳轉重定向語法:
  Syntax:proxy_redirect default;
  proxy_redirect off; proxy_redirect redirect replacement;
  Default:proxy_redirect default;
  Context:http,server,location;
頭信息語法:
  Syntax:proxy_set_header field value;
  Default:proxy_set_header Host $proxy_host;
  Context:http,server,location;
  擴展:proxy_hide_header,proxy_set_body
超時語法:
  Syntax:proxy_connect_timeout time;
  Default:proxy_connect_timeout 60s;
  Context:http,server,location;
  Nginx做爲代理到後端服務器中間的一個鏈接超時
nginx -V查看緩衝區臨時文件存放位置
 
  三.負載均衡調度器SLB
GSLB全局性負載均衡
SLB局部負載均衡
Nginx就是典型的七層負載均衡SLB
分爲四層負載均衡和七層負載均衡
  四層負載均衡:性能塊,只須要底層進行應用處理,進行包轉發。
  七層負載均衡:應用層,http信息的改寫,
配置語法:
  Syntax: upstream name{}
  Default:-
  Context:http
upstream舉例
  upstream 集羣名稱:tomcat{
         server 192.168.21.140:8080 權重:weight=1; 
             server 192.168.21.144:8080 權重:weight=3;
  }
  記得在哪有引用這個集羣名稱
後端服務器在負載均衡調度中的狀態
  down -> 當前的server暫時不參與負載均衡
  backup -> 預留的備份服務器
  max_fails -> 容許請求失敗的次數
  fail_timeout -> 通過max_fails失敗後
  max_conns -> 限制最大的接收的鏈接
關閉端口號:iptables -I INPUT -p tcp --dport 8003 -j DROP
 
        調度算法
  論詢 -> 按時間順序逐一分派到不一樣的後端服務器
  加權輪詢 -> weight值越大,分配到的訪問概率越高
  ip_hash -> 每一個請求按訪問ip的hash結果分配,這樣來自同一個ip固定訪問一個後端服務器
  least_conn -> 最少連接數,那個機器鏈接數少就分發 注:這個和加權輪詢差很少
  url_hash -> 按照訪問的url的hash結果來分配請求,是每一個url定向到同一個後端服務器
  hash關鍵數值 -> hash自定義的key
  url_hash:
    Syntax:hash key [consistent];
    Default:-
    Context:upstream
    This directive appeared in version 1.7.2.
    編寫實例:hash $request_uri;
 
  四.動態緩存
 proxy_cache配置語法:
    Syntax:proxy_cache_path path [levels=levels]
    [use_temp_path=on|off] keys_zone=name:size [inactive=time]
    [max_size=size] [manager_files=number] [manager_sleep=time]
    [manager_threshold=time] [loader_files=number]
    [loader_sleep=time] [loader_threshold=time] [purger=on|off]
    [purger_files=number] [purger_sleep=time]
    [purger_threshold=time];
    Default:-
    Context:http
       
    Syntax:proxy_cache zone | off;
    Default:proxy_cache off;
    Context:http,server,location
 緩存過時週期配置
    Syntax:proxy_cache_valid [code ...] time;
    Default:-
    Context:http,server,location
 緩存的維度配置
    Syntax:proxy_cache_key string;
    Dafault:proxy_cache_key $scheme$proxy_host$request_uri;
    Context:http,server,location
 如何清理指定緩存?
    1.rm -rf緩存目錄內容
    2.第三方擴展模塊ngx_cache_purge指定緩存
 如何讓部分頁面不緩存?
    if($request_uri ~ ^/(url3|login|register|password/reset)){
  set $cookie_nocache 1;
       }
    Syntax:proxy_no_cache string ...;
    Default:-
    Context:http,server,location
 大文件分片請求
    Syntax:slice size;
    Default:slice 0;
    Context:http,server,location
    前端請求過來經過分片
    優點:
每一個子請求收到的數據都會造成一個獨立文件,一個請求斷了,其它請求不受影響。
    缺點:
當文件很大或slice很小的時候,可能會致使文件描述符耗盡等狀況。
 
深度學習
  一.動靜分離
     經過中間件將動態請求和靜態請求分離。
對服務端而言減小沒必要要請求的消耗,不須要通過後端cup進行邏輯運算
對客戶端而言不用通過後端,從而減小請求的延時
     Nginx的rewrite規則
實現url從新以及重定向
URL訪問跳轉,支持開發設計
SEO優化
維護:後臺維護,流量轉發等。
安全。
     配置語法:
Syntax:rewrite regex replacement[flag];
Defaule:-
Context:server,location,if
rewrite ^(.*)$ /pages/maintain.html break;
     正則表達式
. -> 匹配除換行符之外的任意字符
? -> 重複0次或1次
+ -> 重複1次或更屢次
* -> 最少連接數,那個機器鏈接數少就分發
/d -> 匹配數字
      ^ -> 匹配字符串的開始
$ -> 匹配字符串的介紹
{n} -> 重複n次
{n,} -> 重複n次或更屢次
[c] -> 匹配單個字符c
[a-z] -> 匹配a-z小寫字母的任意一個
-> 轉義字符
rewrite index.jsp$ /pages/maintain.html break;
      () -> 匹配括號之間的內容
      flag標記:
last  -> 中止rewrite檢測
break  -> 中止rewrite檢測
redirect -> 返回302臨時重定向,地址欄會顯示跳轉後的地址
permanent-> 返回301永久重定向,地址欄會顯示跳轉後的地址
實際寫法:
location ~ ^/break{
    rewrite ^/break /test /break;  注:break找不到並不會新建請求
}
location ~ ^/last{
    rewrite ^/last /test /last;    注:last找不到test,會新建請求
}
location ~ ^/imooc{
    rewrite ^/imooc http://www.imooc.com/ permanent;
    #rewrite ^/imooc http://www.imooc.com/ redirect;
}
 
rewrite ^/course-(d+)-(d+)-(d+).html$ /course/$1/&2/course_$3/html break;
       if($http_user_agent ~* Chrome){
     rewrite ^/nginx http://coding.imooc.com/class/121.html redirect;
}
if(!-f $request_filename){ !-f判斷文件不存在
     rewrite ^/(.*)$ http://www.baidu.com/$1 redirect;
}
 rewrite優先級規則
執行server塊的rewrite指令
執行location匹配
執行選定的location中的rewrite
 rewrite優雅的書寫規則
 
  二.Nginx高級模塊
       1.secure_link_module安全鏈接模塊 語法:
  Syntax:secure_link expression;
  Default:-
  Context:http,server,location
 
  Syntax:secure_link_md5 expression;
  Default:-
  Context:http,server,location
     做用:應用場景訪問限制,防盜鏈。
       2.geoip_module模塊
  yum install nginx-module-geoip
  geoip_country /etc/nginx/geoip/GeoIP.dat;
  geoip_city /etc/nginx/geoip/GeoLiteCity.dat;
  location /myip{
default_type text/plain;
return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";
  }
  做用ip地址匹配MaxMind GeoIP二進制文件,讀取IP因此在地域信息。
  區別,國內外,國內城市,地域做HTTP訪問規則
        
       爲何須要HTTPS?
  HTTP不安全,傳輸數據被中間人盜用信息泄露,數據內容劫持篡改。
  HTTPS對傳輸內容進行加密及身份驗證
  對稱加密特色是:加密密鑰和解密密鑰是同樣的 一串密鑰。
  非對稱加密特色是:加密密鑰和解密密鑰是不同的 兩串密鑰。
 
  生產密鑰和CA證書
    必須安裝好#openss|version來生成密鑰,
    經過密鑰生成'證書籤名請求文件csr',密鑰和csr一併打包以及發送對應的簽名機構,CA證書籤名,
    步驟一.生成key密鑰
    步驟二.生成證書籤名請求文件(csr文件)
    步驟三.生成證書籤名文件(CA文件)
    實際操做以下:
      rpm -qa|grep open
    mkdir ssl_key
    openssl genrsa -idea -out jesonc.key 1024
    openssl req -new -key jesonc.key -out jesonc.csr 生成證書籤名請求文件,注意:這是本身簽名的
            openssl x509 -req -days 3650 -in jesonc.csr -signkey jesonc.key -out jesonc.crt
  
  二.Nginx與Lua開發
Lua:是一個簡潔,輕量,可擴展的腳本語言
        Nginx結合Lua優點
充分的結合Nginx的併發處理epoll優點和Lua的輕量
實現簡單的功能,提升高併發的場景
 
Lua基礎語法
  1.安裝lua:yum install lua
  2.運行:交互式運行和腳本文件方式運行
  3.註釋:--行註釋,--[[塊註釋]]
  4.變量:a='alo 123"' a="alo 123"" a='97lo923"' a=[[alo123]]
    布爾類型只有nil和false是false,0和空字符串是true
  5.while循環語句
   sum=0
num=1
while num <=100 do
  sum = sum+num
  num = num+1
end
print("sum=",sum)
     注:Lua沒有++或者+=這樣的操做
  6.for循環語法
sum = 0;
for i=1,100 do
  sum = sum+i
end
  7.if-else判斷語句
if age == 40 and sex == "Male" then
   print("大於40男人")
elseif age > 60 and sex ~= "Female" then
   print("非女人並且大於60");
else
   local age = io.read()
   print("Your age is "..age)
end
注:~=是不等於,..是字符串的拼接操做符,io庫的分別從stdin和stdout讀寫的read和write函數
 
Nginx+Lua環境
  1.LuaJIT
  2.ngx_devel_kit和lua-nginx-module
  3.從新編譯Nginx
  http://www.imooc.com/article/19598:老師寫的參考筆記
  
  Nginx調用lua模塊指令
    Nginx的可插拔模塊化加載執行,共11個處理階段
    set_by_lua -> 設置nginx變量,能夠實現複雜的邏輯處理
    set_by_lua_file
    access_by_lua -> 請求訪問階段處理,用於訪問控制
    access_by_lua_file
    content_by_lua -> 內容處理器,接受請求處理,並輸出響應
    content_by_lua_file
  Nginx Lua API
    ngx.var -> nginx變量
    ngx.req.get_headers -> 獲取請求頭
    ngx.req.get_uri_args-> 獲取url請求參數
    ngx.redirect -> 重定向
    ngx.print -> 輸出響應內容體
    ngx.say -> 通ngx.print,可是會最後輸出一個換行符
    ngx.header -> 輸出響應頭
 
Nginx接口Lua實現代碼的灰度發佈
   按照必定關係區別,分部分的代碼進行上線,使代碼的發佈能平滑過渡上線。
   場景:1.用戶的信息cookie等信息區別
        2.根據用戶的ip地址
3.效驗IP Memcache
   實戰:1.yum install memcached 和 tomcat
2.更改了tomcat的端口,tomcat/conf/server.xml
        3.netstat -luntp查看系統全部啓動的端口
    4.啓動memcached:1.ps -aux|grep mem 2.memcached -p11211 -u nobody -d
5.netstat -luntp|grep 11211
6.1.ls 2.cd /etc/nginx/conf.d/
7.vi dep.conf
8.vi /opt/app/lua/dep.lua
加一個模塊安裝:cat install_memcache_lua.sh
操做memcache以下
有後臺的狀況下:ps -aux|grep mem 
沒後臺的狀況下:telnet 127.0.0.1 11211
       set 如這個ip:103.215.191.72 0 1
       1
       STORED 存入成功
       get 如這個ip:103.215.191.72
     
架構篇:性能的優化,以及安全的章節
  一.Nginx常見問題
1.相同server_name多個虛擬主機訪問優先級
    diff test_server1.conf test_server2.conf:查看多個虛擬主機區別命令
    按左右位置讀取
 
2.location匹配優先級
    =  -> 進行普通字符精確匹配,也就是徹底匹配
    ^~  -> 表示普通字符匹配,使用前綴匹配
    ~~* -> 表示執行一個正則匹配()
 
3.try_files使用
    做用:按順序檢查文件是否存在
    語法:location / {
     try_files $uri $uri/ /index.php;
       }
    ps -aux|grep java:
    實寫以下:
    location / {
root /opt/app/code/cache;這是他講課的安裝目錄,如usr/local
try_files $uri @java_page;
    }
    location @java_page{
proxy_pass http://127.0.01:9090;
    }
 
    場景:可用於緩存和動靜分離
 
4.Nginx的alias和root區別
    location /request_path/image/ {
root /local_path/image/;
    }
    http://www.imooc.com/request_path/image/cat.png
    /local_path/image/request_path/image/cat.png
 
    location  /request_path/image/ {
alias /local_path/image/;
    }
    http://www.imooc.com/request_path/image/cat.png
    /local_path/image/cat.png
 
5.用什麼方法傳遞用戶的真實IP
    set x_real_ip=$remote_addr
    $x_real_ip=IP1
 
6.常見錯誤
    Nginx:413 Request Entity Too Large
    1.用戶上傳文件限制 client_max_body_size
 
    502 bad gateway
    2.後端服務無響應
 
    504 Gateway Time-out
    3.後端服務執行超時,默認是60秒
 
    http常見的錯誤碼:403訪問被起絕,404文件沒找到,400請求參數錯誤
  
  二.Nginx性能優化
1.性能優化考慮點
    1.當前系統結構瓶頸
觀察指標,壓力測試
    2.瞭解業務模式
接口業務類型,系統層次結構
    3.性能與安全
權衡好對應的點
2.接口壓力測試工具
    1.安裝:yum install httpd-tools
    2.使用:ab -n 2000 -c 2 http://l27.0.0.1/
           -n總的請求數
   -c併發數
   -k是否開啓長鏈接
 
            3.演示ab的使用和Nginx對於後臺服務的性能壓測
ab -n 2000 -c 2 http://l27.0.0.1/jesonc.html
查看壓測後的參數
netstat -luntp|grep java:查看java啓動的端口
 
3.系統與Nginx性能優化     
    1.網絡
    2.系統
    3.服務
    4.程序
    5.數據庫,底層服務
    
    文件句柄:linux/Uxin 一切接文件,文件句柄就是一個索引,默認操做系統設置通常爲1024
    設置方式:系統全局性修改,用戶局部性修改,進程局部性修改
    vi /etc/security/limits.conf:系統全局性,用戶局部性,修改文件句柄的地方
    尤爲實際上是新裝的系統需設置
    vi /etc/nginx/nginx.conf:進程局部性修改文件句柄的地方
    
    CPU的親和:把進程一般不會在處理器之間頻繁遷移的頻率小,減小性能損耗。
    
    cat /proc/cpuinfo|grep "physical id"|sort|uniq|wc -l
    查看有多少個物理CPU
    cat /proc/cpuinfo|grep "cores"|uniq
    查看有多少核心
    top進去按鍵盤1鍵展現出當前的數量
    核心就是cpu親緣
 
    把Nginx的work進程對應的綁到不一樣的cpu上
    vi /etc/nginx/nginx.conf
    worker_processes 2;:表示當前啓動了多少個進程,官方建議啓動進程最好和cpu進程一致
    worker_cpu_affinity:配置cpu親緣,3中綁定方式,經常使用的是:worker_cpu_affinity auto;
            ps -eo pid,args,psr | grep [n]ginx:看一下當前nginx所使用的cpu是哪個
    
    events{事件處理器
   use epoll;
worker_connections 1024;限制每個wrok可以處理多少個鏈接
    }
    關閉不經常使用的日誌
    gzip_disable "MSIE [1-6].";對IE6一下,不進行壓縮。
    
  三.Nginx的安全篇
1.常見的惡意行爲
    爬蟲行爲和惡意抓取,資源盜用
    基礎防盜鏈功能-目的不讓惡意用戶能輕易的爬取網站對外數據
    secure_link_module-對數據安全性提升加密驗證和失敗性,適合如核心重要數據
    access_module-對後臺,部分用戶服務的數據提供IP防控
   2.常見的應用層攻擊手段 
    後臺密碼撞庫-經過猜想密碼字典不斷對後臺系統登陸性嘗試,獲取後臺登錄密碼
方法一.後臺登錄密碼複雜度
方法二.access_module對後臺提供IP防控
方法三.預警機制
    文件上傳漏洞-利用這些能夠上傳的接口將惡意代碼植入到服務器中,在經過url去訪問以執行代碼
http://www.imooc.com/upload/1.jpg/1.php
Nginx將1.jpg做爲php代碼執行
location ^~ /upload{
   root /opt/app/images;
   if($request_filename ~* (.*).php){
return 403;
   }
}
    SQL注入-利用爲過濾/未審覈用戶輸入的攻擊方法,讓應用運行本不該該運行的SQL代碼
SQL注入場景
' or 1=1#
select * from user where username=" or 1=1#" and password="asdf"
 
   3.場景:Nginx+LUA構建waf防火牆
     攔截Cookie類型攻擊  JAVA
攔截異常post請求
->Nginx+LUA(waf)攔截cc攻擊 -> PHP
        攔截URL
攔截arg    Python
安裝git命令:yum install git^C
git clone https://github.com/loveshell/ngx_lua_waf.git
cd ng
cd ngx_lua_waf/
cd /etc/nginx/
mv /opt/download/
mv /opt/download/ng
mv /opt/download/ngx_lua_waf/
mv /opt/download/ngx_lua_waf/ ./
mv /opt/download/ngx_lua_waf/ ./waf/
cd ./w
cd ./waf/
vi config.lua
4.Nginx漏洞和新版本特性
1.查看版本更新描述
2.CVE-2017-7529:信息泄露漏洞
 
  四.基於Nginx的中間價架構
Nginx的配置與使用經驗
1.靜態資源服務
2.代理服務
3.動靜分離
4.負載均衡
5.Nginx在不一樣角色中這幾的功能
6.瀏覽器需不須要設置緩存,緩存週期
7.對於靜態資源防盜鏈是比不可少的,對那些資源設置防盜鏈
8.流量的設置,要不要考慮對應的一些資源按照請求類型進行流量限制
9.靜態資源的壓縮,若是比例壓縮的合適,能大大節省服務端的性能流量io的消耗,
  什麼樣的方式壓縮,採用什麼樣的壓縮比例,哪所的類型。
     設計評估
1.硬件: CPU 內存 硬盤 相應的配置如:動態的數據緩存以及要承受必定併發
2.系統: 用戶權限 日誌目錄存放
3.關聯服務:
LVS,keepalive 運用於負載均衡 
syslog        用於Nginx日誌實時同步
Fastcgi       性能調優安全
配置注意事項
1.合理配置
2.瞭解原理
3.關注日誌
 
 
BTuC商對客 數據分析,代理均衡,
相關文章
相關標籤/搜索