nginx與tomcat(三) nginx.conf解析
阿新 • • 發佈:2018-11-02
一. nginx.conf配置檔案解析
- 主要分為五個部分
- 全域性設定:main
- http設定:http
- server設定:server
- 匹配url路徑:location
- 其他配置段:event,upstream
- 全域性設定
- user nginx--------------------------指定執行 nginx workre 程序的使用者和組
- worker_rlimit_nofile #--------------指定所有 worker 程序能夠開啟的最大檔案數
- worker_cpu_affinity----------------設定 worker 程序的 CPU 粘性,以避免程序在 CPU 間切換帶來的效能消耗。如 worker_cpu_affinity 0001 0010 0100 1000;(四核)
- worker_processes 4----------------worker 工作程序的個數,這個值可以設定為與 CPU 數量相同,如果開啟了 SSL 和 Gzip,那麼可以適當增加此數值
- worker_connections 1000----------單個 worker 程序能接受的最大併發連線數,放在 event 段中
- error_log logs/error.log info-------錯誤日誌的存放路徑和記錄級別
- use epoll----------------------------使用 epoll 事件模型,放在 event 段中
- http配置
- server {}:---------------------------定義一個虛擬主機
- listen 80;----------------------------定義監聽的地址和埠,預設監聽在本機所有地址上,該埠不能被其他程式佔用,否則啟動不了,最開始80開始的埠
- server_name NAME [...];------------定義虛擬主機名,可以使用多個名稱,還可以使用正則表示式或萬用字元。
- sendfile on--------------------------開啟 sendfile 呼叫來快速的響應客戶端
- keepalive_timeout 10---------------長連線超時時間,單位是秒。
- send_timeout-----------------------指定響應客戶端的超時時間
- client_max_body_size 10m---------允許客戶端請求的實體最大大小
- root PATH---------------------------設定請求 URL 所對應資源所在檔案系統上的根目錄
- location[ = | ~ | ~* | ^~ ] URI { ... }--設定一個 URI 匹配路徑
-
- =:精確匹配
- ~:正則表示式匹配,區分字元大小寫
- ~*:正則表示式匹配,不區分字元大小寫
- ^~:URI 的前半部分匹配,且不實用正則表示式
- 優先順序:= > location 完整路徑 > ^~ > ~ > ~* > location 起始路徑 > location /
-
- allow 和 deny-------------------------基於 IP 訪問控制,
- 如:僅允許 192.168.0.1/192.168.255.255 網段客戶端訪問:
- allow 192.168.0.1/192.168.255.255;
- deny all;
- 如:僅允許 192.168.0.1/192.168.255.255 網段客戶端訪問:
- rewrite <REGEX> <REPL> <FLAG>--URL 重寫,可以使用多種標記
- 例子:rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
- 可用的 flag:
- - last:重寫完成後,繼續匹配其他 rewrite 規則
- - break:重寫完成後不再繼續匹配
- - redirect:返回 302 重定向(臨時重定向),客戶端對重定向的 URL 發起新的請求
- - permanent:返回 301 重定向(永久重定向),客戶端對重定向的 URL 發起新的請求
- 當我們把前段工程放到nginx的html目錄下的時候,我們訪問前段工程的時候就需要使用到URL的重寫
- 例如:我們的工程專案叫test,主頁面是test目錄下的index.html頁面。配置如下:location/{rewrite "^/home/(.+)" /test/$1 last;}
- 當我們訪問主頁面的時候使用127.0.0.1:80/home/index.htnl就OK了。
- 反向代理配置
- 修改部署目錄下conf子目錄的nginx.conf檔案(如nginx/conf/nginx.conf)內容,可調整相關配置。
- 負載均衡配置
- 權重輪詢
- 由於weight不同,則如果訪問60次,則大概10次localhost:8080,50次192.168.101.9:8080
- ip_hash
- 上面的2種方式都有一個問題,那就是下一個請求來的時候請求可能分發到另外一個伺服器,當我們的程式不是無狀態的時候(採用了session儲存資料),這時候就有一個很大的很問題了,比如把登入資訊儲存到了session中,那麼跳轉到另外一臺伺服器的時候就需要重新登入了,所以很多時候我們需要一個客戶只訪問一個伺服器,那麼就需要用iphash了,iphash的每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
- fair(第三方)
- 需要安裝第三方的fair外掛才能配置使用。按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
- url_hash(第三方)
- 需要安裝第三方的url_hash外掛才能配置使用。按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。 在upstream中加入hash語句,server語句中不能寫入weight等其他的引數,hash_method是使用的hash演算法
- 權重輪詢
二. 完整例項
#user nginx; #windows下可以不配置,但是linux下必須配置,不然沒有訪問許可權。你使用使用者nginx啟動nginx,就配置為user nginx
worker_processes 8;#工作執行緒數量,可以配置為CPU的數量
error_log logs/error.log;#錯誤日誌輸出檔案
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;#指定程序ID,方便在部署環境的時候寫指令碼去管理程序
events {
worker_connections 1024;#配置的最大併發連線數量
}
upstream tomcats {
server 192.168.1.1:8080 max_fails=3 fail_timeout=3s weight=9;
server 192.168.1.2:8080 max_fails=3 fail_timeout=3s weight=1;
}
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 on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;#設定連線超時時間
#gzip on;
#配置一個虛擬的server伺服器
server {
listen 8880;#監聽埠
server_name localhost;#主機名稱
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://tomcats;
index index.html index.htm;
}
location /home {
rewrite "^/home/(.+)" /test/$1 last;
}
location /Test {
proxy_pass http://192.168.1.1:8080/TestServlet;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
include servers/*;
}