Nginx +Tomcat 實現動靜態分離(轉)

Nginx?+Tomcat?實現動靜態分離

?

???動靜態分離就是Nginx處理客戶端的請求的靜態頁面(html頁面)或者圖片,Tomcat處理客戶端請求的動態頁面(jsp頁面),因為Nginx處理的靜態頁面的效率高于Tomcat。

一.Nginx簡介:

???Nginx一個高性能的HTTP和反向代理服務器,?具有很高的穩定性和支持熱部署、模塊擴展也很容易。當遇到訪問的峰值,或者有人惡意發起慢速連接時,也很可能會導致服務器物理內存耗盡頻繁交換,失去響應,只能重啟服務器,Nginx采取了分階段資源分配技術,處理靜態文件和無緩存的反向代理加速,實現了負載均衡和容錯,在這樣高并發的訪問情況下,能經受起高并發的處理。

?

二.Nginx安裝與配置

? 第一步:下載Nginx?安裝包?

?????http://nginx.org/en/download.html

??第二步:在Linux上安裝Nginx?

? ? 1.#tar?zxvf?nginx-1.7.8.tar.gz??//解壓

? ? 2.#cd?nginx-1.7.8

? ? 3.#./configure?--with-http_stub_status_module?--with-http_ssl_module//啟動server狀態頁和https模塊

會報缺少PCRE?library錯誤,如圖所示:

?

這時先執行第三步安裝PCRE?,然后在3執行一下,這就可以了

???4.make?&&?make?install?//編譯并安裝

???5.測試一下安裝配置是否正確,Nginx安裝在/usr/local/nginx

? ? #/usr/local/nginx/sbin/nginx?-t,如圖所示:

? ??

?

??第三步:在linux上安裝PCRE?

? ? 1.#tar?zxvf?pcre-8.10.tar.gz??//解壓

? ? 2.cd?pcre-8.10

? ? 3../configure

? ? 4.make?&&?make?install//編譯并安裝

?

三.Nginx?+Tomcat?實現動靜態分離

?

???動靜態分離就是Nginx處理客戶端的請求的靜態頁面(html頁面)或者圖片,Tomcat處理客戶端請求的動態頁面(jsp頁面),因為Nginx處理的靜態頁面的效率高于Tomcat。

??第一步:我們要配置Nginx文件

?#vi?/usr/local/nginx/conf/nginx.conf

[java]?view plaincopy
  1. #user??nobody;??
  2. worker_processes??1;??
  3. error_log??logs/error.log;??
  4. pid???????logs/nginx.pid;??
  5. ??
  6. events?{??
  7. ????use?epoll;??
  8. ????worker_connections??1024;??
  9. }??
  10. ??
  11. ??
  12. http?{??
  13. ????include???????mime.types;??
  14. ????default_type??application/octet-stream;??
  15. ????log_format??main??'$remote_addr?-?$remote_user?[$time_local]?"$request"?'??
  16. ?????????????????????'$status?$body_bytes_sent?"$http_referer"?'??
  17. ?????????????????????'"$http_user_agent"?"$http_x_forwarded_for"';??
  18. ??
  19. ????access_log??logs/access.log??main;??
  20. ????sendfile????????on;??
  21. keepalive_timeout??65;??
  22. gzip?on;????
  23. gzip_min_length??1k;????
  24. gzip_buffers?????4??16k;????
  25. gzip_http_version?1.0;????
  26. gzip_comp_level?2;????
  27. gzip_types??text/plain?application/x-javascript?text/css?application/xml;????
  28. gzip_vary?on;????
  29. ????server?{??
  30. ????????listen???????80?default;??
  31. ????????server_name??localhost;??
  32. ????????<span?style="color:#ff0000;">?location?~?.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$?//由nginx處理靜態頁面</span>??
  33. ?????????????{???
  34. ??????????????????root???/usr/tomcat/apache-tomcat-8081/webapps/ROOT;???
  35. ???????????????????expires??????30d;?//緩存到客戶端30天??
  36. ???????????????}???
  37. ????????error_page??404??????????????/404.html;??
  38. ??
  39. ????????#redirect?server?error?pages?to?the?static?page?/50x.html??
  40. ??????????
  41. ????????error_page???500?502?503?504??/50x.html;??
  42. ????????location?=?/50x.html?{??
  43. ????????????root???html;??
  44. ????????}??
  45. ?????????<span?style="color:#ff0000;">?location?~??\.(jsp|do)$??{//所有jsp的動態請求都交給Tomcat處理?</span>??
  46. ???????????<span?style="color:#ff0000;">?proxy_pass?http://192.168.74.129:8081;??//來自jsp或者do的后綴的請求交給tomcat處理</span>??
  47. ????????????proxy_redirect?off;??
  48. ????????????proxy_set_header?Host?$host;????//后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP??
  49. ????????????proxy_set_header?X-Real-IP?$remote_addr;??
  50. ????????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;??
  51. ????????????client_max_body_size?10m;???//允許客戶端請求的最大單文件字節數??
  52. ????????????client_body_buffer_size?128k;?//緩沖區代理緩沖用戶端請求的最大字節數??
  53. ?????????????proxy_connect_timeout?90;???//nginx跟后端服務器連接超時時間??
  54. ?????????????proxy_read_timeout?90;?????//連接成功后,后端服務器響應時間??
  55. ?????????????proxy_buffer_size?4k;??????//設置代理服務器(nginx)保存用戶頭信息的緩沖區大小??
  56. ?????????????proxy_buffers??6??32k;???????//proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置??
  57. ????????????proxy_busy_buffers_size?64k;//高負荷下緩沖大小(proxy_buffers*2)??
  58. ???????????proxy_temp_file_write_size?64k;?//設定緩存文件夾大小,大于這個值,將從upstream服務器傳??
  59. ????????}??
  60. ????????
  61. ????}????
  62. ??
  63. }??

?第二步:在tomcat?下的webapps/ROOT下新建index.html靜態頁面,如圖所示:

?

? 第三步:啟動Nginx服務

??#sbin/nginx ? 如圖所示:

? ?

?

?第四步:我們頁面訪問http://192.168.74.129/index.html?能正常顯示正常的內容,如圖所示:

???

??

?第五步:測試Nginx?和Tomcat高并發的情況下處理靜態頁面性能如何?

? ? 采用了?Linux??ab網站壓力測試命令來測試一下性能

???1.測試一下Nginx?處理靜態頁面的性能

?????ab?-c?100?-n?1000?http://192.168.74.129/index.html

?????這個表示同時處理100個請求并運行1000次index.html文件,如圖所示:

? ? ?

? ?2.測試一下Tomcat處理靜態頁面的性能

?????ab?-c?100?-n?1000?http://192.168.74.129:8081/index.html

?????這個表示同時處理100個請求并運行1000次index.html文件,如圖所示:

? ? ?

? ?相同的處理靜態文件,Nginx處理的靜態性能比Tomcat?好。Nginx每秒能請求5388次,而tomcat只請求2609次。

?

總結:我們在Nginx配置文件中,配置靜態交給Nginx處理,動態請求交給Tomcat,提供了性能。

?

四.Nginx?+Tomcat?負載均衡與容錯

? 我們在高并發的情況下,為了提高服務器的性能,減少了單臺服務器的并發壓力,我們采用了集群部署,還能解決為了避免單臺服務器掛掉,服務不能訪問這種情況下,處理容錯問題。

?

?第一步:我們這邊部署了兩天tomcat服務器,192.168.74.129:8081和192.168.74.129:8082

?

?第二步:Nginx作為了代理服務器,客服端請求服務器端時,采用了負載均衡來處理,這樣就能平均的把客服端請求分發到每一天服務器,這樣減少服務器端的壓力。配置Nginx下的nginx.conf文件。

? ?

??#vi?/usr/local/nginx/conf/nginx.conf

? ??

[java]?view plaincopy
  1. #user??nobody;??
  2. worker_processes??1;??
  3. error_log??logs/error.log;??
  4. pid???????logs/nginx.pid;??
  5. ??
  6. events?{??
  7. ????use?epoll;??
  8. ????worker_connections??1024;??
  9. }??
  10. ??
  11. ??
  12. http?{??
  13. ????include???????mime.types;??
  14. ????default_type??application/octet-stream;??
  15. ????log_format??main??'$remote_addr?-?$remote_user?[$time_local]?"$request"?'??
  16. ?????????????????????'$status?$body_bytes_sent?"$http_referer"?'??
  17. ?????????????????????'"$http_user_agent"?"$http_x_forwarded_for"';??
  18. ??
  19. ????access_log??logs/access.log??main;??
  20. ????sendfile????????on;??
  21. keepalive_timeout??65;??
  22. gzip?on;????
  23. gzip_min_length??1k;????
  24. gzip_buffers?????4??16k;????
  25. gzip_http_version?1.0;????
  26. gzip_comp_level?2;????
  27. gzip_types??text/plain?application/x-javascript?text/css?application/xml;????
  28. gzip_vary?on;????
  29. <span?style="color:#ff0000;">upstream?localhost_server?{??
  30. ????????ip_hash;??
  31. ????????server?192.168.74.129:8081;??
  32. ????????server?192.168.74.129:8082;??
  33. ????}</span>??
  34. ??
  35. ????server?{??
  36. ????????listen???????80?default;??
  37. ????????server_name??localhost;??
  38. ???????<span?style="color:#ff0000;">??location?~?.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$?//由nginx處理靜態頁面</span>??
  39. ?????????????{???
  40. ??????????????????root???/usr/tomcat/apache-tomcat-8081/webapps/ROOT;???
  41. ???????????????????expires??????30d;?//緩存到客戶端30天??
  42. ???????????????}???
  43. ????????error_page??404??????????????/404.html;??
  44. ??
  45. ????????#redirect?server?error?pages?to?the?static?page?/50x.html??
  46. ??????????
  47. ????????error_page???500?502?503?504??/50x.html;??
  48. ????????location?=?/50x.html?{??
  49. ????????????root???html;??
  50. ????????}??
  51. ??????????<span?style="color:#ff0000;">location?~??\.(jsp|do)$??{//所有jsp的動態請求都交給Tomcat處理?</span>??
  52. ???????????<span?style="color:#ff0000;">proxy_pass?http://localhost_server;??//來自jsp或者do的后綴的請求交給tomcat處理</span>??
  53. ????????????proxy_redirect?off;??
  54. ????????????proxy_set_header?Host?$host;????//后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP??
  55. ????????????proxy_set_header?X-Real-IP?$remote_addr;??
  56. ????????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;??
  57. ????????????client_max_body_size?10m;???//允許客戶端請求的最大單文件字節數??
  58. ????????????client_body_buffer_size?128k;?//緩沖區代理緩沖用戶端請求的最大字節數??
  59. ?????????????proxy_connect_timeout?90;???//nginx跟后端服務器連接超時時間??
  60. ?????????????proxy_read_timeout?90;?????//連接成功后,后端服務器響應時間??
  61. ?????????????proxy_buffer_size?4k;??????//設置代理服務器(nginx)保存用戶頭信息的緩沖區大小??
  62. ?????????????proxy_buffers??6??32k;???????//proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置??
  63. ????????????proxy_busy_buffers_size?64k;//高負荷下緩沖大小(proxy_buffers*2)??
  64. ???????????proxy_temp_file_write_size?64k;?//設定緩存文件夾大小,大于這個值,將從upstream服務器傳??
  65. ????????}??
  66. ????????
  67. ????}????
  68. ??
  69. }??

?

?

說明:

???1.upstream?中的server是指向服務器的IP(域名)和端口,后面還可以帶參數

? ? ?1)weight?:設置服務器的轉發權重?默認值是1。

? ? ?2)max_fails?:?是與fail_timeout配合使用,是指在fail_timeout時間段內,如果服務器轉發失敗次數超過max_fails設置的值,這臺服務器就不 ? ? ? ? ? ? ? ? ? ? 可用,max_fails默認值是1

? ? 3)fail_timeout?:表示在該時間段內轉發失敗多少次就認為這臺服務器不能用。

? ? 4)down:表示這臺服務器不能用。

? ? ?5)backup:表示使ip_hash設置的針對這臺服務器無效,只有在所有非備份的服務器都失效后,才會向服務器轉發請求。

?

? 2.ip_hash?設置是在集群的服務器中,如果同一個客戶端請求轉發到多個服務器上,每臺服務器可能緩存同一份信息,這會造成資源的浪費,采用的ip_hash設置會把同一個客戶端第二次請求相同的信息時,會轉發到第一次請求的服務器端。但ip_hash不能和weight?同時使用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282394.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282394.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282394.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Beanstalked的初步了解和使用(包括利用beanstalkd 秒殺消息隊列的實現)

一 Beanstalkd 是什么 Beanstalkd&#xff0c;一個高性能、輕量級的分布式內存隊列系統二 Beanstalkd 特性 1. 優先級&#xff08;priority&#xff09; 注&#xff1a;優先級就意味 支持任務插隊&#xff08;數字越小&#xff0c;優先級越高&#xff0c;0的優先級最高&#…

WPF效果第二百篇之再玩Gamma曲線

前面效果中使用比較low的方式實現了2.4的Gamma曲線;雖說后面加了點動畫呈現效果,但也就是個過渡版;今天才基本符合需求的效果:1、還是基于WPF效果第一百七十八篇之貝塞爾曲線他來實現的:3個ListBox 3個LandmarkControl2、在LandmarkControl增加插點位事件View:LandmarkControl …

2018企業面試總匯(答案請自行搜羅) 新增19年阿里面題(反向拓展技術棧)

Java 1.多個線程同時讀寫&#xff0c;讀線程的數量遠遠大于寫線程&#xff0c;你認為應該如何解決并發的問題&#xff1f;你會選擇加什么樣的鎖&#xff1f; 2.JAVA的AQS是否了了解&#xff0c;它是干嘛的&#xff1f; 3.除了synchronized關鍵字之外&#xff0c;你是怎么來保障…

skynet源碼閱讀5--協程調度模型

注&#xff1a;為方便理解&#xff0c;本文貼出的代碼部分經過了縮減或展開&#xff0c;與實際skynet代碼可能會有所出入。 作為一個skynet actor&#xff0c;在啟動腳本被加載的過程中&#xff0c;總是要調用skynet.start和skynet.dispatch的&#xff0c;前者在skynet-os中…

ASP.NET Core GRPC 和 Dubbo 互通

一.前言Dubbo 是比較流行的服務治理框架&#xff0c;國內不少大廠都在使用。以前的 Dubbo 使用的是私有協議&#xff0c;采集用的 hessian 序列化&#xff0c;對于多語言生態來說是極度的不友好。現在 Dubbo 發布了新版本 v3&#xff0c;推出了基于 gRPC 的新協議 Triple&#…

詳解C# 迭代器

[引用&#xff1a;https://www.cnblogs.com/yangecnu/archive/2012/03/17/2402432.html] 迭代器模式是設計模式中行為模式(behavioral pattern)的一個例子&#xff0c;他是一種簡化對象間通訊的模式&#xff0c;也是一種非常容易理解和使用的模式。簡單來說&#xff0c;迭代器模…

利用redis List隊列簡單實現秒殺 PHP代碼實現

一 生產者producer部分 --------------------------------producer 部分注釋------------------------------------------------------------ 用戶在頁面請求之后, 獲取到用戶uid , 跳轉到這個加入隊列的方法 (這里直接在producer中模擬了多個uid) 在方法內部判斷redis隊列長…

使用Filezilla 與 linux遠程服務器傳輸文件時,設置默認打開編輯器

1. 點擊編輯 2. 選擇設置&#xff0c;點擊文本編輯 3. 設置編輯器目錄 4. 確定作用&#xff1a; 這樣設置之后&#xff0c;可以實現在遠程站點欄直接下載并使用phpstorm編輯的作用 正常需要下載之后&#xff0c;再去本地相應下載目錄打開&#xff0c;然后再進行上傳文件&#x…

SDOI2017 新生舞會

01規劃 a1a2a3...ai/b1b2b2..bi最大 設一個k 使得 a1a2a3...ai/b1b2b3...bi>k 變換式子得到 a1a2a3...ai>(b1b2b3..bi)*k a1-b1*ka2-b2*ka3-b3*k...ai-bi*k>0 ai-bi*k即流量 最大費用流二分答案 來&#xff0c;上代碼&#xff1a; #include <cmath> #include &l…

在 .NET 中使用 FluentValidation 進行參數驗證

不用說&#xff0c;參數驗證很重要&#xff0c;無效的參數&#xff0c;可能會導致程序的異常。如果使用Web API或MVC頁面&#xff0c;那么可能習慣了自帶的規則驗證&#xff0c;我們的控制器很干凈&#xff1a;public class User {[Required]public string FirstName { get; se…

在win10系統下怎樣快速切換任務視圖

2019獨角獸企業重金招聘Python工程師標準>>> 切換窗口&#xff1a;Alt Tab 任務視圖&#xff1a;Win Tab (松開鍵盤界面不會消失) 切換任務視圖&#xff1a;Win Ctrl 左/右 創建新的虛擬桌面&#xff1a;Win Ctrl D 關閉當前虛擬桌面&#xff1a;Win Ctrl F4…

uwp應用在debug模式下運行正常,編譯為release版本的時候拋出異常

原因是在代碼中使用了dynamic關鍵字&#xff0c;導致release時.net native優化了代碼造成元數據丟失 所以在代碼中要盡量不用dynamic。轉載于:https://www.cnblogs.com/poison/p/7532142.html

Linux上搭建Samba,實現windows與Linux文件數據同步

一 環境介紹 1. 本地win10 2. Linux (centos7.4) 注&#xff1a;因為運營商方面禁止smb協議&#xff0c;導致無法在云服務器上使用smb&#xff0c;如果不是在虛擬機上操作&#xff0c;而是在云服務器上操作&#xff0c;建議還是使用 filezillaxshell組合 或者 使用finalshell等…

A5-1和DES兩個加密算法的學習

A5-1加密算法 1、基本原理 A5-1加密算法是一種流password&#xff0c;通過密鑰流對明文進行加密。然后用密鑰流進行對密文的解密操作。 這樣的算法主要用于GSM加密。也就是我們平時打電話的時候。通信數據發送到基站&#xff0c;基站發送到還有一個基站&#xff0c;基站發送到接…

從0到1簡易區塊鏈開發手冊V0.3-數據持久化與創世區塊

Author: brucefeng Email: brucefengbrucefeng.com 編程語言:Golang 1.BoltDB簡介 Bolt是一個純粹Key/Value模型的程序。該項目的目標是為不需要完整數據庫服務器&#xff08;如Postgres或MySQL&#xff09;的項目提供一個簡單&#xff0c;快速&#xff0c;可靠的數據庫。 Bolt…

ELK之elasticsearch5.6的安裝和head插件的安裝

這里選擇的elasticsearch為5.6的新版本&#xff0c;根據官方文檔有幾種暗裝方式&#xff1a; https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html 這里選擇rpm包安裝https://www.elastic.co/guide/en/elasticsearch/reference/curre…

Nginx 基礎(一)

一 、Nginx簡述 Nginx是一個開源、高性能、可靠的HTTP中間件、代理服務。二 、常見的HTTP服務 1. HTTPD-Apache基金會 2. IIS-微軟 3. GWS-Google 4. Nginx三、為什么選擇Nginx 原因一&#xff1a;IO多路復用epoll &#xff08;主要解決了并發性的問題&#xff09; 注1&#xf…

Ajax基本案例詳解之load的實現

Ajax的load實現&#xff1a; 看這篇之前建議大家去看看前面兩篇文章&#xff1a; 1.Ajax基本案例詳解之$.ajax的實現 2.Ajax基本案例詳解之$.get的實現 現在寫一下$.load()里面的主要內容&#xff1a; $("#semail").load("doindex.jsp","email1&q…

ASP.NET Core高性能服務器HTTP.SYS

如果我們只需要將ASP.NET CORE應用部署到Windows環境下&#xff0c;并且希望獲得更好的性能&#xff0c;那么我們選擇的服務器類型應該是HTTP.SYS。Windows環境下任何針對HTTP的網絡監聽器/服務器在性能上都無法與HTTP.SYS比肩。[本文節選《ASP.NET Core 6框架揭秘》第18章]一、…

神經網絡- receptive field

記錄一下感受野的理解&#xff1a; 在神經網絡中&#xff0c;感受野的定義是&#xff1a; 神經網絡的每一層輸出的特征圖&#xff08;Feature ap&#xff09;上的像素點在原圖像上映射的區域大小。 1. 神經網絡中&#xff0c;第一個卷積層的 感受野大小&#xff0c;就等于filt…