tomcat結合httpd和nginx

來源:互聯網
上載者:User

標籤:編輯   lib   ble   val   自己   請求   tree   nginx日誌   logs   

httpd結合tomcat:

前提:httpd版本2.4以上,編譯安裝

httpd:192.168.223.136 tomcat:192.168.223.146

tomcat簡單建立一個額外的webapps:

  [[email protected] tomcat]# mkdir /data/webapps/{ROOT,WEB-INF,META-INF,classes,lib} -pv  mkdir: 已建立目錄 "/data"  mkdir: 已建立目錄 "/data/webapps"  mkdir: 已建立目錄 "/data/webapps/ROOT"  mkdir: 已建立目錄 "/data/webapps/WEB-INF"  mkdir: 已建立目錄 "/data/webapps/META-INF"  mkdir: 已建立目錄 "/data/webapps/classes"  mkdir: 已建立目錄 "/data/webapps/lib"  vim /data/webapps/ROOT/index.jsp   <Engine name="Catalina" defaultHost="192.168.223.146"> 替換預設的host主機    <Host name="192.168.223.146" appBase="/data/webapps" unpackWARs="true" autoDeploy="true">      <Context path="" docBase="ROOT" reloadable="true"/>      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"          prefix="192.168.223.146_access_log" suffix=".txt"          pattern="%h %l %u %t &quot;%r&quot; %s %b" />    </Host>  [[email protected] data]# tree webapps/  webapps/  ├── classes  ├── lib  ├── META-INF  ├── myapp  │   └── login.jsp  ├── ROOT  │   └── index.jsp  └── WEB-INF httpd實現tomcat反代的幾種方式: 1、基於http協議  需要使用的模組:主模組:proxy_module、子模組:proxy_module_http   1、在主設定檔httpd.conf開啟下面兩個模組:   LoadModule proxy_module modules/mod_proxy.so   LoadModule proxy_http_module modules/mod_proxy_http.so  2、開啟後開啟虛擬機器主機的支援檔案:  # Virtual hosts   Include /etc/httpd2.4/extra/httpd-vhosts.conf  3、然後編輯vhosts檔案:  <VirtualHost *:80>    ServerName 192.168.223.136              這裡只是httpd伺服器的ip    proxyVia On                     如果設定為 On每個請求和應答都會對應當前主機得到一個" Via:"頭。(此選項可以不用設定)    ProxyRequests Off           關閉正向 Proxy    ProxyPreserveHost On       當啟用時,此選項將把傳入請求的"Host:"行傳遞給被代理的主機,而不是傳遞在 ProxyPass中指定的主機名稱,預設為off(此選項可以不用設定)    <Proxy *>        設定代理許可權,所有的都給代理至後端伺服器      Require all granted    </Proxy>     ProxyPass / http://192.168.223.146:8080/                ProxyPassReverse / http://192.168.223.146:8080/    <Location />      Require all granted    </Location>  </VirtualHost>  2、httpd與tomcat結合使用ajp協議:   1、開啟必須要支援的proxy模組   LoadModule proxy_module modules/mod_proxy.so   LoadModule proxy_ajp_module modules/mod_proxy_ajp.so   2、開啟後開啟虛擬機器主機的支援檔案:  # Virtual hosts  Include /etc/httpd2.4/extra/httpd-vhosts.conf   3、然後編輯vhosts檔案:  <VirtualHost *:80>    ServerName 192.168.223.136    proxyVia On    ProxyRequests Off    ProxyPreserveHost On    <Proxy *>      Require all granted    </Proxy>     ProxyPass / ajp://192.168.223.146:8009/            ajp協議開啟的是8009連接埠     ProxyPassReverse / ajp://192.168.223.146:8009/    <Location />      Require all granted    </Location>  </VirtualHost>觀察tomcat日誌看見真實的ip:

[[email protected] logs]# tail -f 192.168.223.146_access_log.2017-08-09.txt
192.168.223.1 - - [09/Aug/2017:11:31:49 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:31:49 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:31:49 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:32:24 +0800] "GET / HTTP/1.1" 200 122
192.168.223.1 - - [09/Aug/2017:11:47:51 +0800] "GET / HTTP/1.1" 200 122
192.168.223.1 - - [09/Aug/2017:11:47:52 +0800] "GET / HTTP/1.1" 200 122
192.168.223.1 - - [09/Aug/2017:11:47:54 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:48:13 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:48:13 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:48:14 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127

 

nginx與tomcat進行結合:

nginx:192.168.223.136,tomcat:192.168.223.146

server {
  listen 80;
  server_name 192.168.223.136;

  location / {

    root html;
    index index.html index.htm;
    proxy_pass http://192.168.223.146:8080;
  }

nginx日誌如下:

192.168.223.1 - - [09/Aug/2017:13:43:26 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 112 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
192.168.223.1 - - [09/Aug/2017:13:43:30 +0800] "GET / HTTP/1.1" 200 107 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
192.168.223.1 - - [09/Aug/2017:13:46:11 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 112 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"

tomcat日誌如下:

192.168.223.136 - - [09/Aug/2017:13:43:26 +0800] "GET /myapp/login.jsp HTTP/1.0" 200 127
192.168.223.136 - - [09/Aug/2017:13:43:30 +0800] "GET / HTTP/1.0" 200 122
192.168.223.136 - - [09/Aug/2017:13:46:11 +0800] "GET /myapp/login.jsp HTTP/1.0" 200 127

如何才能使tomcat抓捕到真實的用戶端ip呢?

1、在nginx上設定:

  proxy_set_header X-Forwarded-For $remote_addr;

2、然後在tomcat記錄定義處添加首部資訊:

  pattern="%h %{X-Forwarded-For}i %l %u %t &quot;%r&quot; %s %b" />

然後tomcat訪問日誌:

192.168.223.136 192.168.223.1 - - [09/Aug/2017:13:55:03 +0800] "GET /myapp/login.jsp HTTP/1.0" 200 127
192.168.223.136 192.168.223.1 - - [09/Aug/2017:13:55:04 +0800] "GET /myapp/login.jsp HTTP/1.0" 200 127

 

nginx結合tomcat實現動靜分離:

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

訪問網址:

預設首頁是index.html所以訪問的是nginx自己的html下的index.html

當尾碼為jsp時,就請求訪問tomcat了,在tomcat日誌那裡也可以查看:

192.168.223.136 - - - [09/Aug/2017:14:09:03 +0800] "GET /index.jsp HTTP/1.0" 200 122

 

 

利用nginx作為Proxy 伺服器,轉向192.168.223.146的httpd伺服器,然後通過httpd轉向本地的tomcat

nginx:192.168.223.136   httpd:192.168.223.146,版本2.4以上  tomcat:192.168.223.146

配置httpd:同以上

1、基於http協議  需要使用的模組:主模組:proxy_module、子模組:proxy_module_http   1、在主設定檔httpd.conf開啟下面兩個模組:   LoadModule proxy_module modules/mod_proxy.so   LoadModule proxy_http_module modules/mod_proxy_http.so  2、開啟後開啟虛擬機器主機的支援檔案:  # Virtual hosts   Include /etc/httpd2.4/extra/httpd-vhosts.conf  3、然後編輯vhosts檔案:  <VirtualHost *:80>     ServerName 192.168.223.146            httpd和tomcat位於同一主機    proxyVia On                         ProxyRequests Off               ProxyPreserveHost On          <Proxy *>              Require all granted    </Proxy>     ProxyPass / http://192.168.223.146:8080/                ProxyPassReverse / http://192.168.223.146:8080/    <Location />      Require all granted    </Location>  </VirtualHost>

http日誌:

192.168.223.136 - - [09/Aug/2017:14:37:09 +0800] "GET /index.jsp HTTP/1.0" 200 122

tomcat日誌:

192.168.223.146 192.168.223.136 - - [09/Aug/2017:14:37:09 +0800] "GET /index.jsp HTTP/1.1" 200 122

nginx只是做反代,沒有處理請求的義務,由於後端httpd是直接反帶的所以httpd預設的html下面的index.html不是tomcatwebapps下面的index.html

在tomcat的應用目錄/data/webapps/ROOT下面建立一個index.html

cp index.html /data/webapps/ROOT/,然後再次訪問:

查看httpd日誌:

192.168.223.136 - - [09/Aug/2017:14:41:41 +0800] "GET /index.html HTTP/1.0" 200 45

查看你tomcat日誌:

192.168.223.146 192.168.223.136 - - [09/Aug/2017:14:41:41 +0800] "GET /index.html HTTP/1.1" 200 45

 

tomcat結合httpd和nginx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.