首先咱們先了解一下什麼是正向代理,以下圖所示正向代理,代理的是客戶端的對服務器方發起的訪問,能夠起到隱藏客戶端IP等信息的做用。javascript
反向代理則表示代理的是服務器端內容,web服務器並無直接暴露到公網上而是經過代理服務才能訪問到真正的web服務器。php
nginx的負載均衡策略有兩種,一種是內置策略,還有一種是擴展策略。其中內置策略分爲輪詢、加權輪詢、IP hash。css
內置策略:html
輪詢:是指在因此提供服務的服務器作輪詢提供服務。java
加權輪詢:根據全部提供服務的服務器權重進行輪詢。nginx
ip hash:對客戶端請求ip進行hash操做, 而後根據hash結果將同一個客戶端ip的請求分發給同一臺服務器進行處理,能夠解決session不共享的問題。 web
Nginx能夠對不一樣的文件作不一樣的緩存處理,配置靈活,而且支持FastCGI_Cache,主要用於對FastCGI的動態程序進行緩存。配合着第三方的ngx_cache_purge,對制定的URL緩存內容能夠的進行增刪管理 。後端
conf文件夾的nginx.conf文件,Nginx服務器的基礎配置,默認的配置也存放在此。瀏覽器
#user nobody; 配置用戶或用戶組,一般爲啓動nginx的用戶組 worker_processes 1; #容許生成的線程數量,一般配置成與cpu數量相同 #error_log logs/error.log info; 指定錯誤日誌路徑和級別,debug|info|notice|warn|error|crit|alert|emerg #pid logs/nginx.pid; #指定nginx進程運行pid events { accept_mutex on; #設置網路鏈接序列化,防止驚羣現象發生,默認爲on;驚羣現象:一個網路鏈接到來,多個睡眠的進程被同事叫醒,但只有一個進程能得到連接,這樣會影響系統性能。 multi_accept on; #設置一個進程是否同時接受多個網絡鏈接,默認爲off use epoll; #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #單個worker_processes進程的最大鏈接數,默認爲512 #最大鏈接數爲worker_processes與worker_connections乘積,在設置了反向代理的狀況下最大鏈接數爲前面乘積以後除以4(經驗值)。 #設置最大連接數時不該大於系統內打開的最大文件數,系統能打開的最大文件數和系統內存成正比,通常狀況下1G內存大約能夠打開的文件數爲10萬左右。 } http { include mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream; #默認文件類型,默認爲text/plain #自定義日誌格式 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 sendfile on; sendfile_max_chunk 100k; #每一個進程每次調用傳輸數量不能大於設定的值,默認爲0,即不設上限。 #tcp_nopush on; keepalive_timeout 65; #鏈接超時時間,默認爲75s #gzip on; #開啓gzip壓縮 #負載均衡配置示例默認是以輪詢 upstream backend { #ip_hash; server 192.168.1.101:8090; server 192.168.1.101:8080; } #虛擬主機配置 server { listen 80; #監聽80端口 server_name www.nginx.cn; #charset koi8-r; #access_log logs/host.access.log main;#該虛擬機下請求日誌 #監聽根路勁 location / { proxy_pass http://backend; } error_page 500 502 503 504 /50x.html; #錯誤頁面 location = /50x.html { root html; } #靜態文件,nginx本身處理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { #過時30天,靜態文件不怎麼更新,過時能夠設大一點, #若是頻繁更新,則能夠設置得小一點。 expires 30d; } #禁止訪問 .htxxx 文件 location ~ /.ht { #請求的url過濾,正則匹配,~爲區分大小寫,~*爲不區分大小寫。 deny all; } } }
1.$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址;緩存
2.$remote_user :用來記錄客戶端用戶名稱;
3.$time_local : 用來記錄訪問時間與時區;
4.$request : 用來記錄請求的url與http協議;
5.$status : 用來記錄請求狀態,成功是200;
6.$body_bytes_s ent :記錄發送給客戶端文件主體內容大小;
7.$http_referer :用來記錄從那個頁面連接訪問過來的;
8.$http_user_agent :記錄客戶端瀏覽器的相關信息;
location [ 空格 | = | ~ | ~* | !~ | !~* ] /uri/ {}
通用匹配:「/」
精確匹配:「=」
字符串匹配:字符串匹配開頭「 ^~ 」
正則匹配:區分大小寫匹配「~」;不區分大小寫匹配「~*」;區分大小寫不匹配「!~」;不區分大小寫不匹配「!~*」。
精確匹配 > 字符串匹配( 長 > 短 [ 注: ^~ 匹配則中止匹配 ]) > 正則匹配( 上 > 下 )
精確匹配只能命中1個
字符串匹配使用匹配最長的匹配結果
正則匹配按照location定義的順序進行匹配,先定義具備高優先級
#直接匹配網站根,經過域名訪問網站首頁比較頻繁,使用這個會加速處理,官網如是說。 #這裏是直接轉發給後端應用服務器了,也能夠是一個靜態首頁 # 第一個必選規則 location = / { proxy_pass http://tomcat:8080/index } # 第二個必選規則是處理靜態文件請求,這是nginx做爲http服務器的強項 # 有兩種配置模式,目錄匹配或後綴匹配,任選其一或搭配使用 location ^~ /static/ { # 請求/static/a.txt 將被映射到實際目錄文件: /webroot/res/static/a.txt root /webroot/res/; } location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/; } #第三個規則就是通用規則,用來轉發動態請求到後端應用服務器 #非靜態文件請求就默認是動態請求,本身根據實際把握 #畢竟目前的一些框架的流行,帶.php,.jsp後綴的狀況不多了 location / { proxy_pass http://tomcat:8080/ }