配置apache和nginx的tomcat負載均衡
來自: http://www.cnblogs.com/chenmh/p/5121830.html
本篇文章主要介紹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></pre>
配置文件一開始配置了apache的端口8051,然后在最下面配置了連接tomcat的項目端口,我這里的配置的apache和tomcat都在一臺服務器上面分別使用了不同的端口,在tomcat的webapps路徑下面創建了一個Front項目,項目下面存放了一個test.jsp的測試頁面
cd /usr/local/tomcat1/webappsmkdir Front
cd Front
touch test.jsp
vim test.jsp</pre>
<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</pre>
單個文件配置方法
創建測試頁面
cd /usr/local/tomcat1/webappsmkdir MFront
cd MFront
touch index.jsp
vim index.jsp
<font color=red>MFronttesta</font><b></pre>
tomcat2也同樣操作,將MFronttesta改成MFronttestb
配置文件
cd /usr/local/nginx/confvim nginx.conf</pre>
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; }
}
}</pre>
注意標紅色的地方,配置文件中我配置了兩個項目分別是Front和MFront,在下面定義server里面的項目名稱一定要跟上面配置負載的姓名名稱保持一致否則會出錯。
多個配置文件配置方法
對于需要配置多個項目的時候如果所有的信息都配置在一個nginx配置文件當中會導致配置文件內容過長,不好查看,下面就使用多個配置文件的配置方法
cd /usr/local/nginx/conf創建相關聯的配置文件 touch gzip.conf proxy.conf host.conf web.conf</pre>
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服務器列表文件
}</pre>
注意最后的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壓縮</pre>
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; ~ </pre>
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; }
}</pre>
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/bashchkconfig: 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</pre>
授予可執行文件 chmod +x /etc/init.d/nginx#添加到啟動服務 chkconfig --add nginx配置自動啟動
chkconfig --level 2345 nginx on</pre>
總結
對于配置文件中還有很多參數的調配這里就暫時不做細說,如果后面有時間的話會單獨講。
備注:
作者: pursuer.chen
博客: http://www.cnblogs.com/chenmh
本站點所有隨筆都是原創,歡迎轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接。
《歡迎交流討論》