【愚公系列】2022年04月 .NET架構班 033-分布式中間件 Nginx多場景使用問題分析之動靜分離
前言
在Web開發中,通常來說,動態資源其實就是指那些后臺資源,而靜態資源就是指HTML,javaScript,CSS,img等文件。
一般來說,都需要將動態資源和靜態資源分開,將靜態資源部署在Nginx上,當一個請求來的時候,如果是靜態資源的請求,就直接到nginx配置的靜態資源目錄下面獲取資源,如果是動態資源的請求,nginx利用反向代理的原理,把請求轉發給后臺應用去處理,從而實現動靜分離。
在使用前后端分離之后,可以很大程度的提升靜態資源的訪問速度,同時在開過程中也可以讓前后端開發并行可以有效的提高開發時間,也可以有些的減少聯調時間 。
一、Nginx多場景使用問題分析之動靜分離
1.同一虛擬主機使用
缺陷:如果商品是在電商Web網站中,這個時候從電商網站當中查詢商品的時候,會同時加載兩類數據,靜態數據和動態數據,靜態數據:js css 圖片,視頻,音頻等等,動態資源:商品數據。如果訪問js css 并發量比較大,會出現cpu,內存等資源全部被耗盡,導致動態數據加載沒有資源可用,所以,導致動態資源請求導致性能下降問題?如何提升性能?
方案:動靜分離
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } 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; proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:64m; limit_conn_zone $server_name zone=perserver:10m; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { limit_conn perserver 1; proxy_cache mycache; proxy_pass http://YDT.EBusiness; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_methods GET HEAD; proxy_cache_revalidate on; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_valid any 1m; proxy_cache_min_uses 1; proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504; } #靜態資源 location ~ \.(ico|js|css|png|jpg|mp4)$ { root D:/work/net-project/分布式中間件專題/網關中間件Nginx/XT.EBusiness.StaticResource/wwwroot; } #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; } # https 虛擬主機 server { listen 4435 ssl; server_name localhost; ssl_certificate D:/work/net/grpc-cluster/server-cert.pem; ssl_certificate_key D:/work/net/grpc-cluster/server-key.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; location / { proxy_pass http://XT.EBusiness; } } } #動態負載均衡配置 upstream XT.EBusiness{ server localhost:5001 max_fails=2 fail_timeout=10s; server localhost:5002 max_fails=2 fail_timeout=10s; server localhost:5003 backup; } } #數據庫代理 stream { server { listen 13306; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass localhost:3306; } upstream mysql { server localhost:3306; } }
2.不同虛擬主機使用
缺陷:如果動靜資源在一個虛擬主機中,那么靜態資源和動態資源共享同一個資源,如果靜態或者動態資源訪問量比較大,把資源消耗殆盡,動態和靜態資源互相會進行影響,導致系統整體上性能下降,如何提升性能?
方案:動靜不同虛擬主機
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } 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; proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:64m; limit_conn_zone $server_name zone=perserver:10m; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { limit_conn perserver 1; proxy_cache mycache; proxy_pass http://YDT.EBusiness; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_methods GET HEAD; proxy_cache_revalidate on; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_valid any 1m; proxy_cache_min_uses 1; proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504; } #靜態資源 #location ~ \.(ico|js|css|png|jpg|mp4)$ { # root D:/work/net-project/分布式中間件專題/網關中間件Nginx/YDT.EBusiness.StaticResource/wwwroot; #} #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; } server { listen 8089; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #location / { # root html; # index index.html index.htm; #} location / { proxy_pass http://localhost:5007; } #靜態資源 #location ~ \.(ico|js|css|png|jpg|mp4)$ { # root D:/work/net-project/分布式中間件專題/網關中間件Nginx/YDT.EBusiness.StaticResource/wwwroot; #} #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; } } server { listen 8090; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #location / { # root html; # index index.html index.htm; #} #location / { # proxy_pass http://localhost:5007; #} #靜態資源 location ~ \.(ico|js|css|png|jpg|mp4)$ { root D:/work/net-project/分布式中間件專題/網關中間件Nginx/XT.EBusiness.StaticResource/wwwroot; } #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; } } proxy_cache_path cache/nginx/ levels=1:2 keys_zone=mycache:64m; server { listen 8091; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #location / { # root html; # index index.html index.htm; #} location / { proxy_cache mycache; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_methods GET HEAD; proxy_cache_revalidate on; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_valid any 1m; proxy_cache_min_uses 1; proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504; proxy_pass http://localhost:8089; } #靜態資源 location ~ \.(ico|js|css|png|jpg|mp4)$ { proxy_pass http://localhost:8090; } #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; } } # https 虛擬主機 server { listen 4435 ssl; server_name localhost; ssl_certificate D:/work/net/grpc-cluster/server-cert.pem; ssl_certificate_key D:/work/net/grpc-cluster/server-key.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; location / { proxy_pass http://XT.EBusiness; } } } #動態負載均衡配置 upstream XT.EBusiness{ server localhost:5001 max_fails=2 fail_timeout=10s; server localhost:5002 max_fails=2 fail_timeout=10s; server localhost:5003 backup; } } #數據庫代理 stream { server { listen 13306; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass localhost:3306; } upstream mysql { server localhost:3306; } }
3.動靜分離共享資源
缺陷:如果動靜資源在一個虛擬主機中,那么靜態資源和動態資源共享同一個資源,如果靜態或者動態資源訪問量比較大,把資源消耗殆盡,動態和靜態資源互相會進行影響,導致系統整體上性能下降,如何提升性能?
方案:Include
Include nginx.https.conf
.NET Nginx 分布式
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。