日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx +Tomcat 实现动静态分离(转)

發布時間:2023/12/9 Nginx 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
  • #user??nobody;??
  • worker_processes??1;??
  • error_log??logs/error.log;??
  • pid???????logs/nginx.pid;??
  • ??
  • events?{??
  • ????use?epoll;??
  • ????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;??
  • keepalive_timeout??65;??
  • gzip?on;????
  • gzip_min_length??1k;????
  • gzip_buffers?????4??16k;????
  • gzip_http_version?1.0;????
  • gzip_comp_level?2;????
  • gzip_types??text/plain?application/x-javascript?text/css?application/xml;????
  • gzip_vary?on;????
  • ????server?{??
  • ????????listen???????80?default;??
  • ????????server_name??localhost;??
  • ????????<span?style="color:#ff0000;">?location?~?.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$?//由nginx處理靜態頁面</span>??
  • ?????????????{???
  • ??????????????????root???/usr/tomcat/apache-tomcat-8081/webapps/ROOT;???
  • ???????????????????expires??????30d;?//緩存到客戶端30天??
  • ???????????????}???
  • ????????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;??
  • ????????}??
  • ?????????<span?style="color:#ff0000;">?location?~??\.(jsp|do)$??{//所有jsp的動態請求都交給Tomcat處理?</span>??
  • ???????????<span?style="color:#ff0000;">?proxy_pass?http://192.168.74.129:8081;??//來自jsp或者do的后綴的請求交給tomcat處理</span>??
  • ????????????proxy_redirect?off;??
  • ????????????proxy_set_header?Host?$host;????//后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP??
  • ????????????proxy_set_header?X-Real-IP?$remote_addr;??
  • ????????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;??
  • ????????????client_max_body_size?10m;???//允許客戶端請求的最大單文件字節數??
  • ????????????client_body_buffer_size?128k;?//緩沖區代理緩沖用戶端請求的最大字節數??
  • ?????????????proxy_connect_timeout?90;???//nginx跟后端服務器連接超時時間??
  • ?????????????proxy_read_timeout?90;?????//連接成功后,后端服務器響應時間??
  • ?????????????proxy_buffer_size?4k;??????//設置代理服務器(nginx)保存用戶頭信息的緩沖區大小??
  • ?????????????proxy_buffers??6??32k;???????//proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置??
  • ????????????proxy_busy_buffers_size?64k;//高負荷下緩沖大小(proxy_buffers*2)??
  • ???????????proxy_temp_file_write_size?64k;?//設定緩存文件夾大小,大于這個值,將從upstream服務器傳??
  • ????????}??
  • ????????
  • ????}????
  • ??
  • }??
  • ?第二步:在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
  • #user??nobody;??
  • worker_processes??1;??
  • error_log??logs/error.log;??
  • pid???????logs/nginx.pid;??
  • ??
  • events?{??
  • ????use?epoll;??
  • ????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;??
  • keepalive_timeout??65;??
  • gzip?on;????
  • gzip_min_length??1k;????
  • gzip_buffers?????4??16k;????
  • gzip_http_version?1.0;????
  • gzip_comp_level?2;????
  • gzip_types??text/plain?application/x-javascript?text/css?application/xml;????
  • gzip_vary?on;????
  • <span?style="color:#ff0000;">upstream?localhost_server?{??
  • ????????ip_hash;??
  • ????????server?192.168.74.129:8081;??
  • ????????server?192.168.74.129:8082;??
  • ????}</span>??
  • ??
  • ????server?{??
  • ????????listen???????80?default;??
  • ????????server_name??localhost;??
  • ???????<span?style="color:#ff0000;">??location?~?.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$?//由nginx處理靜態頁面</span>??
  • ?????????????{???
  • ??????????????????root???/usr/tomcat/apache-tomcat-8081/webapps/ROOT;???
  • ???????????????????expires??????30d;?//緩存到客戶端30天??
  • ???????????????}???
  • ????????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;??
  • ????????}??
  • ??????????<span?style="color:#ff0000;">location?~??\.(jsp|do)$??{//所有jsp的動態請求都交給Tomcat處理?</span>??
  • ???????????<span?style="color:#ff0000;">proxy_pass?http://localhost_server;??//來自jsp或者do的后綴的請求交給tomcat處理</span>??
  • ????????????proxy_redirect?off;??
  • ????????????proxy_set_header?Host?$host;????//后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP??
  • ????????????proxy_set_header?X-Real-IP?$remote_addr;??
  • ????????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;??
  • ????????????client_max_body_size?10m;???//允許客戶端請求的最大單文件字節數??
  • ????????????client_body_buffer_size?128k;?//緩沖區代理緩沖用戶端請求的最大字節數??
  • ?????????????proxy_connect_timeout?90;???//nginx跟后端服務器連接超時時間??
  • ?????????????proxy_read_timeout?90;?????//連接成功后,后端服務器響應時間??
  • ?????????????proxy_buffer_size?4k;??????//設置代理服務器(nginx)保存用戶頭信息的緩沖區大小??
  • ?????????????proxy_buffers??6??32k;???????//proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置??
  • ????????????proxy_busy_buffers_size?64k;//高負荷下緩沖大小(proxy_buffers*2)??
  • ???????????proxy_temp_file_write_size?64k;?//設定緩存文件夾大小,大于這個值,將從upstream服務器傳??
  • ????????}??
  • ????????
  • ????}????
  • ??
  • }??
  • ?

    ?

    說明:

    ???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?同時使用。

    總結

    以上是生活随笔為你收集整理的Nginx +Tomcat 实现动静态分离(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。