Nginx+Apache+Tomcat實現LANMT動靜分離

Nginx+Apache+Tomcat實現LANMT動靜分離

        

目的:

   本次實驗主要目的為實現以Nginx作為反向代理,并實現分別訪問動靜態服務的效果。

 

拓撲結構:

LNAMT.jpg

         client 172.16.0.1 –> nginx webproxy1,IP:172.16.10.10 –> httpd+tomcat web1,IP: 172.16.100.101 –> DB: maridDB IP: 172.16.200.200

                                                 –> httpd   ,web2,IP: 172.16.100.102

                                                                                                      

                                                                                                      

具體實現:                                                                                                 

1.webproxy1配置

##安裝nginx

  [root@webproxy1 setup]# tar xzvf nginx-1.9.9.tar.gz

  [root@webproxy1 setup]# cd nginx-1.9.9

  [root@webproxy1 nginx-1.9.9]# ./configure –prefix=/usr/local/nginx –sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx/nginx.pid –lock-path=/var/lock/nginx.lock –user=www –group=www –with-http_v2_module –with-http_ssl_module –with-http_flv_module –with-http_stub_status_module –with-http_gzip_static_module –http-client-body-temp-path=/var/tmp/nginx/client/ –http-proxy-temp-path=/var/tmp/nginx/proxy/ –http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ –http-uwsgi-temp-path=/var/tmp/nginx/uwsgi –http-scgi-temp-path=/var/tmp/nginx/scgi –with-pcre

  [root@webproxy1 nginx-1.9.9]# make && make install

##啟動測試

  [root@webproxy1 nginx]# nginx

  [root@webproxy1 nginx]# ss -ntlp | grep nginx

LISTEN     0      128          *:80                       *:*                  

users:(("nginx",pid=4981,fd=6),("nginx",pid=4980,fd=6))

[root@webproxy1 nginx]#

[root@webproxy1 nginx]# curl -I http://172.16.10.10

HTTP/1.1 200 OK

Server: nginx/1.9.9

Date: Mon, 28 Nov 2016 06:37:14 GMT

Content-Type: text/html

Content-Length: 612

Last-Modified: Fri, 18 Nov 2016 01:15:59 GMT

Connection: keep-alive

ETag: "582e564f-264"

Accept-Ranges: bytes

##訪問正常

 

 

2.web1配置

##安裝jdk

[root@web1 /]# yum install -y java-1.8.0-openjdk

##檢查驗證

[root@web1 /]# java -version

openjdk version "1.8.0_20"

OpenJDK Runtime Environment (build 1.8.0_20-b26)

OpenJDK 64-Bit Server VM (build 25.20-b23, mixed mode)

[root@web1 /]#

##安裝tomcat

[root@web1 setup]# tar xzvf apache-tomcat-8.5.8.tar.gz -C /usr/local/

[root@web1 setup]# cd /usr/local

[root@web1 local]# ls

apache-tomcat-8.5.8  bin  etc  games  include  lib  lib64  libexec  sbin  share  src

[root@web1 local]#

[root@web1 local]# ln -sv apache-tomcat-8.5.8/ tomcat

`tomcat' -> `apache-tomcat-8.5.8/'

You have new mail in /var/spool/mail/root

[root@web1 local]#

 

[root@web1 tomcat]# vim /etc/profile.d/tomcat.sh

 

export CATALINA_HOME=/usr/local/tomcat/

export PATH=$CATALINA_HOME/bin:$PATH

 

[root@web1 tomcat]# . /etc/profile.d/tomcat.sh

 

##檢查驗證

[root@web1 tomcat]# catalina.sh version

Using CATALINA_BASE:   /usr/local/tomcat/

Using CATALINA_HOME:   /usr/local/tomcat/

Using CATALINA_TMPDIR: /usr/local/tomcat//temp

Using JRE_HOME:        /usr

Using CLASSPATH:       /usr/local/tomcat//bin/bootstrap.jar:/usr/local/tomcat//bin/tomcat-juli.jar

Server version: Apache Tomcat/8.5.8

Server built:   Nov 3 2016 21:14:13 UTC

Server number:  8.5.8.0

OS Name:        Linux

OS Version:     2.6.32-504.el6.x86_64

Architecture:   amd64

JVM Version:    1.8.0_20-b26

JVM Vendor:     Oracle Corporation

[root@web1 tomcat]#

 

##啟動

[root@web1 tomcat]# catalina.sh start

Using CATALINA_BASE:   /usr/local/tomcat/

Using CATALINA_HOME:   /usr/local/tomcat/

Using CATALINA_TMPDIR: /usr/local/tomcat//temp

Using JRE_HOME:        /usr

Using CLASSPATH:       /usr/local/tomcat//bin/bootstrap.jar:/usr/local/tomcat//bin/tomcat-juli.jar

Tomcat started.

[root@web1 tomcat]#

[root@web1 tomcat]# ss -ntlp | grep java

LISTEN     0      1          ::ffff:127.0.0.1:8005                    :::*      users:(("java",5464,75))

LISTEN     0      100                      :::8009                    :::*      users:(("java",5464,53))

LISTEN     0      100                      :::8080                    :::*      users:(("java",5464,48))

[root@web1 tomcat]#

 

##檢查驗證

[root@web1 tomcat]# curl -I http://172.16.100.101:8080

HTTP/1.1 200

Content-Type: text/html;charset=UTF-8

Transfer-Encoding: chunked

Date: Mon, 28 Nov 2016 10:04:35 GMT

tomcat2.png 

[root@web1 tomcat]#

 

##編譯安裝httpd##

[root@web1 setup]# cd apr-1.5.2

[root@web1 apr-1.5.2]# ./configure –prefix=/usr/local/apr

[root@web1 apr-1.5.2]# make && make install

 

[root@web1 setup]# tar xzvf apr-util-1.5.4.tar.gz

[root@web1 setup]# cd apr-util-1.5.4

[root@web1 apr-util-1.5.4]# ./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr

[root@web1 apr-util-1.5.4]# make && make install

 

[root@web1 setup]# tar zxvf httpd-2.4.16.tar.gz

[root@web1 setup]# cd  httpd-2.4.16

[root@web1 httpd-2.4.16]# ./configure –prefix=/usr/local/apache –sysconfdir=/etc/httpd –enable-so –enable-ssl –enable-cgi –enable-rewrite –with-zlib –with-pcre –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util –enable-modules=most –enable-mpms-shared=all –with-mpm=event

[root@web1 httpd-2.4.16]# make && make install

[root@web1 local]# ln -sv /usr/local/apache/include/ /usr/local/include/apache

[root@web1 apache]# vim /etc/profile.d/httpd.sh

export PATH=/usr/local/apache/bin:$PATH

[root@web1 apache]# . /etc/profile.d/httpd.sh

[root@web1 apache]# vim /etc/rc.d/init.d/httpd

 

#!/bin/bash

#

# httpd        Startup script for the Apache HTTP Server

#

# chkconfig: – 85 15

# description: Apache is a World Wide Web server.  It is used to serve \

#        HTML files and CGI.

# processname: httpd

# config: /etc/httpd/conf/httpd.conf

# config: /etc/sysconfig/httpd

# pidfile: /var/run/httpd.pid

 

# Source function library.

. /etc/rc.d/init.d/functions

 

if [ -f /etc/sysconfig/httpd ]; then

        . /etc/sysconfig/httpd

fi

 

# Start httpd in the C locale by default.

HTTPD_LANG=${HTTPD_LANG-"C"}

 

# This will prevent initlog from swallowing up a pass-phrase prompt if

# mod_ssl needs a pass-phrase from the user.

INITLOG_ARGS=""

 

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server

# with the thread-based "worker" MPM; BE WARNED that some modules may not

# work correctly with a thread-based MPM; notably PHP will refuse to start.

 

# Path to the apachectl script, server binary, and short-form for messages.

apachectl=/usr/local/apache/bin/apachectl

httpd=${HTTPD-/usr/local/apache/bin/httpd}

prog=httpd

pidfile=${PIDFILE-/var/run/httpd.pid}

lockfile=${LOCKFILE-/var/lock/subsys/httpd}

RETVAL=0

 

start() {

        echo -n $"Starting $prog: "

        LANG=$HTTPD_LANG daemon –pidfile=${pidfile} $httpd $OPTIONS

        RETVAL=$?

        echo

        [ $RETVAL = 0 ] && touch ${lockfile}

        return $RETVAL

}

 

stop() {

  echo -n $"Stopping $prog: "

  killproc -p ${pidfile} -d 10 $httpd

  RETVAL=$?

  echo

  [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}

}

reload() {

    echo -n $"Reloading $prog: "

    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then

        RETVAL=$?

        echo $"not reloading due to configuration syntax error"

        failure $"not reloading $httpd due to configuration syntax error"

    else

        killproc -p ${pidfile} $httpd -HUP

        RETVAL=$?

    fi

    echo

}

 

# See how we were called.

case "$1" in

  start)

  start

  ;;

  stop)

  stop

  ;;

  status)

        status -p ${pidfile} $httpd

  RETVAL=$?

  ;;

  restart)

  stop

  start

  ;;

  condrestart)

  if [ -f ${pidfile} ] ; then

    stop

    start

  fi

  ;;

  reload)

        reload

  ;;

  graceful|help|configtest|fullstatus)

  $apachectl $@

  RETVAL=$?

  ;;

  *)

  echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"

  exit 1

esac

 

exit $RETVAL

 

##進行環境設置

[root@web1 apache]# chmod +x /etc/rc.d/init.d/httpd

[root@web1 apache]# chkconfig –add httpd

[root@web1 apache]# chkconfig httpd on

##啟動服務

[root@web1 apache]# service httpd start

Starting httpd: AH00557: httpd: apr_sockaddr_info_get() failed for web1.test.net

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

##檢查驗證                                                           [  OK  ]

[root@web1 apache]# ss -ntlp | grep httpd

LISTEN     0      128                      :::80                      :::*      users:(("httpd",53093,4),("httpd",53096,4),("httpd",53097,4),("httpd",53098,4))

[root@web1 apache]# curl http://172.16.100.101

<html><body><h1>It works!</h1></body></html>

[root@web1 apache]#

web1.png 

 

3.Web2配置

##安裝httpd

[root@web2 setup]# yum install -y httpd

##構造web2網頁

 

[root@web2 setup]# vim /var/www/html/index.html

<h1>web2 172.16.100.102</h1>

##啟動服務

[root@web2 setup]# service httpd start

Starting httpd: httpd: apr_sockaddr_info_get() failed for web2.test.net

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

##檢查驗證                                                           [  OK  ]

[root@web2 setup]# ss -ntlp | grep httpd

LISTEN     0      128                      :::80                      :::*      users:(("httpd",7978,4),("httpd",7981,4),("httpd",7982,4),("httpd",7983,4),("httpd",7984,4),("httpd",7985,4),("httpd",7986,4),("httpd",7987,4),("httpd",7988,4))

[root@web2 setup]# curl -I http://172.16.100.102

HTTP/1.1 200 OK

Date: Tue, 29 Nov 2016 07:50:49 GMT

Server: Apache/2.2.15 (CentOS)

Last-Modified: Tue, 29 Nov 2016 07:47:30 GMT

ETag: "a42f2-1e-5426bcce6f002"

Accept-Ranges: bytes

Content-Length: 30

Connection: close

Content-Type: text/html; charset=UTF-8

 

[root@web2 setup]#

web2.png 

 

 

##以上基礎安裝設置完畢,下面開始設置訪問網頁的動靜分離

##首先設置172.16.100.101上的httpd反向代理tomcat服務

        

##配置反向代理

 httpd.conf

 

ServerName web1.test.net

##DocumentRoot "/usr/local/apache/htdocs"

 # Virtual hosts

 Include /etc/httpd/extra/httpd-vhosts.conf

 

##虛擬主機設置,所有請求反代到tomcat8080

 [root@web1 extra]# vim httpd-vhosts.conf

<VirtualHost *:80>

  ServerName web1.test.net

  ProxyVia On

  ProxyRequests Off

  ProxyPreserveHost On

  <Proxy *>

    Require all granted

  </Proxy>

    ProxyPass / http://172.16.100.101:8080/

    ProxyPassReverse / http://172.16.100.101:8080/

  <Location />

      Require all granted

  </Location>

</VirtualHost>

 

 

##配置webprox1上的nginx,將動態網頁(這里是jsp,同理,還可以是php)的請求轉發至web1(172.16.100.101),將靜態網頁的請求轉發至web2(172.16.100.102)

 location ~* \.jsp$ {

   proxy_pass http://172.16.100.101;

 }

 

 location / {

   proxy_pass http://172.16.100.102;

 }

 

 

至于jsp連接mysql數據庫,則只需在tomcat的機器上安裝上專門連接mysql的驅動,然后在jsp代碼中創建連接即可,我這里就偷懶不做了,或者留到下次再一并實現。             

##測試

動態2.png                  

靜態2.png


##請注意看效果,第一張圖訪問的url是webprox1的IP地址,且是動態jsp網頁,獲得的網頁內容則是后端web1 tomcat8080的。而第二張圖片訪問的url IP地址不變,同樣是webproxy1,但網頁是靜態的html,獲取到的網頁內容也相應的變成了web2上httpd的網頁內容。因而,網站的動靜態網頁實現了分流。


本次實驗只是簡單的實現了LNAMT的反向代理及動靜分離,并未涉及高可用和負載均衡。下次會將這兩個元素添加進去,使整個環境與生產環境更為接近。敬請期待!

 

以上為我實現的LNAMT環境,我對linux的認識還是很膚淺,以上可能有不正確的地方,如有錯漏,希望各位能指正,共同進步。

 

我的QQ153975050

在此感謝馬哥及馬哥團隊的所有人,在linux的道路上引領我一直前進!

                                                            2016-12-1 凌晨

 

 

 

 

 

 

原創文章,作者:馬哥Net19_小斌斌,如若轉載,請注明出處:http://www.www58058.com/61757

(2)
馬哥Net19_小斌斌馬哥Net19_小斌斌
上一篇 2016-12-05
下一篇 2016-12-05

相關推薦

  • 編譯安裝httpd

                   1 將 httpd-2.4.25.tar.bz2下載 到  centos7的 /app目錄下                 [root@localh…

    Linux干貨 2017-04-24
  • 在CentOS7.3上編譯安裝httpd-2.4.27

    在CentOS7.3上編譯安裝httpd-2.4.27     在實際生產中,軟件廠商并不總會提供針對Linux平臺的rpm軟件包,有時會以源碼的形式發布軟件。源碼,比如c語言的源碼,可以跨平臺運行。在只能獲得源碼的情況下,那么就需要用戶根據自己的平臺,進行手動的編譯安裝。此時,需要借助一些專門的編譯工具,而Linux…

    Linux干貨 2017-08-06
  • 破解root口令

    這里主要介紹一下centos6和7root密碼的破解方法 這里先說一下centos7的口令破解方法 破解CentOS7的root口令方法一 啟動時任意鍵暫停啟動  按e鍵進入編輯模式  將光標移動linux16開始的行,添加內核參數rd.break 按ctrl-x啟動 這是進來之后的界面 然后查看用戶的登錄信息 echo $UID 顯示結…

    2017-07-14
  • Linux中的網絡管理

    1. ifconfig命令的使用方法 ifconfig是一個比較老的命令了,以后可能會慢慢被ip命令替代。ifconfig命令可以用來配置網卡ip地址,配置網卡別名等信息。 ifconfig ifconfig 網絡設備名:用來查看網卡的信息,如ip地址,子網掩碼,MAC地址等信息 ifconfig eth0 add 172.16.0.35/16:配置eth0…

    2017-05-02
  • corosync的高可用——高可用mariadb數據庫

    corosync, pacemaker,nfs高可用mariadb 實驗環境: 4臺CentOS 7 的主機,并關閉的iptalbes和selinux功能 主機1:10.1.43.101 node1 corosync+pacemaker+amp 主機2:10.1.43.102 node2 corosync+pacemaker+amp 主機3:10.1.43.…

    Linux干貨 2016-11-24
  • RPM的使用

    概述 RPM 是 Red Hat PackageManager 的縮寫,本意是Red Hat 軟件包管理,顧名思義是Red Hat 貢獻出來的軟件包管理;在Fedora 、Redhat、Mandriva、SuSE、YellowDog等主流發行版本,以及在這些版本基礎上二次開發出來的發行版采用; RPM包里面都包含什么?里面包含可執行的二進制程序,這個程序和W…

    Linux干貨 2016-02-14
欧美性久久久久