1.Nginx中解決跨域問題
兩個站點的域名不一樣,就會有一個跨域問題。
跨域問題:了解同源策略:協議,域名,端口號都相同,只要有一個不相同那么就是非同源。
CORS全稱Cross-Origin Resource Sharing,意為跨域資源共享。當一個資源去訪問另一個不同域名或者同域名不同端口的資源時,就會發出跨域請求。如果此時另一個資源不允許其進行跨域資源訪問,那么訪問就會遇到跨域問題。
跨域指的是瀏覽器不能執行其它網站的腳本。是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript 施加的安全限制。
前端有跨域嗎?有。請求資源跨域就有。記住同源策略問題。
Nginx跨域配置:
#允許跨域請求的域,*代表所有
add_header ‘Access-Control-Allow-Origin’ *;
#允許帶上cookie請求
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
#允許請求的方法,比如 GET/POST/PUT/DELETE
add_header ‘Access-Control-Allow-Methods’ *;
#允許請求的header
add_header ‘Access-Control-Allow-Headers’ *;
2.nginx中配置靜態資源防盜鏈
Nginx配置信息:
#對源站點驗證
valid_referers *.nly.com;
#非法引入會進入下方判斷
if ($invalid_referer) {return 404;
}
解析:匹配上面的驗證規則(域名為.nly.com)
匹配的話會繼續往下加載location配置。
沒有匹配的話,就會返回404
3.nginx的模塊化設計解析
Nginx core:實現了底層的通信協議。也為其他的一些模塊和nginx的進程內容提供一個運行時的環境(類似于JVM),協調其他模塊。
Event module:epoll.操作操作系統層面的事件處理機制。
Phase handler:處理客戶端一些請求,以及一些相應內容的響應,
Output filter:過濾器。過濾內容返回瀏覽器。類比gzip(壓縮模塊)
Upstream:反向代理模塊
Load balancer:負載均衡器。實現集群,實現負載均衡的配置。
Extend module:第三方模塊。
nginx-1.22.0安裝包目錄下的內容。
4.四層,七層DNS負載均衡
四層負載均衡:主要是基于ip和端口的負載均衡。原理是轉發請求到后臺的服務器。它是負責轉發,并且會記錄連接是由那個服務器處理的,后續這個連接的請求會由同一臺去處理。 (相當于常連接)
F5硬件負載均衡:成本高,穩定不錯。商業級別的負載均衡。
LVS四層負載均衡:linux內核負載均衡。主要是用來轉發請求的。
Hapooxy四層負載均衡:靈活性高。
Nginx四層負載均衡。
七層負載均衡:是基于url和ip的負載均衡。基于應用層,針對于http協議的負載均衡。
Nginx七層負載均衡:
Haproxy七層負載均衡:靈活性高
Apache七層負載均衡:并發不如nginx。
四層多用LVS,七層多用nginx.
七層主要是針對http協議,適用于web服務器,比如tomcat,Apache,nginx。七層會處理請求,比如:壓縮css,js等
四層主要是針對tcp/udp協議。主要運用于轉發請求而不是處理。
DNS地域負載均衡:
5.JMet測試單節點與集群的并發異常率
Jmeter工具:測試網站性能,apache.
使用jmeter工具。注意點:如何使用jmeter?配置環境變量。安裝時候需要修改哪些變量(注冊表的信息,添加注冊表對應位置的權限,創造對應的文件,然后修改了#server.rmi.ssl.disable=false 去掉注釋 修改末尾的false–>true Jmeter)
測試單個tomcat運行:(用戶即線程)
1.50個用戶,100次請求–無異常
2.200個用戶,100次請求–異常率高達18.51%。
集群測試:
測試結果對比:
區別在于平均值,異常率,以及吞吐量。
正常情況下,公司異常率有臨界點。超過臨界點,并發就認為已經封頂了。然后就需要做一些處理,例如,硬件配置的升級,擴容。
6.負載均衡
負載均衡值輪巡
Nginx訪問多臺服務器時,采用的是輪詢的方式。
負載均衡之權重:
根據機械性能配置權重。數值越小,訪問的頻率越低。
7.upstream 指令
upstream 指令參數值-maxconns
max_conns:限制每臺server的連接數,用于保護避免過載,可起到限流的作用
配置模板:設置為1,避免使用到共享內存
worker進程設置1個,便于測試觀察成功的連接數
worker_processes 1;upstream tomcats {server 192.168.1.173:8080 max_conns=2;server 192.168.1.174:8080 max_conns=2;server 192.168.1.175:8080 max_conns=2;
}
測試:jmeter配置間隔時間為0.
當配置的連接數達到最大連接數(3*2=6),就無法處理請求了。
slow_start:將不健康的服務器變成健康的服務器
配置參考如下:
upstream tomcats {
server 192.168.1.173:8080 weight=6 slow_start=60s;
server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=2;server 192.168.1.175:8080 weight=2;
}
down:用于標記服務結點不可用
配置模板:
upstream tomcats {
server 192.168.1.173:8080 down;
server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;
}
Backup:表示當前服務器節點是備用機,只有在其他服務器都宕機以后,自己才會加入集群中,被用戶訪問到。
配置模板:
upstream tomcats {
server 192.168.1.173:8080 backup;
server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;
}
max_fails:表示失敗幾次,則標記server已經宕機,剔除上游服務。
fail_timeout:表示失敗的重試時間。
max_fails=2 fail_timeout=15s
則代表在15秒內請求某一server失敗達到2次后,則認為該server已經掛了或者宕機了,隨后再過15秒,這15秒內不會有新的請求到達剛剛掛掉的節點上,而是會請求到正常運作的server,15秒后會再有新請求嘗試連接掛掉的server,如果還是失敗,重復上一過程,直到恢復。
8.使用keepalived提高吞吐量
配置信息:
Keepalive:表示的是要保持的連接數(將一些鏈接作為常鏈接)
keepalived: 設置長連接處理的數量
proxy_http_version:設置長連接http版本為1.1
proxy_set_header:清除connection header 信息
官方模版:
自定義模板:
提升了吞吐量,以及接受跟傳輸的量(kb)
9.負載均衡原理-ip_hash;url hash 與least_conn
Ip_hash:可以保證用戶訪問可以請求到上游服務中固定的服務器,前提是用戶ip沒有發生改變(本質上是根據用戶ip hash了以后,根據hash值再分配到一臺特定的服務器里)
hash算法:
配置模板:
upstream tomcats {ip_hash;server 192.168.1.173:8080;server 192.168.1.174:8080 down;server 192.168.1.175:8080;
}
具體算法:
可以在/home/software/nginx-1.22.0/src/http/modules目錄下看到算法。
當需要臨時將一臺服務器進行移除時,需要標記該臺服務器為down.不能直接移除
當使用hash算法時,算法中使用的是ip地址的前三部分。舉例:192.168.56.102 hash算法中使用的是192.168.56來進行計算的
一致性hash算法
hash算法帶來的問題:后臺服務器的節點的增多或者減少,緩存等問題可以會降低效率
一致性hash算法的高明之處在于:保證絕大多數的請求能訪問到原來的計算機節點,僅僅只有一部分的請求會發生變化
(降低節點宕機或者新增節點時,對于用戶的影響或者可以說緩存的影響)
負載均衡之url_hash:
原理:hash處理url,然后求模,計算index.(根據index去訪問)
配置模板:
upstream tomcats {
# url hash
hash $request_uri;
# 最少連接數
# least_conn
server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;
}
server {
listen 80;
server_name www.tomcats.com;
location / {proxy_pass http://tomcats;
}
}
Url:使用www.nly.com/nginx-url-hash/account跟使用www.nly.com/nginx-url-hash/account/的結果不同
負載均衡:Least_conn:根據哪臺服務器的連接數最少就請求哪一臺。
10.Nginx 控制瀏覽器緩存
緩存:
瀏覽器緩存加速單個用戶的訪問。Nginx緩存,優化在內網的傳輸(提升所有訪問到nginx端的用戶;提升訪問上游(upstream)服務器的速度;用戶訪問仍然會產生流量)。(內網請求到不同的服務器,會有帶寬的損耗,所以會有請求以及響應的時間)
瀏覽器緩存,當status顯示為304時,表示的是緩存.Expire限制的是過期時間。
通過設置expire定義過期時間。看cache-control選項:
expire設置模板:
location /files {alias /home/imooc;# expires 10s;設置過期時間# expires @22h30m;設置持續多久# expires -1h;距離現在時間的前一個小時已經失效了# expires epoch;表示no-cache# expires off;默認nginx中的expire處于關閉狀態。瀏覽器端還是有默認的機制的expires max;最大時間,即永不過期
}
11.Nginx 反向代理緩存
配置模板:
# proxy_cache_path 設置緩存目錄
# keys_zone 設置共享內存以及占用空間大小
# max_size 設置緩存大小
# inactive 超過此時間則被清理
# use_temp_path 臨時目錄,使用后會影響nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;location / {proxy_pass http://tomcats;# 啟用緩存,和keys_zone一致proxy_cache mycache;# 針對200和304狀態碼緩存時間為8小時proxy_cache_valid 200 304 8h;
}