[轉(zhuǎn)][筆記](méi) 4.Tomcat系列之Nginx反向代理 tomcat 服務(wù)

轉(zhuǎn)自陳明乾的博客墨辛,可能有一定更新趴俘。

轉(zhuǎn)原文聲明:
原創(chuàng)作品寥闪,允許轉(zhuǎn)載橙垢,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章 原始出處 柜某、作者信息和本聲明喂击。否則將追究法律責(zé)任翰绊。http://freeloda.blog.51cto.com/2033581/1300915

大綱


一监嗜、Nginx反向代理Tomcat服務(wù)器

  • 1.環(huán)境準(zhǔn)備
  • 2.Nginx將請(qǐng)求反向代理到后端Tomcat
  • 3.Nginx將圖片緩存到本地
  • 4.Nginx將請(qǐng)求實(shí)現(xiàn)動(dòng)靜分離

注裁奇,本文的測(cè)試的操作系統(tǒng)為 CentOS 6.8 x86_64刽肠,軟件版本為 jdk-8u101免胃、apache-tomcat-7.0.70羔沙。

軟件下載地址:

一扼雏、Nginx反向代理Tomcat服務(wù)器


1.環(huán)境準(zhǔn)備


實(shí)驗(yàn)拓?fù)洌?/p>

tomcat: 192.168.0.181
nginx: 192.168.0.171

接著來(lái)同步各節(jié)點(diǎn)的時(shí)間:

[root@tomcat ~]# ntpdate 202.120.2.101
[root@nginx ~]# ntpdate 202.120.2.101

下面我們來(lái)安裝nginx服務(wù)器呢蛤,這里選擇比較簡(jiǎn)單的 yum install 的方式安裝:

創(chuàng)建 /etc/yum.repos.d/nginx.repo 文件其障,內(nèi)容如下:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

yum repolist 看看:

[root@lamp1 ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.sina.cn
 * epel: ftp.cuhk.edu.hk
 * extras: mirrors.sina.cn
 * updates: mirrors.sina.cn
repo id          repo name                                                status
base             CentOS-6 - Base                                           6,696
epel             Extra Packages for Enterprise Linux 6 - x86_64           12,181
extras           CentOS-6 - Extras                                            62
nginx            nginx repo                                                   28
updates          CentOS-6 - Updates                                          293
repolist: 19,260

已經(jīng)有了 nginx repo励翼,接著直接可以 yum install 安裝 nginx:

[root@docker2 ~]# yum install -y nginx
[root@docker2 ~]# rpm -qa | grep nginx
nginx-1.10.1-1.el6.ngx.x86_64

看一下安裝的文件:

[root@lamp1 ~]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/rc.d/init.d/nginx
/etc/rc.d/init.d/nginx-debug
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.10.1
/usr/share/doc/nginx-1.10.1/COPYRIGHT
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx

啟動(dòng) nginx,默認(rèn)監(jiān)聽(tīng)在 80 端口:

[root@lamp1 ~]# service nginx start
Starting nginx:                                            [  OK  ]

2.Nginx將請(qǐng)求反向代理到后端Tomcat


首先造烁,我們來(lái)修改一些 nginx 的配置文件惭蟋,/etc/nginx/nginx.conf 可以不去動(dòng)它告组,修改 /etc/nginx/conf.d/default.conf:

[root@lamp1 nginx]# vi conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        #root   /data/www;
        #index  index.php index.html index.htm;
        proxy_pass http://192.168.0.181:8080;
    }

重載配置:

[root@lamp1 nginx]# nginx -s reload

首先保證 tomcat 服務(wù)器是可用的木缝,上一篇博文已經(jīng)測(cè)試好了我碟,所有這里可以直接測(cè)試矫俺,訪(fǎng)問(wèn) http://192.168.0.171/shop:

Snip20160811_53.png

好了,大家可以看到我們成功設(shè)置了nginx反向代理tomcat服務(wù)器催烘。

大家可以看到伊群,我們網(wǎng)站上有很多的圖片舰始,每次訪(fǎng)問(wèn)都要去后端的tomcat服務(wù)器上去取丸卷,很消耗服務(wù)器資源谜嫉。我們下面將設(shè)置在nginx服務(wù)器上緩存圖片。

3.Nginx將圖片緩存到本地


修改配置文件沐兰,首先修改 /etc/nginx/nginx.conf蔽挠,添加緩存的配置:

[root@lamp1 nginx]# cat nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    proxy_cache_path /nginx/cache levels=1:2 keys_zone=first:10m inactive=24h max_size=1G; # 設(shè)置緩存

    upstream backend { # 后端 tomcat 服務(wù)器
        server 192.168.0.181:8080 weight=1;
    }

    include /etc/nginx/conf.d/*.conf;
}

接著修改 /etc/nginx/conf.d/default.conf:

[root@lamp1 nginx]# cat conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        #root   /data/www;
        #index  index.php index.html index.htm;
        proxy_pass http://backend; #
    }

    location ~* "\.(jpg|jpeg|png|gif|html|css|js)$" { # 不區(qū)分大小寫(xiě)匹配,緩存靜態(tài)文件
        proxy_pass http://backend;
        proxy_cache first;
        proxy_cache_valid 200 24h; # 200 響應(yīng)緩存 24h
        proxy_cache_valid 302 10m; # 302 響應(yīng)緩存 10m
        add_header X-Cache-Status $upstream_cache_status; # 添加響應(yīng)首部春寿,返回緩存命中信息

    }

    #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   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           /data/www;
    #    fastcgi_pass   192.168.0.171:9000;
    #    fastcgi_index  index.php;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

建立 /nginx/cache 目錄,然后測(cè)試配置語(yǔ)法厘线,重新加載配置:

[root@lamp1 nginx]# mkdir -p /nginx/cache
[root@lamp1 nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lamp1 nginx]# nginx -s reload

訪(fǎng)問(wèn) nginx 服務(wù)器地址造壮,即可看到 tomcat 首頁(yè)成箫,刷新幾次旨枯,看靜態(tài)文件被緩存:

Snip20160811_55.png
Snip20160811_56.png

以上分別是一個(gè) png 文件和一個(gè) css 文件蹬昌,都顯示緩存命中。在tomcat 服務(wù)器的日志中可看到攀隔,除了第一次訪(fǎng)問(wèn)皂贩,后續(xù)刷新網(wǎng)頁(yè),都只發(fā)送了一個(gè)對(duì)根目錄的 / 的 HTTP 請(qǐng)求昆汹,因?yàn)槭醉?yè)中除了對(duì) / 的請(qǐng)求明刷,其他都是靜態(tài)文件請(qǐng)求:

Snip20160811_58.png

不過(guò),對(duì) SHOP++ 的訪(fǎng)問(wèn)中,css、js 文件并沒(méi)有被緩存檬洞,不知什么原因贤旷,只有圖片被緩存了,多次刷新,tomcat 服務(wù)器都收到如下請(qǐng)求:

Snip20160811_59.png

另外我們可以看看緩存目錄:

[root@lamp1 nginx]# ll /nginx/cache/
total 40
drwx------ 3 nginx nginx 4096 Aug 11 09:24 0
drwx------ 3 nginx nginx 4096 Aug 11 15:58 3
drwx------ 3 nginx nginx 4096 Aug 11 09:17 4
drwx------ 4 nginx nginx 4096 Aug 11 15:58 8
drwx------ 4 nginx nginx 4096 Aug 11 09:24 9
drwx------ 5 nginx nginx 4096 Aug 11 16:00 a
drwx------ 3 nginx nginx 4096 Aug 11 15:58 b
drwx------ 5 nginx nginx 4096 Aug 11 16:01 c
drwx------ 5 nginx nginx 4096 Aug 11 09:24 e
drwx------ 3 nginx nginx 4096 Aug 11 16:00 f
[root@lamp1 nginx]# du -sh /nginx/cache/
328K    /nginx/cache/

可看到是有緩存內(nèi)容的假残。好了到這里我們的nginx緩存服務(wù)就配置完成了,下面我們看一下如何實(shí)現(xiàn)動(dòng)靜分離快鱼。

4.Nginx將請(qǐng)求實(shí)現(xiàn)動(dòng)靜分離


首先,我們來(lái)說(shuō)一下我們要實(shí)現(xiàn)的效果沽翔,上面我們已經(jīng)將靜態(tài)內(nèi)容緩存在nginx服務(wù)器上橘沥,我們想讓用戶(hù)請(qǐng)求的靜態(tài)內(nèi)容到nginx去取,動(dòng)態(tài)內(nèi)容到tomcat服務(wù)器上去取,這就能實(shí)現(xiàn)動(dòng)靜分享效果。同樣的首先我們來(lái)修改配置文件,

[root@lamp1 nginx]# cat conf.d/default.conf
server {
    listen       80;
    server_name  localhost;


    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;


    location ~* "\.(jsp|do)$" {
        proxy_pass http://backend;
    }

    location / {
        rewrite ^(/.*)$ $1/index.jsp;
    }

    location ~* "\.(jpg|jpeg|png|gif|html|css|js)$" {
        proxy_pass http://backend;
        proxy_cache first;
        proxy_cache_valid 200 24h;
        proxy_cache_valid 302 10m;
        add_header X-Cache-Status $upstream_cache_status;

    }

    #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   /usr/share/nginx/html;
    }
}

對(duì)于 location 的查找走越,修飾符 = 表示 URI 與 前綴字符串 必須精確匹配喳整。如果能夠精確匹配呵晨,則結(jié)束查找季二。如果對(duì)于 / 的請(qǐng)求很頻繁,可為 location / 添加 = 修飾符,這樣可以加速處理過(guò)程,因?yàn)橐淮纹ヅ洳檎壹纯山Y(jié)束。這里只是提一下,配置里沒(méi)有這樣定義。

在上面的配置中,對(duì)于以 / 起始的請(qǐng)求做內(nèi)部重定向淹接,比如訪(fǎng)問(wèn) http://192.168.0.171,被內(nèi)部重定向到 http://192.168.0.171/index.jsp;訪(fǎng)問(wèn) http://192.168.0.171/shop 被內(nèi)部重定向到 http://192.168.0.171/shop/index.jsp草雕。訪(fǎng)問(wèn) http://192.168.0.171http://192.168.0.171/ 是等效的。

重定向是這樣定義的:

location / {
    rewrite ^(/.*)$ $1/index.jsp;
}

動(dòng)態(tài)內(nèi)容交給后端 tomcat 服務(wù)器:

location ~* "\.(jsp|do)$" {
    proxy_pass http://backend;
}

靜態(tài)內(nèi)容有本地緩存處理闲擦,對(duì)于第一次訪(fǎng)問(wèn)請(qǐng)求,內(nèi)容還是從后端取得的:

location ~* "\.(jpg|jpeg|png|gif|html|css|js)$" {
    proxy_pass http://backend;
    proxy_cache first;
    proxy_cache_valid 200 24h;
    proxy_cache_valid 302 10m;
    add_header X-Cache-Status $upstream_cache_status;

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霹抛,一起剝皮案震驚了整個(gè)濱河市凸郑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖漆改,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奔滑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡腕窥,警方通過(guò)查閱死者的電腦和手機(jī)粒没,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)响蓉,“玉大人,你說(shuō)我怎么就攤上這事脏毯。” “怎么了率挣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵荠锭,是天一觀(guān)的道長(zhǎng)尘分。 經(jīng)常有香客問(wèn)我,道長(zhǎng)禾锤,這世上最難降的妖魔是什么香罐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮时肿,結(jié)果婚禮上庇茫,老公的妹妹穿的比我還像新娘。我一直安慰自己螃成,他們只是感情好旦签,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著寸宏,像睡著了一般宁炫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上氮凝,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天羔巢,我揣著相機(jī)與錄音,去河邊找鬼罩阵。 笑死竿秆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稿壁。 我是一名探鬼主播幽钢,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼傅是!你這毒婦竟也來(lái)了匪燕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喧笔,失蹤者是張志新(化名)和其女友劉穎帽驯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體书闸,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尼变,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梗劫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片享甸。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡截碴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛉威,到底是詐尸還是另有隱情日丹,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布蚯嫌,位于F島的核電站哲虾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏择示。R本人自食惡果不足惜束凑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望栅盲。 院中可真熱鬧汪诉,春花似錦、人聲如沸谈秫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)该编。三九已至,卻和暖如春硕淑,著一層夾襖步出監(jiān)牢的瞬間置媳,已是汗流浹背赃份。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惭聂,地道東北人窗声。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辜纲,于是被迫代替她去往敵國(guó)和親笨觅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 上一篇《WEB請(qǐng)求處理一:瀏覽器請(qǐng)求發(fā)起處理》耕腾,我們講述了瀏覽器端請(qǐng)求發(fā)起過(guò)程见剩,通過(guò)DNS域名解析服務(wù)器IP,并建...
    七寸知架構(gòu)閱讀 80,923評(píng)論 21 356
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理扫俺,服務(wù)發(fā)現(xiàn)苍苞,斷路器,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 轉(zhuǎn)自陳明乾的博客狼纬,可能有一定更新柒啤。 轉(zhuǎn)原文聲明:原創(chuàng)作品,允許轉(zhuǎn)載畸颅,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章 原始出處 担巩、...
    C86guli閱讀 945評(píng)論 1 6
  • 總是會(huì)反省自己的不足涛癌,卻總沒(méi)動(dòng)力改變,所以總是在糾結(jié)中過(guò)著不如意的生活送火,2017一定要改變拳话! 今年的目標(biāo):鍛煉身體...
    aflowertree閱讀 158評(píng)論 0 0
  • 今天登上歐洲最高的建筑-碎片大廈,前年來(lái)倫敦時(shí)還不知道有這個(gè)景點(diǎn)种吸,去了有名的倫敦眼腑瞰了倫敦全景弃衍,這次來(lái)在塔橋游覽...
    夢(mèng)寐以求的太陽(yáng)閱讀 959評(píng)論 0 0