http://xtony.blog.51cto.com/3964396/988706
Tomcat一點一滴之(一)基本搭建
Microsoft IIS | .Net |
Apache | Html/PHP |
Nginx | Html/PHP |
Tomcat | Jsp |
- cd /usr/java
- chmod 755 jdk-6u24-linux-i586-rpm.bin #添加執行權限
- ./jdk-6u24-linux-i586-rpm.bin #會生成jdk-6u1-linux-i586.rpm的文件
- 當頁面出現“Press Enter to continue..... ” #按回車鍵即可
- JAVA_HOME=/usr/java/jdk1.6.0_24
- CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
- export PATH CLASSPATH JAVA_HOME
- tar zxf apache-tomcat-6.0.35.tar.gz #解壓文件
- mv apache-tomcat-6.0.35 tomcat #改名,易於寫path路徑
- /usr/local/tomcat/bin/startup.sh #啓動腳本
- /usr/local/tomcat/bin/shutdown.sh #關閉腳本
- <Connector port="8001" protocol="HTTP/1.1" #將port改成想要的端口即可
- connectionTimeout="20000"
- redirectPort="8443" />
- <Context path="" docBase="/web" debug="0" reloadable="false" xmlNamespaceAware="false" xmlValidation="false"/--> #docBase就是要改的目錄路徑
- /bin #存放各種平臺下啓動和關閉Tomcat的腳本文件;
- /conf #Tomcat的各種配置文件,最重要的是 server.xml;
- /lib #存放Tomcat服務器和所有web應用需要的jar包;
- /logs #存放Tomcat的日誌文件;
- /temp #Tomcat運行時候存放臨時文件用的;
- /webapps #web應用的發佈目錄,把 java開發的web站點或war文件放入這個目錄下就可以通過tomcat服務器訪問;
- /work #Tomcat的工作目錄,默認情況下把編譯JSP文件生成的servlet類文件放於此目錄下。
- 然後說下conf/下的配置文件:
- server.xml #Tomcat中最重要的配置文件,定義了tomcat的體系結構;設置端口,集羣,web應用,訪問日誌等主要功能。
- tocmat-users.xml #Tocmat管理員身份的配置文件;關鍵是設置管理員賬號的密碼
- context.xml #全局context的配置文件;將數據庫JNDI在這裏定義好
- logging.properties #Tocmat日誌配置文件;可以修改默認的Tocmat日誌路徑和名稱
- web.xml #web.xml是JSP的一個配置文件,裏面設置了通用的默認值
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <!DOCTYPE web-app
- PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
- <web-app>
- <display-name>My Web Application</display-name>
- <description>
- A application for test.
- </description>
- </web-app>
- <html>
- <body>
- <center>
- Now time is: <%=new java.util.Date()%>
- </center>
- </body>
- </html>
- groupadd mysql
- useradd -g mysql -s /sbin/nologin -M mysql
- tar zxvf mysql-5.1.63.tar.gz
- cd mysql-5.1.63
- ./configure \
- --prefix=/usr/local/mysql \
- --with-unix-socket-path=/tmp/mysql.sock \
- --enable-thread-safe-client \
- --with-mysqld-user=mysql \
- --with-big-tables \
- --without-debug \
- --with-pthread \
- --enable-assembler \
- --with-extra-charsets=complex \
- --with-readline \
- --with-ssl \
- --with-embedded-server \
- --enable-local-infile \
- --with-plugins=partition,innobase \
- --with-plugin-PLUGIN \
- --with-mysqld-ldflags=-all-static \
- --with-client-ldflags=-all-static
- make && make install
- cp support-files/my-medium.cnf /etc/my.cnf #建立配置文件
- /usr/local/mysql/bin/mysql_install_db --user=mysql #初始化數據庫,並修改相關目錄所有權
- chown -R root.mysql /usr/local/mysql/
- chown -R mysql /usr/local/mysql/var/ #調整目錄權限
- echo "/usr/local/mysql/lib/mysql/" >>/etc/ld.so.conf
- ldconfig #調整lib庫路徑
- /usr/local/mysql/bin/mysqld_safe --user=mysql & #使用mysqld_safe腳本安全啓動服務(後臺)
- cp support-files/mysql.server /etc/init.d/mysqld
- chmod a+x /etc/init.d/mysqld
- chkconfig --add mysqld
- chkconfig mysqld on #將mysql變成系統服務並開機自啓
- echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile #把MySQL加入環境變量,方便執行命令
- source /etc/profile #使環境變量生效
- service mysqld restart #重啓服務
- mysqladmin -u root password 123 #設置數據庫root密碼
- <%@ page language="java" %>
- <%@ page import="com.mysql.jdbc.Driver" %>
- <%@ page import="java.sql.*" %>
- <%
- String driverName="com.mysql.jdbc.Driver";
- String userName="root";
- String userPasswd="123";
- String dbName="test";
- String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
- Class.forName("com.mysql.jdbc.Driver").newInstance();
- try
- {
- Connection connection=DriverManager.getConnection(url);
- out.println(" Connection Mysql is OK !");
- connection.close();
- }
- catch( Exception e )
- {
- out.println( "connent mysql error:" + e );
- }
- %>
1、聚合。使用Apache做爲前端大門,後端部署多個Tomcat實例,如果一個實例出現問題,Apache將忽略這個實例,讓系統管理員高枕無憂。當然如果在硬件負載均衡設備的基礎上利用Tomcat的聚合能力就沒有必要進行集成了。 2、聚合/安全。當然如果使用Apache做爲門戶來區分擁有不同URL命名空間的不同的Tomcat。每個Tomcat都成爲一個保護區域,從安全角度講,僅僅需要主要Apache 服務器。在這個方案中,Apache已經變成一個輕量級的代理服務器。 3、安全。就安全來講,集成和不集成都是爭論雙方的焦點。Java有安全管理功能,Apache對安全考慮的也是比較周道的。可以使用Google來查閱這方面的資料。在某個場合中,集成是上上策,但是另外一個場合,可能不集成略勝一籌。但是如果集成Apache和Tomcat,一定要記住:你需要同時關注Apache和Tomcat的安全,而不是一個。 4、附加因素。在Apache上運行perl,PHP和CGI都是很普通的事情。但是對Tomcat來說,不僅速度忙,而且不太正式。Apache可以任意添加上百個附加軟件,當然Tomcat也有這個能力,但是這樣的模塊還沒有開發出來。 5、裝飾。當Apache做爲Tomcat前端時,你可以完成大量Tomcat不支持或沒有現成代碼的裝飾工作。沒有必要重新爲Tomcat開發一套類似爲Apache的mod_headers,mod_rewrite, and mod_alias。 6、速度。Apache的靜態網頁處理速度高於Tomcat。但是除非你的流量很大,這一點時沒有意義的。在另外一些情況下,Tomcat要比Apache快。所以兩者結合可以加速你的站點。 7、Socket handling(姑且認爲是連接)/系統穩定性。Apache在處理錯誤鏈接上優於Tomcat。主要原因是Tomcat所有的連接都交給JVM來處理,而JVM是跨平臺的,問題是跨平臺的優化是一個嚴峻的考驗。大部分時間java程序都是正常的,但是當情況非常惡劣時,例如:非常頻繁的掉線,無效數據包,無效IP的無效請求。Apache比基於JVM的程序要好。 |
apache與tomcat負載集羣集成方法有3種jk、jk_proxy、http_proxy
本次實驗爲jk的這種方式,好了,開始:
一、準備包文件,安裝:
需要用到的包:
httpd-2.2.16.tar.gz #Apache源碼包
apache-tomcat-6.0.35.tar.gz #Tomcat壓縮包
tomcat-connectors-1.2.30-src.tar.gz #連接Apache和Tomcat(mod_jk)
- # tar xzvf httpd-2.2.0.tar.gz
- # cd httpd-2.2.0
- # ./configure --prefix=/usr/local/apache2 --enable-so #因做測試,最簡單的編譯參數即可
- # make && make install
- # cp apache-tomcat-6.0.35.tar.gz /usr/local
- # cd /usr/local
- # tar zxf apache-tomcat-6.0.35.tar.gz
- # mv apache-tomcat-6.0.35 tomcat
- # tar zxf tomcat-connectors-1.2.30-src.tar.gz
- # cd tomcat-connectors-1.2.30-src/native
- # ./configure --with-apxs=/usr/local/apache2/bin/apxs
- # make
- # cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules/ #拷貝至Apache指定模塊目錄
- JkWorkersFile /usr/local/apache2/conf/workers.properties #指定workers.properties的位置
- JkLogFile /usr/local/apache2/logs/mod_jk.log #指定jk的日誌輸出文件
- JkLogLevel info #指定日誌級別
- JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" #指定日誌輸出的時間戳格式
- JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories #JkOptions指示發送給SSL密鑰大小
- JkRequestLogFormat "%w %V %T" #指定日誌中時間戳後面的內容:%w:工作的tomcat實例 %V:目標ip %T:耗時
- JkMount /servlet/* worker1 #指URL指向如果有servlet,則讓worker1去處理
- JkMount /*.jsp worker1 #指URL爲/*.jsp的頁面,讓worker1去處理
- worker.list=worker1 #指定需要工作的tomcat節點,如多個用“,”分割
- worker.worker1.type=ajp13 #指定worker1使用ajpv13協議與Tomcat進程通訊
- worker.worker1.host=localhost #指定worker1的位置
- worker.worker1.port=8009 #指定worker1的工作端口
- worker.worker1.cachesize=10 #指定worker1的緩存大小
- worker.worker1.cache_timeout=600 #指定worker1的cache中保留一個打開的socket的時間
- worker.worker1.socket_keepalive=1 #此配置項爲當Apache和Tomcat之間有防火牆時,讓os每隔多久想未激活的連接發送KEEP_ALIVE信息,防止防火牆切斷未激活的網絡連接
- worker.worker1.socket_timeout=300 #指定worker1上的連接在未激活的狀況下持續多久,Apache將主動切斷
- # tar zxf pcre-8.10.tar.gz
- # cd pcre-8.10
- # ./configure
- # make && make install
- # tar zxf nginx-1.0.10.tar.gz
- # cd nginx-1.0.10
- # ./configure --with-http_stub_status_module --with-http_ssl_module #啓動server狀態和https模塊
- # make && make install
- proxy_redirect off; #關閉代理重定向
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr; #獲取真實ip
- #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #獲取代理者的真實ip
- client_max_body_size 10m; #允許客戶端請求的最大單文件字節數
- client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大字節數
- proxy_connect_timeout 90; #後端服務器連接的超時時間
- proxy_send_timeout 90; #後端服務器數據回傳時間
- proxy_read_timeout 90; #後端服務器處理請求的時間
- proxy_buffer_size 4k; #設置緩衝區大小
- proxy_buffers 4 32k; #設置緩衝區的大小和數量
- proxy_busy_buffers_size 64k; #用來控制同時傳輸到客戶端的buffer數量
- proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳