nginx3

一、相同server_name多個虛擬主機優先級訪問html

二、location匹配優先級java

三、try_files使用node

按順序檢查文件是否存在
location  / {
  # try_files $uri $uri/ /index.html;
  root /opt/app/code/cache;
  try_files $uri @java_page;    # 引用@java_page
}
# 第一個不存在找第二個,第二個不存在找第三個

location @java_page{
  proxy_pass http://127.0.0.1:9000;
}

 

 

四、alias和root區別linux

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
root路徑+請求路徑
location /request_path/image/ {
    alias /local_path/image/;
}
訪問:
http://www.imooc.com/request_path/image/cat.png

實際找:/local_path/image/cat.png 

 

 

五、用什麼方法傳遞用戶的真實IPnginx

針對當咱們的nginx不是直接針對的服務,而是通過了不少的中轉,
x_forward_for容易被修改,
在第一層約定一個   set x_real_ip=$remote_addr

 

六、其餘sql

  • 413  Request Entity Too Large
  • 用戶上傳文件限制client_max_body_size
  • 502Bad gateway   後端服務無響應   
  • 504 Gateway time-out  後端服務存活,但超時(取數據庫時間過長)
  • 403  訪問被拒絕
  • 404        訪問沒找到
  • 400        請求參數錯誤

 

性能優化

性能優化考慮點數據庫

一、當前系統結構瓶頸
    觀察指標、壓力測試
cpu負荷,內存使用,進程使用,系統性能瓶頸,請求日誌分析,查看當前的請求情況stub_status
當前用的是什麼,跑的是什麼業務,裏面的服務都是什麼樣子的,每一個服務都能支持多大的併發,
好比說對於nginx處理靜態資源的併發效率最高的瓶頸是多大,能支持多少kps;
對線上的產品進行壓力的測試在低峯期,作風險評估。 二、瞭解業務模式
  業務接口類型、系統層次化結構
  好比說搶購,平時挺少,會激增
  是代理,仍是動靜分離
三、性能和安全
  把握好二者的關係

壓力測試工具後端

yum install httpd-tools

ad -n 2000 -c 2 http://127.0.0.1/     
-n 總的請求書
-c 併發數
-k 是否開啓長鏈接
關注總時間
失敗個數
request per second
time per request  客戶端請求時間
time per request  服務端處理時間
transfer rate    網絡速率  
  • 網絡
  • 系統
    • 文件句柄:linux、unix 一切皆文件,文件句柄就是一個索引
    • 設置方式:系統全局性修改、用戶局部性修改、進程局部性修改
    • /etc/security/limits.conf
      root soft nofile 10000 # 發提醒,不會限制 root hard nofile 10000 # 進行限制 * soft nofile 10000 * hard nofile 10000

      nginx:瀏覽器

    • worker_rlimit_nofile 35535; |/
      events {
      use epoll; worker-connections 10240;
      }

      cpu的親和:把進程一般不會在處理器以前頻繁遷移進程的頻率小,減小性能耗損緩存

    • 查看當前nginx使用的是哪一個cpu
    • ps   -eo     pid,args,psr |grep    [n]ginx
    • /proc/cpuinfo有一些信息

      cat /proc/cpuinfo |grep 'physical id' |sort|uniq|wc -l  # 物理cpu
      cat  /proc/cpuinfo |grep 'cpu cores' |uniq  # 核心

      worker_processes 16;
      #worker_cpu_affinity 0000000000000010 0000000000000010 0000000000000100 0000000000001000 0000000000010000 0000000000100000 0000000001000000 0000000010000000 0000000100000000 0000001000000000 0000010000000000 0000100000000000 0001000000000000 0010000000000000 0100000000000000 1000000000000000;

      worker_processes 2; # 劃分
      #worker_cpu_affinity 1010101010101010 0101010101010101;
      worker_cpu_affinity auto;  # nginx 1.9之後

       

  • 服務
  • 程序
  • 數據庫、底層服務

 

user  nginx;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

worker_rlimit_nofile 35535;

events {
    use epoll;
    worker_connections  10240;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
  
    charset utf-8;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$request_uri"';

    access_log  /var/log/nginx/access.log  main;
    #access_log  off;
    
 
    sendfile        on;
    #tcp_nopush     on;            # 靜態資源服務器 打開
    #tcp_nodeny     on;            # 動態服務,依賴keepalive
    keepalive_timeout  65;
    
 
    gzip  on;
    gzip_disable "MSIE [1-6]\.";  
    gzip_http_version 1.1; 
    
    ########
    #Virtal Server
    include /etc/nginx/conf.d/*.conf;
}

 

 

安全

  • 常見的惡意行爲
    • 爬蟲行爲和惡意抓取、資源盜用
    • 基礎的防盜鏈功能-目的不讓惡意用戶能輕易的爬取網站對外數據
    • secure_link_module    對數據安全性要求很高。對連接進行加密,
    • access_module           對後臺、部分用戶服務的數據提供ip訪問
  • 常見的應用層攻擊手段
    • 後臺密碼撞庫---->後臺登陸密碼複雜度;access_module對後臺提供ip防控;預警機制(屢次請求,不成功,禁ip)
    • 文件上傳漏洞---->利用這些能夠上傳的接口將惡意代碼植入到服務器中,在經過url去訪問可執行代碼
    • location  ^~ /upload{
        root  /opt/app/images;
        if ($request_filename ~*(.*)\.py){
            return  403;    
        }  
      }
      # 禁止上傳py文件

      sql 注入  -------->利用未過濾/未審覈用戶輸入  的攻擊方法,讓應用運行本不該該運行的sql代碼;

    • select * from users where username='' or 1=1 #' and password=md5('')
      等價於
      select * from users where username='' or 1=1

       

  • nginx防攻擊策略
  • 場景:nginx+lua 的安全wa防火牆
  • 利用到對關鍵字的審覈
  • cc攻擊   訪問頻率太高

 

 Nginx  在服務體系中的角色

  • 靜態資源服務
  • 瀏覽器緩存(不一樣東西不一樣時間)
    類型分類
    防盜鏈
    流量的限制
    防資源盜用
    壓縮

    代理服務

    正向代理
        代理緩存,緩存的設計
    
    反向代理
        代理緩存,緩存的設計
        
        負載均衡
        哈希策略
        對後端結點的檢查
        頭信息的處理,把用戶自定義的一些信息添加到cookie\頭信息傳遞到後端
    Proxypass
    LNMP
  • 動靜分離

 

 

 

 

設計評估

硬件  cpu、內存、硬盤

系統  用戶權限、日誌目錄存放

關聯服務  LVS,keepalive,syslog,uwsgi

相關文章
相關標籤/搜索