天天看點

[Open Source] 負載均衡之Nginx

目錄

  • 簡介
  • 常用指令
  • 功能
    • 代理
    • 反向代理
    • 叢集
      • HTTP叢集
      • TCP叢集
    • 重定向
    • 靜态檔案
    • HTTPS配置
  • 常見問題

簡介

Nginx ("engine x") 是一款輕量級,高性能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器。

傳輸層的負載均衡有LVS(Linux) 和 NLB(Windows)

常用指令

  • nginx -v

    // nginx 版本
  • start nginx

    // 啟動nginx,不阻塞指令視窗
  • nginx -s stop

    |

    nginx -s quit

    // 快速停止 | 有序退出
  • nginx -s reload

    // 加載配置重新啟動

功能

代理

server {
    listen 8080;                # 監聽8080端口
    resolver 114.114.114.114;   # dns解析位址  
    location / {
        proxy_pass  $scheme://$host$request_uri; # 代理到哪個位址
        proxy_set_header Host $http_host;
        #allow 127.0.0.1;       # 允許127.0.0.1位址通路
        #deny all;              # 禁止所有位址通路(allow位置在上面,是以127.0.0.1仍能通路)
    }
}
           

反向代理

server {
    listen 8081;                    # 監聽8080端口
    server_name  localhost;         # 虛拟hostName

    location / {
        proxy_pass   http://127.0.0.1:8081; # 反向代理到的伺服器
    }
}
           

叢集

HTTP叢集

upstream clusterName {
    # 通過weight設定每台伺服器配置設定請求站的權重,值越高配置設定的越多。
    server  127.0.0.1:9000 weight=4; 
    server  127.0.0.1:8082 weight=1; 
    # ip_hash會計算ip對應hash值,然後配置設定到固定伺服器
    ip_hash; 
}

location / {
    proxy_pass   http://clusterName; # 反向代理到群集伺服器
    # 設定主機頭和用戶端真實位址,以便伺服器擷取用戶端真實IP
    proxy_set_header   Host             $host; 
    proxy_set_header   X-Real-IP        $remote_addr; 
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}
           

TCP叢集

  • 和http同級
stream {
    server {
        listen 1034;
        proxy_pass app;
    }

    upstream app {
        server 192.168.0.111:5672;
        server 192.168.0.112:5672;
    }
}
           

重定向

location / {
    rewrite ^/(.*)$ http://www.xx.com/$1 permanent;
}
           
  • flag
    • last – 基本上都用這個Flag。
    • break – 中止Rewirte,不在繼續比對
    • redirect – 傳回臨時重定向的HTTP狀态302
    • permanent – 傳回永久重定向的HTTP狀态301

靜态檔案

location /^(.*) {
    root   html;                    # 根目錄為html檔案夾
    index  $1 index.html index.htm; # $1表示正則比對第一項
}
           

綁定證書

# HTTPS server
#
server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      /nginx/server.cer; # 公鑰(一般為公鑰證書 + 中級證書)
    ssl_certificate_key  /nginx/server.key; # 私鑰

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
}
           

常見問題

  • 與IIS(80端口)沖突
    • 被System占用
      • 找到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/HTTP下的Start修改其值為0,重新開機電腦即可
    • 被IIS占用
      • 停用IIS 80端口的網站
  • nginx群集
    • 如果nginx伺服器挂了,那我們的站點就直接挂了,可以通過keepalived元件來搭建多台nginx服務提供服務。
  • error.log 錯誤日志:signal process started
    • 并非錯誤,隻要執行-s reload就會發出

轉載于:https://www.cnblogs.com/neverc/p/7027274.html

繼續閱讀