這是一個通用的Web即B/S工程的架構,它由:css
ü Web Serverhtml
ü App Serverjava
ü DB Serverweb
三大部分組成,其中:spring
² Web Serversql
置於企業防火牆外,這個防火牆,你們能夠認爲是一個CISCO路由器,而後在CISCO路由器上開放了兩個端口爲:80和443。數據庫
80端口:用於正常的http訪問apache
443端口:用於https訪問,即若是你在ie裏打入https://xxx.xxx.xx這樣的地址,默認瀏覽器
走的是443這個端口。tomcat
WebServer專門:
用於解析HTML、JS(JavaScript)、CSS、JPG/GIF等圖片格式文件、TXT、
VBSCRIPT、PHP等一切一切「靜態」網頁內容。
² App Server
置於企業防火牆內,它和Web Server之間的鏈接必須且必定爲內部IP鏈接。
外部IP:即Internet IP地址,咱們的web服務器通常會有一個內部IP一個外部IP,所以在這裏,咱們的App Server沒有任何外部IP,只有內部IP,因此我在這邊說App Server與Web Server只能之內部IP形式鏈接。
打比方說咱們用的是tomcat,它的端口爲8080,那麼這個ip地址上的8080端口只能由任何內部ip才能訪問,外部的internet是訪問不了的,這樣作就是爲了安全。
App Server用於解析咱們的任何須要Java編譯器才能解析的「動態」網頁,其實App Server自己也能解析任何靜態網頁的。
那麼咱們這樣來想一下:
咱們讓負責專門解析靜態網頁的Web Server來解析html等內容,而讓App Server專門用於解析任何須要Java編譯器才能解析的東西,讓它們「兩人」各司其職。這樣做的好處:
1) 爲App Server「減壓」,同時也提升了performance
2) 不用再把8080這個端口暴露在internet上了,也很安全,必經咱們的app server上但是有咱們的代碼的,就算是編譯過的代碼也容易被「反編譯」,這是很不安全的。
3) 爲未來的進一步的「集羣擴展」打好了基礎
² DB Server
打比方說咱們用的是Oracle,它須要經過1521與App Server進行鏈接是否是?那麼這個1521咱們稱爲數據庫鏈接端口,若是把它暴露在Internet上,是否是在危險了點?就算咱們的密碼很複雜,但對於高明的黑客來講,要攻破你的口令也只是時間上的問題而己。
所以咱們把咱們的DB Server也和App Server同樣,置於內網的防火牆。任何的DB鏈接與管理只能經過內網即在公司企業內部來訪問,就是這個道理。
DB(Oracle)我已經爲你們準備好了,鏈接信息爲:
IP: |
10.225.10x.xx |
Port: |
1521 |
Username/Password: |
xxx/xxx |
Sid: |
Jcoedb1 |
url: |
jdbc:oracle:thin:@10.225.10x.xx:1521:xxx |
因此,根據上述的架構,咱們能夠把以下這樣的一份清單丟給NSS或者是相關的網絡管理部門,讓他們給咱們開通相應的端口:
Web Server |
對外IP: xxx.xxx.xxx.xxx 向internet開通80與443端口 |
App Server |
對內IP: 10.225.xxx.xxx 只對10.225.段的ip開放8080,8009等端口, |
Db Server |
對內IP: 10.225.xxx.xxx 只對10.225.段的ip開放1521端口 |
直接解壓tomcat至你的本地如:d:\tomcat,我這邊用的目錄名叫tomcat2,你們隨意,最好名字可以越簡單越好d:\tomcat或者c:\tomcat就行,不要放得太「深」。
咱們在這邊將安裝Apache For Win 2.2.x,它將佔用你機器的80和443端口。所以若是你機器上有任何程序佔用你的80和443端口,必須將它關閉掉,好比說:
咱們裝有微軟的IIS,這自己也是一個WebServer,那麼請你將它關閉:
ControlPanel->Administrative Tools->Service,找到IISAdmin和,將它所有關閉並將啓動方式設爲:manual以便於不用每次重啓後再要去手動關閉一下。
而後用netstat –ano找到任何還在佔用80端口的程序,將它關閉掉。
咱們將安裝這個版本的apache http server做爲咱們從此一直使用的Web Server
這邊的server name大家要填入本身的server的真實名,不能用我這個,這個servername如:shnlap93.cts.com只可以我用,這個名稱是全局惟一的,和你的IP同樣。
選所有安裝
裝完後你會多出一個這樣的圖標來,點擊該圖標,裏面有用於控制apache http server的啓動、中止與重啓等操做選項。同時在大家的「服務」面板中,也能發現這樣的一個服務項,它啓動時默認是隨着系統的啓動而啓動的,咱們把它改爲「手動」吧,由於未來咱們還要安裝IBM Http Server來做練習。
裝完後,在Apache2.2啓動的前提下,打開一個ie輸入http://localhost,你將會獲得這樣的一個頁面,就說明你的Apache的安裝是成功的。
學Java的人,必須會這個Apache的配置,要否則你怎麼模擬環境、搭建環境和架構環境?光會Coding是遠遠不夠的,你將永遠只配做個碼農。。。嘿嘿嘿!有不少人發覺到了後面JAVA學不上去了,關鍵因素在於:配置。
你會配環境了,那麼你就能模擬任何客戶方、開發方的環境。
你會配環境了,你的代碼未來上線時才能成功運行。
你會配環境了,因此整個工程的技術核心就是你。
跟着個人教程,大家將會安裝和運行達近百個各類軟件與配置,搞得你一股臭味一股臭味!!
你準備好了沒有?
固然,不用怕,由於個人配置都是實際運行的環境,因此網上的一些東西你能夠不用去看,由於不少人都是在網上進行拷貝、複製,有時也不通過驗證,會讓你走不少的彎路到頭來仍是落得個BUG一天世界,就看個人教程吧。
Apache的配置主要集中在httpd.conf文件,它位於你的安裝目錄,好比:
D:\tools\httpd\conf\
咱們用ultraedit或者相關文本編輯工具打開它,來看它的內容:
先來查找到以下這一行:
#ServerName
咱們能夠獲得以下這一行內容:
#ServerName shnlap93.cts.com:80 |
這就是咱們的主機名了,咱們能夠將前面的「#」去掉,並將其改成:
ServerName 10.225.106.35:80 |
改完後存盤,在重啓你的Apache2.2前咱們先測試一下咱們的Apache的配置文件是否改得對:
若是在你點了Test Configuration後,黑屏一閃而過,說明你的改動無誤,不然這個黑屏會一直停留在當前狀態,而且告訴你,你的配置改動有錯,錯在哪裏。
從新啓動你的Apache
找到以下這行:
DocumentRoot
你會發下有這樣的一行內容:
DocumentRoot "D:/tools/httpd/htdocs" |
這個叫做DocumentRoot即webroot,即:發佈目錄,發佈在這個目錄下的任何工程都會在Apache服務開啓時被裝載成標準的web工程,咱們如今動手來把這個WebRoot定位到咱們本身的發佈目錄中去吧。
DocumentRoot "d:/www" |
咱們把它改到了d盤的www目錄中去了,而後咱們在該目錄中放入一個index.html文件,內容爲:
<html><body><h1>Hey man, apache works!</h1></body></html> |
重啓咱們的Apache服務,來測試一下:
嘿嘿,咱們獲得了什麼?禁止訪問,爲何?
找到下面這一段:
<Directory /> Options FollowSymLinks AllowOverride None Order deny,allow deny from all </Directory> |
看到了沒?
如今,把這個」deny from all」改爲」allow fromall’吧。
<Directory /> Options FollowSymLinks AllowOverride None Order deny,allow allow from all </Directory> |
修改完後重啓你的Apache服務
Ok,咱們的Apache的發佈目錄已經成功更改到了d:\www目錄下了,咱們再來作一個實驗:
咱們在IE瀏覽器中輸入: http://localhost/css/,咱們看到了什麼?
這還了得,用戶若是是個初級黑客均可以知道咱們的服務器上有哪些文件,哪些目錄甚至能夠直接看到咱們的文件內容,怎麼辦?
找到下面這行
Options FollowSymLinks indexes |
把它注掉改爲下面這樣
#Options FollowSymLinks indexes Options None |
不要急,再往下找,還有
Options Indexes FollowSymLinks |
又來一個,再改掉
#Options Indexes FollowSymLinks Options None |
改完這兩條後重啓你的Apache服務
再次打開一個新的IE,輸入:http://localhost/css/,咱們看到了以下的界面:
好了,Apache的基本配置完成了即:
1) 基本的安全配置,不容許目錄訪問
2) 把WebRoot改到另外一個物理目錄上而不使用Apache自帶的WebRoot目錄
Apache(Web Server)負責處理HTML靜態內容;
Tomcat(App Server)負責處理動態內容;
其實就是上述這樣的一個架構,下面是原理
1) Apache裝有一個模塊,這個模塊叫mod_jk
2) Apache經過80端口負責解析任何靜態web內容
3) 任何不能解析的內容,用表達式告訴mod_jk,讓mod_jk派發給相關的app server去解釋。
經過上述的文字描述咱們能夠得知:
1) 咱們須要在Apache中先裝一個mod_jk
2) 咱們須要在httpd.conf中寫點表達式
下面來實現。
1) 把mod_jk-1.2.31-httpd-2.2.3.so手工copy進咱們的Apache安裝目錄的modules目錄下,這個文件的全名叫: mod_jk-1.2.31-httpd-2.2.3.so,你們能夠從ftp上的「/JavaArchitect/mod_jk/」目錄中獲取,由於這個文件是我用C++在本地從新編譯過的,網上下載的是src即源碼,省去你們再去編譯的時間了,並且一些其它網上下載的mod_jk.so是沒法使用的。
2) 用ultraedit打開httpd.conf文件,跑到文件最後面加入如下幾行:
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so JKWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log <VirtualHost *> ServerAdmin localhost DocumentRoot d:/www/ ServerName localhost DirectoryIndex index.html index.htm index.jsp index.action ErrorLog logs/shsc-error_log.txt CustomLog logs/shsc-access_log.txt common
JkMount /*WEB-INF ajp13 JkMount /*j_spring_security_check ajp13 JkMount /*.action ajp13 JkMount /servlet/* ajp13 JkMount /*.jsp ajp13 JkMount /*.do ajp13 JkMount /*.action ajp13
JkMount /*fckeditor/editor/filemanager/connectors/*.* ajp13 JkMount /fckeditor/editor/filemanager/connectors/* ajp13 </VirtualHost> |
關鍵的是這兩句:
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
JKWorkersFile conf/workers.properties
表明:
ü Apache載入一個額外的插件,用於鏈接tomcat。
ü 鏈接時的配置參數描述位於Apache安裝目錄的/conf目錄下的一個叫workers.properties文件中,mod_jk通常使用ajp13協議鏈接,使用的是tomcat的8009端口。
3) Worker.properties文件內容以下:
workers.tomcat_home=d:/tomcat2 workers.java_home=C:/jdk1.6.32 ps=/ worker.list=ajp13 worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13 |
4) 告訴咱們的Apache,哪些是要交給tomcat來解析,除此以外都由Apache自己來解析:
<VirtualHost *> ServerAdmin localhost DocumentRoot d:/www/ ServerName localhost DirectoryIndex index.html index.htm index.jsp index.action ErrorLog logs/shsc-error_log.txt CustomLog logs/shsc-access_log.txt common
JkMount /*WEB-INF ajp13 JkMount /*j_spring_security_check ajp13 JkMount /*.action ajp13 JkMount /servlet/* ajp13 JkMount /*.jsp ajp13 JkMount /*.do ajp13 JkMount /*.action ajp13
JkMount /*fckeditor/editor/filemanager/connectors/*.* ajp13 JkMount /fckeditor/editor/filemanager/connectors/* ajp13 </VirtualHost> |
你們看到沒,全部的/servlet/*都由tomcat負責解析,全部的jsp, .do, .action都由tomcat解析。
此處還有一個特殊的/fckeditor,這個是咱們使用的一個博客編輯器,這個由於是servlet的,所以也須要交給tomcat鐵析。
5) 將/cbbs工程佈署到tomcat的webapps目錄下
6) 將/cbbs一樣手工copy一份到d:/www目錄下
7) 刪除d:/www/cbbs/WEB-INF這個目錄,嘿嘿,由於d:/www下的東西是由Apache解析的,全部的WEB-INF下的都是Java,咱們只須要佈署在tomcat下便可,是否是?
8) 重啓tomcat,重啓Apache,在ie中直接輸入: http://localhost/cbbs,使用sally/abcdefg登陸,操做一下,一切成功
Oh…yeah, tomcat+apache一步搞定。
最後附上cbbs佈署須要用到的配置,相關的工程可經過ftp的」 /Java Architect/Project/」下的cbbs.zip來獲取。
ü 在tomcat中打開server.xml加入:
<Resource driverClassName="oracle.jdbc.OracleDriver" factory="org.apache.commons.dbcp.BasicDataSourceFactory" maxActive="25" maxIdle="100" maxWait="5000" name="jdbc/eltds" password="xxx" type="javax.sql.DataSource" url="jdbc:oracle:thin:@10.225.101.51:1521:jcoedb1" username="xxx"/> |
和
<Context crossContext="true" docBase="D:/upload" path="/uploadpic" reloadable="true"/> <Context docBase="cbbs" path="/cbbs" reloadable="true"/> |
ü 手工在d盤根目錄創建一個upload目錄,在此目錄內再創建一個image目錄。
ü 在tomcat中打開context.xml加入
<ResourceLink name="jdbc/cbbsds" type="javax.sql.DataSource" global="jdbc/cbbsds"/> |