配置apache和nginx的tomcat負載均衡

来源:http://www.cnblogs.com/chenmh/archive/2016/01/25/5121830.html
-Advertisement-
Play Games

概述本篇文章主要介紹apache和nginx的相關配置,tomcat的相關安裝配置我在前面有寫過一篇,詳細介紹通過兩種配置方法配置nginx。tomcat配置參考:http://www.cnblogs.com/chenmh/p/5048893.htmlapache配置源碼安裝./configure ...


概述  

本篇文章主要介紹apache和nginx的相關配置,tomcat的相關安裝配置我在前面有寫過一篇,詳細介紹通過兩種配置方法配置nginx。

tomcat配置參考:http://www.cnblogs.com/chenmh/p/5048893.html

 

apache配置

 源碼安裝

./configure --prefix=/usr/local/apache (安裝目錄)
make
make install

對於2.4以上版本的apache在進行源碼安裝的時候有的機器會提示缺少部分插件例如:apr、apr-util、pcre,需要先將這些插件安裝好然後再安裝apache

YUM安裝

yum install httpd

配置tomcate負載均衡

進入安裝目錄cnf.d文件夾下麵,創建一個.conf尾碼的文件

touch apa.conf
vim apa.cnf
Listen 8051
<VirtualHost *:8051>

ServerAdmin root@localhost
ServerName  localhost

ErrorLog    "/etc/httpd/logs/app_error.log"

CustomLog   "/etc/httpd/logs/app_access.log" common

ProxyPass /   balancer://cluster/  stickysession=JSESSIONID|jsessionid nofailover=On lbmethod=byrequests timeout=5 maxattempts=3


ProxyPassReverse / balancer://cluster/

ProxyRequests Off

ProxyPreserveHost On
<proxy balancer://cluster>

#BalancerMember ajp://localhost:8009 route=tomcat_a
BalancerMember http://localhost:8080/Front

#BalancerMember ajp://localhost:8010 route=tomcat_b
BalancerMember http://localhost:8081/Front


</proxy>

</VirtualHost>

配置文件一開始配置了apache的埠8051,然後在最下麵配置了連接tomcat的項目埠,我這裡的配置的apache和tomcat都在一臺伺服器上面分別使用了不同的埠,在tomcat的webapps路徑下麵創建了一個Front項目,項目下麵存放了一個test.jsp的測試頁面

cd /usr/local/tomcat1/webapps

mkdir Front

cd Front

touch test.jsp

vim test.jsp
<font color=red>testa</font><b>

同樣在tomcat2中也使用同樣的方法創建測試頁面,但是將testa改成testb

 

接下來確保8051埠被啟用,也可以關閉防火牆,tomcat1、tomcat2都已啟動,啟動方法參考前面我寫的關於tomcat的文章,確保httpd也以啟動,如果已經將httpd加入了啟動服務,

啟動http服務
service httpd start
查看服務啟動狀態
service httpd status

接下來在瀏覽器中輸入:http://localhost:8051/test.jsp

 如果刷新連接頁面結果是在testa和testb之間切換,說明配置成功。

 

nginx配置

源碼安裝

創建nginx用戶組
groupadd nginx

創建nginx用戶
useradd -g nginx -s /sbin/nologin nginx

安裝相關插件
yum install –y make zlib-devel openssl-devel pcre-devel

解壓nginx安裝包
tar zxvf nginx-1.8.0.tar.gz

進入安裝包
cd nginx-1.8.0

安裝
 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module

make && make install

 

單個文件配置方法

創建測試頁面

cd /usr/local/tomcat1/webapps

mkdir MFront

cd MFront

touch index.jsp

vim index.jsp 

<font color=red>MFronttesta</font><b>

tomcat2也同樣操作,將MFronttesta改成MFronttestb

 

配置文件

cd /usr/local/nginx/conf

vim nginx.conf
user nginx nginx;   
worker_processes 8;   
pid /usr/local/nginx/nginx.pid;   
worker_rlimit_nofile 102400;   
events   
{   
use epoll;   
worker_connections 102400;   
}   
http   
{   
  include       mime.types;   
  default_type  application/octet-stream;   
  fastcgi_intercept_errors on;   
  charset  utf-8;   
  server_names_hash_bucket_size 512;   
  client_header_buffer_size 1024k;   
  large_client_header_buffers 4 128k;   
  client_max_body_size 300m;   
  sendfile on;   
  tcp_nopush     on;   
      
  keepalive_timeout 600;   
      
  tcp_nodelay on;   
  client_body_buffer_size  512k;   
    
  proxy_connect_timeout    5;   
  proxy_read_timeout       600;   
  proxy_send_timeout       50;   
  proxy_buffer_size        16k;   
  proxy_buffers            4 64k;   
  proxy_busy_buffers_size 128k;   
  proxy_temp_file_write_size 128k;   
      
  gzip on;   
  gzip_min_length  1k;   
  gzip_buffers     4 16k;   
  gzip_http_version 1.1;   
  gzip_comp_level 2;   
  gzip_types       text/plain application/x-javascript text/css application/xml;   
  gzip_vary on;   
      
###2012-12-19 change nginx logs   
log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" '  
              '$status $body_bytes_sent "$http_referer" '  
              '"$http_user_agent"  $request_time $remote_addr';   
                  
upstream Front {   
 server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;   
 server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;   
}   
upstream MFront {
 server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
 server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
}

    
####chinaapp.sinaapp.com   
server {   
    listen 80;   
    server_name  localhost;   
        
    location /Front  
    {   
    proxy_next_upstream http_502 http_504 error timeout invalid_header;   
    proxy_set_header Host  $host;   
    proxy_set_header X-Real-IP $remote_addr;   
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
    proxy_pass http://Front;   
    expires      3d;   
    }   
    location /MFront
    {
    proxy_next_upstream http_502 http_504 error timeout invalid_header;
    proxy_set_header Host  $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://MFront;
    expires      3d;
    }

     
  }   
    
}

註意標紅色的地方,配置文件中我配置了兩個項目分別是Front和MFront,在下麵定義server裡面的項目名稱一定要跟上面配置負載的姓名名稱保持一致否則會出錯。

多個配置文件配置方法

 對於需要配置多個項目的時候如果所有的信息都配置在一個nginx配置文件當中會導致配置文件內容過長,不好查看,下麵就使用多個配置文件的配置方法

cd /usr/local/nginx/conf

創建相關聯的配置文件
touch gzip.conf  proxy.conf host.conf web.conf

vim nginx.conf

user  nginx nginx;
worker_processes  4;   # 工作進程數,為CPU的核心數或者兩倍
error_log   logs/error.log  crit; # debug|info|notice|warn|error|crit
pid        logs/nginx.pid;

events {
    use epoll;                            #Linux最常用支持大併發的事件觸發機制
    worker_connections  65535;
}

http {
    include       mime.types;             #設定mime類型,類型由mime.type文件定義
    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;

#設定請求緩衝
    server_names_hash_bucket_size 256;    #增加,原為128
    client_header_buffer_size 256k;       #增加,原為32k
    large_client_header_buffers 4 256k;   #增加,原為32k
    types_hash_max_size 2048;
     proxy_headers_hash_bucket_size   1024;
     proxy_headers_hash_max_size   512;
    #size limits
   client_max_body_size          50m;    #允許客戶端請求的最大的單個文件位元組數
   client_header_timeout         3m;
   client_body_timeout           3m;
   send_timeout                  3m;

   sendfile                      on;
    tcp_nopush                    on;
    keepalive_timeout             120;
   tcp_nodelay                   on;
   server_tokens                 off;    #不顯示nginx版本信息

   #  client_body_buffer_size         1024K;
   # client_header_buffer_size       128k;
   # client_max_body_size            512m;
   # large_client_header_buffers     8 128k;

  #  client_body_timeout             10;
  #  client_header_timeout           10;
  #  keepalive_timeout               60;
  #  send_timeout                    10;

    limit_conn_zone $binary_remote_addr zone=perip:10m; #添加limit_zone,限制同一IP併發數
    #fastcgi_intercept_errors on;        #開啟錯誤頁面跳轉

    include  gzip.conf;    #壓縮配置文件
    include  proxy.conf;    #proxy_cache參數配置文件
    include  host.conf;    #nginx虛擬主機包含文件目錄
    include  web.conf;    #後端WEB伺服器列表文件
}

註意最後的include這4個相關配置文件,其它的一些相關配置分別在這四個配置文件中配置。

cat gzip.conf

#啟動預壓縮功能,對所有類型的文件都有效
gzip_static on;    #開啟nginx_static後,對於任何文件都會先查找是否有對應的gz文件

#找不到預壓縮文件,進行動態壓縮
gzip on;
gzip_min_length   1k;  #設置最小的壓縮值,單位為bytes.超過設置的min_length的值會進行壓縮,小於的不壓縮.
gzip_comp_level   3;   #壓縮等級設置,1-9,1是最小壓縮,速度也是最快的;9剛好相反,最大的壓縮,速度是最慢的,消耗的CPU資源也多
gzip_buffers      16 64k;   #設置系統的緩存大小,以存儲GZIP壓縮結果的數據流,它可以避免nginx頻煩向系統申請壓縮空間大小
gzip_types text/plain application/x-javascript text/css text/javascript;

#關於gzip_types,如果你想讓圖片也開啟gzip壓縮,那麼用以下這段吧:
#gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png;

#gzip公共配置
gzip_http_version 1.1;      #識別http的協議版本(1.0/1.1)
gzip_proxied      any;      #設置使用代理時是否進行壓縮,預設是off的
gzip_vary         on;       #和http頭有關係,加個vary頭,代理判斷是否需要壓縮
gzip_disable "MSIE [1-6]."; #禁用IE6的gzip壓縮

cat proxy.conf

proxy_temp_path   /tmp/proxy_temp;
proxy_cache_path  /tmp/proxy_cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=3g;
#client_body_buffer_size  512k;     #原為512k
proxy_connect_timeout    50;       #代理連接超時
proxy_read_timeout       600;      #代理髮送超時
proxy_send_timeout       600;      #代理接收超時
proxy_buffer_size        128k;     #代理緩衝大小,原為32k
proxy_buffers           16 256k;   #代理緩衝,原為4 64k
proxy_busy_buffers_size 512k;      #高負荷下緩衝大小,原為128k
proxy_temp_file_write_size 1024m;  #proxy緩存臨時文件的大小原為128k
#proxy_ignore_client_abort  on;    #不允許代理端主動關閉連接
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404 http_502 http_504;
~                                                                                               

cat host.conf

server {
        listen       80;
        server_name  localhost;
        #charset GB2312;

location /MFront {
                        proxy_next_upstream http_502 http_504 error timeout invalid_header;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $http_x_forwarded_for;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_redirect                off;
                        proxy_http_version 1.1;
                        proxy_set_header Connection "";
                        proxy_pass http://MFront;
       }
location /Front {
                        proxy_next_upstream http_502 http_504 error timeout invalid_header;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $http_x_forwarded_for;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_redirect                off;
                        proxy_http_version 1.1;
                        proxy_set_header Connection "";
                        proxy_pass http://Front;
       }

}

cat web.conf

upstream MFront {
  server 127.0.0.1:8080  max_fails=1 fail_timeout=60s;
  server 127.0.0.1:8081  max_fails=1 fail_timeout=60s;
}
upstream Front {
  server 127.0.0.1:8080  max_fails=1 fail_timeout=60s;
  server 127.0.0.1:8081  max_fails=1 fail_timeout=60s;
}

特別要註意web.conf配置文件中的項目要和host.conf配置文件中的項目名稱保持一致

接下來在url中輸入:http://localhost/MFront/

同樣顯示內容會在MFronttesta和MFronttestb之間切換說明配置正確

配置nginx啟動

vim /etc/init.d/nginx

#!/bin/bash
# chkconfig: 345 99 20
# description: nginx 
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
echo "Nginx servicestart success."
;;
stop)
kill -s QUIT $(cat $PIDF)
echo "Nginx service stopsuccess."
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
echo"reload Nginx configsuccess."
;;
*)
echo "Usage: $0{start|stop|restart|reload}"
exit 1
esac
授予可執行文件
chmod +x /etc/init.d/nginx
#添加到啟動服務
chkconfig --add nginx

#配置自動啟動
chkconfig --level 2345 nginx on

 

總結

 對於配置文件中還有很多參數的調配這裡就暫時不做細說,如果後面有時間的話會單獨講。

 

 

 

備註:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明鏈接。

《歡迎交流討論》


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 常常需要將資料庫中的數據生成文檔,由於比較喜歡腳本的方式,所以就需要使用spool的時候進行格式設置,以下簡單整理了一下oracle中進行格式設置的一些東西,一共十八條,其實常用的也就那麼幾個,稍後會附上自己寫的簡單的shell操作的腳本,希望能供同樣有需要的共同交流,也作為自己的備份。set命令的...
  • MyCAT預設字元集是UTF8下麵通過查看日誌來驗證不同的MySQL客戶端字元集和伺服器字元集對於MyCAT的影響。日誌中與字元集有關的主要有三部分:1. 初始化MyCAT連接池2. 心跳檢測3. 在執行SQL語句時的連接同步。因為MyCAT實現的是三節點的讀寫分離和自動切換,以下修改的均是loca...
  • 用戶定義函數(UDF)分類 SQL SERVER中的用戶定義函數(User Defined Functions 簡稱UDF)分為標量函數(Scalar-Valued Function)和表值函數(Table-Valued Function)。其中表值函數又分為Inline table-valued ...
  • 1、環境準備:1 mkdir /home/mongodb #創建MongoDB程式存放目錄2 mkdir /data/mongodata -p #創建數據存放目錄3 mkdir /data/log/mongolog -p #創建日誌存放目錄2、下載:1 curl -...
  • IdNameRegisterDate1澎澎2007/1/5 00:00:002丁丁2007/1/6 04:37:003亞亞2007/1/7 00:00:00資料庫的數據如上。若以RegisterDate為查詢條件,找出'丁丁'這條記錄,則查詢語句為SELECT ID, Name, RegisterD...
  • 環境:Spark-1.5.0 HBase-1.0.0。場景:HBase中按天分表存數據,要求將任意時間段的數據合併成一個RDD以做後續計算。嘗試1: 尋找一次讀取多個表的API,找到最接近的是一個叫MultiTableInputFormat的東西,它在MapReduce中使用良好, 但沒有找到用於....
  • MyCAT支持多種分片規則,下麵測試的這種是分片枚舉。適用場景,列值的個數是固定的,譬如省份,月份等。在這裡,需定義三個值,規則均是在rule.xml中定義。1. tableRule2.function3.mapFile首先,定義tableRule, ...
  • 統計存儲過程,這裡是將統計的結果插入一個表中,後臺可以有定時任務來調此存儲過程。以下業務是統計倉庫中商品流轉情況,包括:日期、商品總數、入庫數量、出庫數量。BEGIN DECLARE ES_COR_CODE VARCHAR(20); -- 需要定義接收游標數據的變數 DECLARE...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...