Nginxa安裝、命令、配置以及核心模組
阿新 • • 發佈:2018-11-21
寫在前面:
負載均衡:請求分發(轉發)–一次請求
反向代理:代理伺服器重新發起請求(重定向)–兩次請求
一、nginx的安裝
1、下載
http://nginx.org/download/ –> ./configure 執行nginx配置檔案 –> make 編譯 –> make install 安裝
brew install nginx
2、啟動
終端輸入 > nginx
3、目錄
mac下使用brew安裝其目錄在
/usr/local/etc/
中。
配置檔案:nginx.conf
二、常用命令
nginx # 啟動Nginx nginx -t # 測試配置檔案是否有錯誤 nginx -v # 檢視Nginx版本 nginx -V # 檢視Nginx版本和編譯安裝時的編譯引數 nginx -s stop # 強制停止Nginx服務 nginx -s quit # 優雅地停止Nginx服務(即處理完所有請求後再停止服務) nginx -s reload # 重新載入Nginx配置檔案,然後以優雅的方式重啟Nginx
三、常用配置
#執行使用者
#user nobody;
#開啟程序數<=CPU數
worker_processes 1;
#錯誤日誌儲存位置
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#程序號PID儲存檔案
#pid logs/nginx.pid;
#工作模式及連線數上限
events {
#epoll是多路複用IO(I/O Multiplexing)中的一種方式,
#僅用於linux2.6以上核心,可以大大提高nginx的效能
use epoll;
#單個後臺worker process程序的最大併發連結數
worker_connections 1024;
# 併發總數是 worker_processes 和 worker_connections 的乘積
}
http {
#副檔名與檔案型別對映表
include mime.types;
#預設檔案型別
default_type application/octet-stream;
#日誌檔案輸出格式 這個位置相於全域性設定
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#請求日誌儲存位置
#access_log logs/access.log main;
#sendfile 指令指定 nginx 是否呼叫 sendfile 函式(zero copy 方式)來輸出檔案,
#對於普通應用,必須設為 on,
#如果用來進行下載等應用磁碟IO重負載應用,可設定為 off,
#以平衡磁碟與網路I/O處理速度,降低系統的uptime.
sendfile on;
#tcp_nopush on;
#連線超時時間
keepalive_timeout 65;
#開啟gzip壓縮
#gzip on;
#設定請求緩衝
#client_header_buffer_size 1k;
#large_client_header_buffers 4 4k;
#設定[負載均衡]的伺服器列表
upstream myapp {
#指定負載均衡演算法
#ip_hash;
server 192.168.1.171:8080 weight=1 max_fails=2 fail_timeout=30s max_conns=80;
server 192.168.1.172:8080 weight=1 max_fails=2 fail_timeout=30s max_conns=80;
server 192.168.1.173:8080 weight=1 max_fails=2 fail_timeout=30s max_conns=80 backup;
#service 反向服務地址,加埠
#weigth 引數表示權值,權值越高被分配到的機率越大
#max_fails 當有#max_fails個請求失敗,就表示後端的伺服器不可用,踢出。預設為1,將其設定為0可以關閉檢查
#fail_timeout 踢出後重新探測時間
#max_conns 服務允許的最大連線數,可以控制併發量
#backup 指的是這臺服務不啟動,當所有服務不可用時再啟用
}
#配置虛擬主機
server {
#監聽埠
listen 80;
#監聽域名
server_name hoaven.com; #測試時需要配置hosts,線上可配置域名解析
#nginx訪問日誌放在logs/host.access.log下,並且使用main格式(還可以自定義格式)
#access_log logs/host.access.log main;
#站點,指客戶端訪問虛擬服務時,攔截某些特定路由,反向代理到某個負載均衡服務列表
#一個server可以配置多個location
location / { #攔截所有請求
#指的就是location站點
#配置的值是相對路徑(相對於nginx目錄:/usr/local/etc/nginx/)
root html;
#預設訪問檔案
index index.html index.htm;
#負載均衡反向代理
#如果不配置此項,客戶端訪問到此站點時,直接訪問/usr/local/etc/nginx/html/uri資源,資源沒找到就會訪問index.html或index.htm資源,不會被代理
proxy_pass http://myapp;
}
#整體訪問流程:
#1、客戶端請求http:hoaven.com訪問(server_name + listen)到nginx的虛擬主機;
#2、nginx將請求轉發到myapp的web叢集(選擇伺服器:權重+輪詢,如果權重一樣,每個服務輪流進行服務);
#配置[反向代理]tomcat伺服器:攔截.jsp結尾的請求轉向到指定的伺服器及埠
#location ~ \.jsp$ {
# proxy_pass http://192.168.1.171:8080;
#}
#錯誤頁面及其返回地址
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
四、負載均衡演算法
權重+輪詢(預設)
權重相同的情況下,‘一人一次’
ip_hash
同一ip,每次請求都負載到一臺服務,應用於保持session的一致性
url_hash
同一url,每次請求都負載到一臺服務,應用於靜態資源的快取優化(每臺服務節點只需要從檔案伺服器快取該客戶端需要訪問的檔案資源)
弊端:當某臺伺服器掛掉後,某些url客戶端就訪問不到靜態資源了
least_conn:最少連線
選擇當前最少連線的服務節點
least_time:最小響應時間
計算節點平均響應時間,選取響應最快的節點
五、server和location
客戶端訪問流程:
(1) 客戶端通過server_name + listen找到相應的nginx虛擬服務server;
(2) 通過請求uri定位到具體的location(根據uri和location後面配置的目錄路徑、正則表示式、條件語句等進行匹配);
(3) 通過location代理到具體的upstream,再通過負載均衡演算法請求具體的服務節點;
注:location可以直接定位到具體的服務節點地址或靜態地址
六、動靜分離的實現
靜態資源請求代理到靜態資源服務節點(前端);動態請求代理到動態服務節點(後端);
方案一:
upstream static_servers {
server 192.168.1.171:8080 weight=1 max_fails=2 fail_timeout=30s max_conns=80;
server 192.168.1.172:8080 weight=1 max_fails=2 fail_timeout=30s max_conns=80;
}
upstream dynamic_servers {
server 192.168.1.191:8080 weight=1 max_fails=2 fail_timeout=30s max_conns=80;
server 192.168.1.192:8080 weight=1 max_fails=2 fail_timeout=30s max_conns=80;
}
server {
listen 80;
#訪問任何一個域名都能定位到這個虛擬服務
server_name static.hoaven.com dynamic.hoaven.com;
location static.hoaven.com {
root html;
index index.html index.htm;
proxy_pass http://static_servers;
}
location dynamic.hoaven.com {
root html;
index index.html index.htm;
proxy_pass http://dynamic_servers;
}
}
方案二:配置兩個server
server {
listen 80;
server_name static.hoaven.com;
location / {
root html;
index index.html index.htm;
proxy_pass http://static_servers;
}
}
server {
listen 80;
server_name dynamic.hoaven.com;
location / {
root html;
index index.html index.htm;
proxy_pass http://dynamic_servers;
}
}
寫在最後:
歡迎關注個人訂閱號,一起學習和分享。
公眾號中搜索:IT技術分享中心 或 hoaven