tomcat 安裝配置部署到nginx+tomcat+https


1 Tomcat簡介

tomcat 是一個web服務器, 類似nginx , apache的http
​ nginx, http 只能處理html 等靜態文件
​ 網頁分為靜態網頁(以.html 或者.html 結尾的url地址) 和動態網頁(偽靜態)
​ nginx 和http配置php 就能夠處理動態的網頁(.php結尾)
​ tomcat 配合jdk 就能夠處理動態的網頁(.jsp結尾)

2.下載並安裝Tomcat服務

JDK下載:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Tomcat下載:http://tomcat.apache.org/

cd /application/tools/
上傳軟件包
安裝jdk jkd --> java虛擬機(jvm) --> 一處編譯,處處使用

2.2 部署java環境

[root@tomcat ~]# cd /application/tools/
[root@tomcat tools]# rz

tar xf jdk-8u60-linux-x64.tar.gz -C /application/

ln -s /application/jdk1.8.0_60 /application/jdk

sed -i.ori '$a export JAVA_HOME=/application/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile

source /etc/profile
#→出現下面結果證明部署成功
[root@tomcat ~]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

2.3 安裝Tomcat

tar xf apache-tomcat-8.0.27.tar.gz -C /application/

ln -s /application/apache-tomcat-8.0.27 /application/tomcat

echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile

source /etc/profile

chown -R root.root /application/jdk/ /application/tomcat/

[root@tomcat ~]# tail -4 /etc/profile
export JAVA_HOME=/application/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/application/tomcat

2.4 Tomcat目錄介紹 (關注點 bin conf logs webapps)

[root@tomcat ~]# cd /application/tomcat/
[root@tomcat tomcat]# tree -L 1
.
├── bin         #→用以啟動、關閉Tomcat或者其它功能的腳本(.bat文件和.sh文件)
├── conf        #→用以配置Tomcat的XML及DTD文件 | server.xml 主配置文件, tomcat-users.xml 用戶管理
├── lib         #→存放web應用能訪問的JAR包
├── LICENSE
├── logs        #→Catalina和其它Web應用程序的日志文件
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp        #→臨時文件
├── webapps     #→Web應用程序根目錄
└── work        #→用以產生有JSP編譯出的Servlet的.java和.class文件
7 directories, 4 files
[root@tomcat tomcat]# cd webapps/
[root@tomcat webapps]# ll
total 20
drwxr-xr-x 14 root root 4096 Oct  5 12:09 docs     #→tomcat幫助文檔
drwxr-xr-x  6 root root 4096 Oct  5 12:09 examples #→web應用實例
drwxr-xr-x  5 root root 4096 Oct  5 12:09 host-manager #→管理
drwxr-xr-x  5 root root 4096 Oct  5 12:09 manager  #→管理
drwxr-xr-x  3 root root 4096 Oct  5 12:09 ROOT     #→默認網站根目錄

2.5 啟動Tomcat

#→啟動程序/application/tomcat/bin/startup.sh
#→關閉程序/application/tomcat/bin/shutdown.sh

[root@tomcat ~]# /application/tomcat/bin/startup.sh
Using CATALINA_BASE:   /application/tomcat
Using CATALINA_HOME:   /application/tomcat
Using CATALINA_TMPDIR: /application/tomcat/temp
Using JRE_HOME:        /application/jdk
Using CLASSPATH:       /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat ~]# netstat -tunlp|grep java
tcp        0      0 :::8009        :::*           LISTEN      4743/java           
tcp        0      0 :::8080        :::*           LISTEN      4743/java    
       
[root@tomcat ~]# ps -ef|grep [j]ava
root       4743      1 17 06:10 pts/0    00:00:03 /application/jdk/bin/java -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat/endorsed -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap start

#訪問網站 網址:http://10.0.0.9:8080/

3.2 Tomcat管理

# 通過web管理 測試功能,生產環境不要用。

Tomcat管理功能用於對Tomcat自身以及部署在Tomcat上的應用進行管理的web應用。在默認情況下是處於禁用狀態的。如果需要開啟這個功能,就需要配置管理用戶,即配置前面說過的tomcat-users.xml。

[root@tomcat ~]# vim /application/tomcat/conf/tomcat-users.xml
…………
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
</tomcat-users>  #→在此行前加入上面三行

#然后重啟tomcat,重新訪問manager app頁面,如果此時仍然出現403 Access Denied錯誤,那么就是訪問的ip地受到了限制,
打開/webapps/manager/META-INF/目錄下context.xml文件.
將里面的內容注釋掉或者修改為
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />

[root@tomcat ~]# /application/tomcat/bin/shutdown.sh
[root@tomcat ~]# /application/tomcat/bin/startup.sh	

# 瀏覽器訪問 管理頁面10.0.0.9:8080/manager/  用配置好的賬號密碼登錄

8 搭建jpress--java 版本的wordpress

jsp 網頁

linux nginx php mysql
linux tomcat jdk mysql(mariadb)

#安裝mysql  (db服務器已經安裝)
yum install mariadb-server -y
systemctl start mariadb 
#創建數據庫 jpress
create database jpress default characher set utf8;
# 授權 
grant all jpress.* to jpress@'%' identified by '123456';
# 刷新權限
flush privileges;


# 部署站點代碼
[root@web03 ~]# cd /server/tomcat-8080/webapps/
[root@web03 webapps]# cp /tmp/jpress-web-newest.war ./
# jpress包放入webapps 目錄下 重新tomcat 會發現包已經自動被解壓了
[root@web03 webapps]# /server/tomcat-8080/bin/shutdown.sh
[root@web03 webapps]# /server/tomcat-8080/bin/startup.sh
# 查看
[root@web03 webapps]# ls
docs  examples  host-manager  jpress-web-newest  jpress-web-newest.war  manager  ROOT
# 目錄改名 |最好刪除jpress-web-newest.war 重啟之后又會解壓一遍
[root@web03 webapps]# mv jpress-web-newest jpress

# 瀏覽器訪問 10.0.0.9:8080/jpress
# 進入安裝界面了 按提示安裝..

#安裝完成 重啟tomcat
[root@web03 webapps]# /server/tomcat-8080/bin/shutdown.sh
[root@web03 webapps]# /server/tomcat-8080/bin/startup.sh

網站訪問
http://10.0.0.9:8080/jpress/
后台地址  賬號密碼是安裝時候設置的
http://10.0.0.9:8080/jpress/admin/login

tomcat 配置文件 conf/server.xml

	語法: 以<!-- 開頭, 以-->結尾, 中間包含的都是注釋, 段注釋
	
[root@web03 tomcat-8080]# vim conf/server.xml
# 指定關閉tomcat的端口號及暗號
<Server port="8005" shutdown="SHUTDOWN">
#指定 tomcat的web站點監聽端口
<Connector port="8080" protocol="HTTP/1.1"
       connectionTimeout="20000"
       redirectPort="8443" />
# 專門和apache通信的端口  不用,注釋
 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
# 定義主機 網站根目錄
 <Host name="localhost"  appBase="webapps"
       unpackWARs="true" autoDeploy="true">  //自動解壓 自動部署 (生產環境關閉false)
#定義日志  及日志格式
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="localhost_access_log" suffix=".txt"
       pattern="%h %l %u %t &quot;%r&quot; %s %b" />
 
	   
n[root@web03 ~]# netstat -lntup
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      2069/java
tcp6       0      0 :::8009                 :::*                    LISTEN      2069/java
tcp6       0      0 :::8080                 :::*                    LISTEN      2069/java

#向本地的8005端口發送SHUTDOWN 就可以關閉tomcat (后台三個java進程關閉了)
[root@web03 ~]# echo SHUTDOWN|nc 127.0.0.1 8005

tomcat 自定義網站目錄

	默認在 webapps/ROOT
	以前地址 http://10.0.0.9:8080/memtest/meminfo.jsp
	想要的地址: http://10.0.0.9:8080/meminfo.jsp

	第一種方法: 將 meminfo.jsp 放入ROOT目錄
	第二種方法: 想想 nginx的location 規則
				 location /oldboyedu/ {
					.....
				 }
 # 在host標簽內 添加 Context 標簽
[root@tomcat ~]# vim /application/tomcat/conf/server.xml
  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>

#sed 命令快速修改  在149行后面添加
[root@web03 tomcat-8080]# sed -i.ori '149a <Context path="" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>' conf/server.xml

# 修改好后重啟tomcat
[root@tomcat ~]# /application/tomcat/bin/shutdown.sh
[root@tomcat ~]# /application/tomcat/bin/startup.sh		 

Tomcat多實例 (多個虛擬主機)

多虛擬主機: nginx
	多實例: tomcat, 盡可能使用我們的系統的資源 (資源相對多)
	
[root@web03 tomcat-8080]# cd /application/tools/
[root@web03 tools]# ls
apache-tomcat-8.5.34.tar.gz
[root@web03 tools]# tar xf apache-tomcat-8.5.34.tar.gz
[root@web03 tools]# cp -a apache-tomcat-8.5.34 tomcat8_1
[root@web03 tools]# cp -a apache-tomcat-8.5.34 tomcat8_2
[root@web03 tools]# cp -a apache-tomcat-8.5.34 tomcat8_3

# 修改每個實例運行端口

[root@web03 tools]# sed -i 's#8005#8011#;s#8080#8081#' tomcat8_1/conf/server.xml
[root@web03 tools]# sed -i 's#8005#8012#;s#8080#8082#' tomcat8_2/conf/server.xml
[root@web03 tools]# sed -i 's#8005#8013#;s#8080#8083#' tomcat8_3/conf/server.xml

#打包多實例,方便以后批量配置實例
[root@web03 tools]# tar zcf tomcat_muti.tar.gz ./tomcat8_1 ./tomcat8_2 ./tomcat8_3
#將配置好的 實例移動到軟件目錄下
[root@web03 tools]# mv tomcat8_1 tomcat8_2 tomat8_3 /application/

# 啟動 多個實例

[root@web03 server]# tomcat8_1/bin/startup.sh
[root@web03 server]# tomcat8_2/bin/startup.sh

# 檢查對應端口 8081 8082

[root@web03 server]# netstat -lntup
tcp6       0      0 :::8009           :::*           LISTEN      2448/java
tcp6       0      0 127.0.0.1:8011     :::*           LISTEN      2448/java
tcp6       0      0 127.0.0.1:8012     :::*           LISTEN      2506/java
tcp6       0      0 :::8081           :::*           LISTEN      2448/java
tcp6       0      0 :::8082           :::*            LISTEN      2506/java

#瀏覽器訪問
http://10.0.0.9:8081/
http://10.0.0.9:8082/

tomcat反向代理集群

					// 前面加nginx反向代理	

							upstream java {
							server 172.16.1.8:8081
							server 172.16.1.9:8081
						}

# lb01 安裝nginx  (安裝過了)
 
# 編輯配置文件 在http段里寫 include 下面
vim /etc/nginx/nginx.conf 

upstream java {
#	server 172.16.1.9:8080;
	server 172.16.1.9:8081;
	server 172.16.1.9:8082;
}		
server {
	listen 80;
	server_name jpress.etiantian.org;
	location / {
		proxy_pass http://java;
		include proxy_params;
	}
}						
						
推薦寫到 /etc/nginx/conf.d/proxy.conf (因為nginx.conf 主配置文件包含conf.d/*.conf)
[root@lb01 conf.d]# cat proxyhttps.conf
upstream java {
#	server 172.16.1.9:8080;
	server 172.16.1.9:8081;
	server 172.16.1.9:8082;
}
server {
	listen 80;
	server_name jpress.etiantian.org;
	location / {
		proxy_pass http://java;
		include proxy_params;
	}
}
						
#  window hosts 解析后 瀏覽器訪問http://jpress.etiantian.org/						
	

tomcat監控

# 查看當前運行的java進程及pid號

[root@web03 server]# jps -lvm

1、Tomcat自帶函數檢測
 	ROOT/meminfo.jsp
	#瀏覽器訪問 http://10.0.0.3/meminfo.jsp

2、jps命令	jkd包自帶的命令, jps主要用來輸出jvm中運行的進程狀態信息.
	man jps
	
3、jstack命令   主要用來查看某個java進程內的線程堆棧信息

4、jmap
	
5、jconsole和visualvm

5.1Tomcat開啟遠程監控功能
	[root@web03 server]# vim tomcat8_1/bin/catalina.sh
109 CATALINA_OPTS="$CATALINA_OPTS
110 -Dcom.sun.management.jmxremote
111 -Dcom.sun.management.jmxremote.port=12345
112 -Dcom.sun.management.jmxremote.authenticate=false
113 -Dcom.sun.management.jmxremote.ssl=false
114 -Djava.rmi.server.hostname=172.16.1.9"

#重啟tomcat
[root@web03 server]# tomcat8_1/bin/shutdown.sh	
[root@web03 server]# tomcat8_1/bin/startup.sh	

# 檢測有沒有12345端口
[root@web03 server]# netstat -lntup|grep 12345
tcp6       0      0 :::12345         :::*          LISTEN      3565/java

# 如果沒有查看的日志文件   | 配對應的/etc/hosts

[root@web03 server]# tailf tomcat8_1/logs/catalina.out

# 如果是多個實例 這個配置要修改port端口 不能相同

windows下 安裝的jdk1.8 目錄下的bin
c:/program files /java/jdk1.8.0.31/bin 
								jconsole
								jvisualvm

zabbix監控

rpm -qa zabbix-java-gateway
#還要安裝zabbix

配置 zabbix server


  1. Tomcat安全優化和性能優化

    7.1 安全優化(必會)

降權啟動    //降低權限啟動  使用個普通用戶啟動tomcat
		useradd tomcat
		cp -a tomcat8_2 /home/tomcat/
		chown -R tomcat.tomcat /home/tomcat8_2/
		su - tomcat
		tomcat8_2/bin/startup.sh
	#不用切換用戶使用普通用戶執行命令,可以放入開機自啟動  
	su - tomcat -c '這里寫命令'

telnet管理端口保護 (8005)
ajp連接端口保護 (8009 注釋掉)
禁用管理端  // webapps目錄下只保留一個ROOT

7.2 性能優化

7.2.1 屏蔽dns查詢enableLookups="false"
<Connector  port="8081" protocol="HTTP/1.1"
           connectionTimeout="6000" enableLookups="false" acceptCount="800"
           redirectPort="8443" />
7.2.2 jvm調優
Tomcat最吃內存,只要內存足夠,這只貓就跑的很快。

如果系統資源有限,那就需要進行調優,提高資源使用率。

優化catalina.sh配置文件。在catalina.sh配置文件中添加以下代碼:

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"

server:一定要作為第一個參數,在多個CPU時性能佳
-Xms:初始堆內存Heap大小,使用的最小內存,cpu性能高時此值應設的大一些
-Xmx:初始堆內存heap最大值,使用的最大內存
上面兩個值是分配JVM的最小和最大內存,取決於硬件物理內存的大小,建議均設為物理內存的一半。

-XX:PermSize:設定內存的永久保存區域
-XX:MaxPermSize:設定最大內存的永久保存區域
-XX:MaxNewSize:
-Xss 15120 這使得JBoss每增加一個線程(thread)就會立即消耗15M內存,而最佳值應該是128K,默認值好像是512k.
+XX:AggressiveHeap 會使得 Xms沒有意義。這個參數讓jvm忽略Xmx參數,瘋狂地吃完一個G物理內存,再吃盡一個G的swap。
-Xss:每個線程的Stack大小
-verbose:gc 現實垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般設置為Xmx的3、4分之一
-XX:+UseParNewGC :縮短minor收集的時間
-XX:+UseConcMarkSweepGC :縮短major收集的時間


nginx+tomcat配置https

網上搜索的很多文章在描述 Nginx + Tomcat 啟用 HTTPS 支持的時候,都必須在 Nginx 和 Tomcat 兩邊同時配置 SSL 支持。

最終配置的方案是瀏覽器和 Nginx 之間走的 HTTPS 通訊 而Nginx 到 Tomcat 通過 proxy_pass 走的是普通 HTTP 連接。

lb01 負載均衡 nginx 配置

先申請https證書
[root@web01 code]# mkdir /etc/nginx/ssl_key -p
[root@web01 code]# cd /etc/nginx/ssl_key/
[root@web01 ~]# openssl genrsa -idea -out server.key 2048
這里密碼設置1234
[root@web01 ~]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:WH
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:edu    
Organizational Unit Name (eg, section) []:SA
Common Name (eg, your name or your server's hostname) []:bgx
Email Address []:bgx@foxmail.com

lb01 的 proxyhttps.conf 配置

[root@lb01 conf.d]# cat proxyhttps.conf
upstream java {
#	server 172.16.1.9:8080;
	server 172.16.1.9:8081;
#	server 172.16.1.9:8082;
}
server {
	listen 80;
	server_name jpress.etiantian.org;
	return 302 https://$server_name$request_uri;
#	location / {
#		proxy_pass http://java;
#		include proxy_params;
#	}
}
server {
    listen       443 ssl;
    server_name  jpress.etiantian.org;

	ssl on;
	ssl_certificate  ssl_key/server.crt;
	ssl_certificate_key  ssl_key/server.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect off;
        proxy_connect_timeout      240;
        proxy_send_timeout         240;
        proxy_read_timeout         240;
        # note, there is not SSL here! plain HTTP is used
        proxy_pass http://java;
    }
}	

#其中最為關鍵的就是 ssl_certificate 和 ssl_certificate_key 這兩項配置,其他的按正常配置。不過多了一個 proxy_set_header X-Forwarded-Proto https; 配置。			

Tomcat server.xml 完整配置

[root@web03 server]# cat tomcat8_1/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>

<Server port="8011" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443"
		proxyPort="443" />
 
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
	
    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
		  remoteIpHeader="x-forwarded-for"
                  remoteIpProxiesHeader="x-forwarded-by"
                  protocolHeader="x-forwarded-proto"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>			

#上述的配置中沒有什么特別的,但是特別特別注意的是必須有 proxyPort="443",這是整篇文章的關鍵,當然 redirectPort 也必須是 443。同時 <Value> 節點的配置也非常重要,否則你在 Tomcat 中的應用在讀取 getScheme() 方法以及在 web.xml 中配置的一些安全策略會不起作用。

參考文檔
https://blog.oldboyedu.com/java-tomcat/
http://www.zyops.com/java-tomcat/
https://www.cnblogs.com/swbzmx/articles/8845810.html



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM