以前一直用apache來作weblogic的前端,因爲nginx對靜態內容的出色性能,不得不轉投nginx。這裏就不
再寫weblogic的安裝了。 php
安裝nginx
nginx須要pcre作支持,通常系統都自帶,固然能夠本身下載高版本的源碼包安裝,建議你們使用高版本的pcre,
這樣使用正則的時候會有更好的支持。
首先去http://wiki.nginx.org//NginxChs下載nginx,我用了0.7 css
# tar zxvf nginx-0.7.59.tar.gz
# cd nginx-0.7.59
# ./configure –with-http_stub_status_module –prefix=/opt/nginx
# make
# make install html
–with-http_stub_status_module 增長nginx的監控模塊,用來監控 Nginx 的當前狀態。 前端
下面來配置nginx
配置文件,在/opt/nginx/conf下的nginx.conf,爲了省事,直接複製個人配置文件過來:
#user nobody;
worker_processes 10; nginx
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; git
#pid logs/nginx.pid; github
events {
use epoll; //nginx處理鏈接的方法,epoll – 高效的方法,使用於Linux內核2.6版本及之後的系統。
worker_connections 51200;
} web
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」‘; apache
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 75;
#gzip on;
upstream 99ding {
server 124.42.*.***:7002 weight=10;
server 124.42.*.***:7001 weight=10;
} //由於個人weblogic沒有作集羣,因此只能用nginx自帶的負載均衡,不過推薦使用weblogic的集羣
server {
listen 80;
server_name www.test.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ ^/status/ {
stub_status on;
access_log off;
} //監控nginx的狀態:http://www.test.com/status/
location / {
root /opt/html/app;
index index.html index.htm;
expires 30d; //expires是設定cookie的存活時間,我用了30天
}
location ~ ^/(WEB-INF)/ {
deny all;
}
location ~ \.(htm|html|gif|jpg|jpeg|png|bmp|ico|rar|css|js|zip|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ {
root /opt/html/app;
expires 24h;
}
location ~ (\.jsp)|(\.do) {
proxy_pass http://test;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_max_temp_file_size 512m;
} //最關鍵的地方,將jsp和do文件轉給weblogic處理,這裏使用的是上面建立的test(負載均衡的名字),若是不用
負載均衡,能夠把test用 「ip:端口號」來代替,例如http://10.0.0.1:7001
#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;
}
}
}
接下來啓動服務便可,首先檢查配置文件是否有錯誤:
/opt/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf
啓動服務:
/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
nginx用作weblogic前端七層負載
- 準備安裝包(nginx和upstream_hash)
https://github.com/evanmiller/nginx_upstream_hash |
http://nginx.org/download/ |
- 編譯安裝
tar -zxvf nginx-0.7.65.tar.gz |
unzip cep21-nginx_upstream_hash-99ace64.zip |
patch -p0 < ../cep21-nginx_upstream_hash-99ace64/nginx.patch |
patching file src/http/ngx_http_upstream.h |
./configure –add-module=../cep21-nginx_upstream_hash-99ace64 –prefix=/ngboss/webproxy1 |
make && make install |
- 配置nginx
#user webproxy1 webproxy1; |
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 { |
use epoll; |
worker_connections 51200; |
} |
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 15; |
#gzip on; |
userid on; |
userid_name QHAINGBOSSID; |
userid_domain 192.168.102.249; |
userid_path /; |
userid_expires 2d; |
upstream ngboss_cluster { |
hash $cookie_QHAINGBOSSID; |
server 192.168.102.249:8081; |
} |
upstream saleserv_cluster { |
hash $cookie_QHAINGBOSSID; |
server 192.168.102.249:8083; |
} |
server { |
listen 9090; |
server_name localhost; |
proxy_redirect off; |
location /saleserv { |
if ($request_uri ~* 「.*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$」) { |
expires max; |
} |
proxy_pass http://saleserv_cluster; |
} |
location / { |
if ($request_uri ~* 「.*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$」) { |
expires max; |
} |
proxy_pass http://ngboss_cluster; |
} |
} |
} |
- 起停控制
# 啓服務 |
sbin/nginx |
# 停服務 |
sbin/nginx -s stop |
# 平滑重啓 |
kill -HUP `cat logs/nginx.pid ` |
==============================================
http
{
……..
client_max_body_size 300m ; // 容許客戶端請求的最大單個文件字節數
client_body_buffer_size 128k;
// 緩衝區代理緩衝用戶端請求的最大字節數,能夠理解爲先保存到本地再傳給用戶
proxy_connect_timeout 600;
// 跟後端服務器鏈接的超時時間_發起握手等候響應超時時間
proxy_read_timeout 600;
// 鏈接成功後_等候後端服務器響應時間_其實已經進入後端排隊之中等候處理
proxy_send_timeout 600;
proxy_buffer_size 16k; // 會保存用戶的頭信息,供nginx進行規則處理
proxy_buffers 4 32k; // 告訴nginx保存單個用的幾個buffer最大用多大空間
proxy_busy_buffers_size 64k;
proxy_max_temp_file_size 64k;
// proxy緩存臨時文件的大小
|
upstream clubsrv {
server 192.168.0.110:80 weight=5;
server 192.168.0.121:80 weight=5;
}
upstream mysrv {
server 192.168.0.32:80 weight=2;
server 127.0.0.1:8000 weight=8;
}
server {
listen 80;
server_name club.xywy.com;
charset gbk;
root /www;
access_log logs/aaa.log combined;
//下面是第一個域名,使用clubsrv的代理
location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
// 若是後端服務器返回50二、504或執行超時等錯誤,自動將請求轉發到upstream另外一臺服務器
proxy_pass http://clubsrv;
// 與上面upstream本身命名的名字填寫一致
proxy_redirect off;
proxy_set_header Host club.xywy.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
// nginx在前端作代理,後端的日誌會顯示127.0.0.1,上面配置能夠顯示用戶真實IP(還需裝第三方軟件,見下面的詳細說明)
index index.htm index.html index.php;
}
//下面是第二個域名,使用mysrv的代理,訪問www.sum.com/message目錄下的
server {
listen 80;
server_name www.sum.com;
location /message {
proxy_pass http://mysrv;
proxy_set_header Host $host;
// 訪問這個域名的,只有mysrv 本機能夠訪問
}
//訪問除了/message以外的www.sum.com/ 地址,
location / {
proxy_pass http://mysrv;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
|
error_page 500 502 503 504 /50x.html;
location = /50x.html
{
root html;
}
|
upstream mysrv {
ip_hash;
server 192.168.0.110:80 weight=2;
server 127.0.0.1:8000 down;
server 192.168.0.212:80 weight=8;
}
|
upstream mysrv {
ip_hash;
server www.xywy.com weight=2;
server 127.0.0.1:8000 down;
server 192.168.0.212:80 max_fails=3 fail_timeout=30s;
server unix:/tmp/bakend3;
}
|
=================================================
down到nginx-0.6.35,安裝後,配置很簡單。配置後問題以下:走nginx直接到WebLogic上的應用沒有問題;可是nginx到apache再到WebLogic上的應用就有問題。
日誌中是302(nginx中」HTTP/1.1 302 2783″,apache上是」HTTP/1.0 302 2771″)。對比後,開始覺得是HTTP/1.1和HTTP/1.0的問題。後來想到 Nginx 和瀏覽器使用 HTTP/1.1 進行對話,而在後臺服務中使用 HTTP/1.0,是對的,而後注意到 2個web服務上獲得的 返回給客戶端的不包括響應頭的字節數 是不同長的,這個缺的 12 字節缺在哪裏還須要追究一下。
同時想起來訪問測試的時候訪問 /web 和訪問 /web/ 是不同的,apache上是能夠處理掉的,注意到apache處理相似的資源請求時 日誌中會先打 302,而後後面自動加 / ,以後日誌中就200了。nginx沒有處理,不知道是沒有設置的緣故仍是他自己就不能處理相似的問題。不事後者概率應該不大,還得研究一下nginx配置和apache的相關處理機制。
再有想到用重寫機制來加上對」/」的處理,可是考慮到nginx代理到apache上也會報302,估計這樣也解決不了問題,還得研究一下proxy的配置。
OK,看看以上3條路 那條 是 正解。