Nginx常見問題 、 Tomcat服務器 、 Tomcat高級應用


#########################################################################################################

nginx優化:
nginx優化主要從配置文件來着手優化:
worker_processes         //與CPU核心數一致
worker_connections     //每個worker的最大併發連接數
server_tokens        //服務器版本信息
client_herder_buffer_size    //默認請求包頭信息的緩存大小
large_client_header_buffer    //大請求包頭部信息的緩存個數和容量
error page 404             //自定義404錯誤頁面

#####################################################################################################

服務端地址:192.168.4.5
客戶端地址:192.168.4.100

服務端:

#安裝nginx(前面博客中有具體安裝方法)
#/usr/local/nginx/sbin/nginx  //啓動服務
#netstat -anptu | grep "80"     //驗證是否啓動

客戶端:

#yum -y install httpd-tools
#ab -n 2000 -c 2000 http://192.168.4.5  //使用ab這個工具,來測試服務端的併發量
socket:Too many open files(24)          //大量的文件被打開,表示服務器不能正常打開頁面。

所以,我們需要對服務端的最大併發量進行優化。

###################################################################################################

服務端:
#vim /usr/local/nginx/conf/nginx.conf
......
worker_processes 1;
events {
worker_connections 30000    //每個worker最大併發連接數改爲30000
use epoll;
}
相當於再軟件撒謊嗯對併發量作的優化.

#vim /etc/security/limits.conf
*    soft nofile        1000000
*    hard nofile        1000000
#ulimit -Hn 100000
#ulimit -Sn 100000

相當於在硬件上對最大併發量做的優化

客戶端測試:
#ulimit -Hn 100000
#ulimit -Sn    100000
客戶端也需要進行併發量的提高.
#ab -n 2000 -c 2000 http://192.168.4.5    //不再出現Too many open files(24).表示正常.

################################################################################################

在我們的客戶端對我們的服務端進行訪問時,我們可以看到我們的nginx的版本信息,那麼***者就會通過當前版本的BUG來對我們的服務端進行***,所以我們就需要隱藏我們的nginx版本信息.

服務端:
#vim /usr/local/nginx/conf/nginx.conf
http {
server_tokens off;                    //不顯示nginx版本號信息

server {
        listen       80;
        server_name  www.tarena.com;
        location / {
            root   html;
            index  index.html index.htm;
        }
}
}

客戶端:
#curl -i http://192.168.4.5        //看不到版本信息,實現安全防護.

############################################################################################################

當我們的客戶端訪問過程中,如果請求包頭信息過大,導致訪問會出現  Request-URI Too large ,頁面不能正常正常顯示.所以我們需要對nginx進行優化.

服務端:
#vim buffer.sh  //利用腳本模擬包頭信息過大
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
        URL=${URL}v$i=$i
done
curl $URL
#bash buffer.sh    //顯示的內容中會出現 Request-URI Too large

#vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes  2;                    //與CPU核心數量一致
events {
worker_connections 65535;        //每個worker最大併發連接數
use epoll;
}
http {
server_tokens off;                        //不顯示nginx版本號信息
client_header_buffer_size    1m;          //默認請求包頭信息的緩存大小改爲1m   
large_client_header_buffers  4 4k;        //大請求包頭部信息的緩存個數與容量
gzip on;                         //啓用壓縮,可以更快速的傳輸數據
gzip_min_length 1000;                //最小壓縮大小爲1000k
gzip_comp_level 4;                
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;        //壓縮的文件類型
server {
        listen       80;
        server_name  www.tarena.com;
        location / {
            root   html;
            index  index.html index.htm;
        }

#bash buffer.sh     //不再顯示request URI Too large

#################################################################################################

在我們的客戶端訪問過程中,有些文件或者圖片,我們可以緩存到客戶端上,這樣客戶端再次訪問相同文件或圖片時,就不需要服務端找到相應的文件和圖片發送給客戶端,既提高了響應時間,又緩解了服務端的壓力.

服務端:
#vim /usr/local/nginx/conf/nginx.conf

.. ..
worker_processes  2;                    //與CPU核心數量一致
events {
worker_connections 65535;        //每個worker最大併發連接數
use epoll;
}
http {
server_tokens off;                    //不顯示nginx版本號信息
client_header_buffer_size    1k;        //默認請求包頭信息的緩存    
large_client_header_buffers  4 4k;        //大請求包頭部信息的緩存個數與容量
gzip on;
gzip_min_length 1000;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
        listen       80;
        server_name  www.tarena.com;
        location / {
            root   html;
            index  index.html index.htm;
        }
location ~* \.(jpg|jpeg|png|gif|css|js|ico|xml)$ {    //定義緩存的文件格式
expires 30d;                            //客戶端緩存時間爲30天
}
}
}

客戶端:
#清除firefox緩存
#firefox http://192.168.4.5
#導航欄輸入 about:cache 點擊list cache entries  //可以查看訪問的緩存天數.

#############################################################################################################

自定義404頁面:

服務端:
#vim /etc/local/nginx/conf/nginx.conf
.. ..
worker_processes  2;                    //與CPU核心數量一致
events {
worker_connections 65535;        //每個worker最大併發連接數
use epoll;
}
http {
server_tokens off;                    //不顯示nginx版本號信息
client_header_buffer_size    1k;        //默認請求包頭信息的緩存    
large_client_header_buffers  4 4k;        //大請求包頭部信息的緩存個數與容量
gzip on;
gzip_min_length 1000;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
        listen       80;
        server_name  www.tarena.com;
        location / {
            root   html;
            index  index.html index.htm;
        }
location ~* \.(jpg|jpeg|png|gif|css|js|ico|xml)$ {    //定義緩存的文件格式
expires 30d;                            //客戶端緩存時間爲30天
}
error_page  404 /40x.html;                    //定義404頁面,頁面可以自行編輯.
location = /40x.html {
    root html;
}
}
}

客戶端:
#firefox http://192.168.4.5/dasdsad    //訪問一個不存在的頁面,就會出現自定義的404頁面.

#######################################################################################################

Tomcat:

JDK:是Sun針對JAVA開發者推出的JAVA語言的軟件開發工具包.

JRE:JAVA運行環境,運行JAVA程序所必須的環境的集合.JRE爲JDK的子集.

JAVA servlet:
    Servlet是一種擴展Web服務器功能的組建規範.
      它能夠以一種可以值的方法來提供動態的.面向用戶的內容,處理用戶請求.

常見的Servlet容器
--IBM    websphere
--Oracle weblogic
--Apache tomcat
--RedHat Jboss
開發者一般主要開發的是Servlet容器中的Servlet代碼.

##########################################################################################################

Tomcat:

服務端:
#yum -y install java-1.8.0-openjdk            //安裝jdk1.8.0
#yum -y install java-1.8.0-openjdk-headless

#tar -zcf apache-tomcat-8.0.30.tar.gz
#mv apache-tomcat-8.0.30 /usr/local/tomcat
#ls /usr/local/tomcat
bin                                //主程序目錄
lib                                //庫文件
logs                                //日誌文件
webapps                            //默認網頁目錄
temp                                //臨時目錄
work                                //自動編譯目錄jsp轉換爲Servlet
conf                                //配置文件目錄

#vim  /usr/local/tomcat/webapps/ROOT/test.jsp
<html>
<body>
<center>
Now time is: <%=new java.util.Date()%>            //顯示服務器當前時間
</center>
</body>
</html>

#vim /usr/local/tomcat/bin/startup.sh    //啓動服務
#netstat -anptu | grep "java"            //查看java監聽端口
tcp        0      0 :::8080              :::*                LISTEN      2778/java      //啓動端口     
tcp        0      0 ::ffff:127.0.0.1:8005     :::*         LISTEN       2778/java      //停止端口

客戶端驗證:

#firefox http://127.0.0.1:8080            //顯示tomcat默認頁面
# firefox http://127.0.0.1:8080/test.jsp    //顯示系統當前時間


########################################################################################################33

tomcat配置文件:

-->server.xml        //主配置文件

-->context.xml        //定義會話管理器,JDBC等

-->tomcat-users.xml    //用戶認證的帳號和密碼配置文件

主配置文件解析:

Server是Tomcat實例的頂層元素,一個tomcat實例
Service是一個集合,它由一個或者多個Connector以及一個Engine組成
Connector負責接受用戶的請求和向用戶返回響應結果
Engine負責處理所有的Connector所獲得的客戶請求,它處理在同一個Servise中的所有Connector元素接收到的客戶請求,它匹配請求和自己的虛擬主機,並將請求發送給相應的<Host>處理,默認的主機是localhost
一個<Engine>元素可以包含多個<Host>元素,每個<Host>元素,定義一個虛擬主機,它包含一個或多個Web應用.

##################################################################################################

Tomcat虛擬主機:

服務端:
# vim /usr/local/tomcat/conf/server.xml    //創建虛擬主機
… …
<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
</Host>
<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
</Host>

# mkdir -p  /usr/local/tomcat/{aa,bb}/ROOT            //創建網頁根目錄
# echo "AAA"   > /usr/local/tomcat/aa/ROOT/index.html    //書寫網頁內容
# echo "BBB" > /usr/local/tomcat/bb/ROOT/index.html

# /usr/local/tomcat/bin/shutdown.sh                //重啓服務
# /usr/local/tomcat/bin/startup.sh


客戶端:
# vim /etc/hosts                        //創建本地解析
… …
192.168.4.5    www.aa.com  www.bb.com
# firefox http://www.aa.com:8080/            //顯示AAA
# firefox http://www.bb.com:8080/            //顯示BBB

##############################################################################################

修改網站的首頁目錄:

服務端:

#vim /usr/local/tomcat/conf/server.xml
<Host name="www.aa.com" appbase="aa" unpackWARs="true" autoDeploy="true">
<Context path="" docBass="base" />
</Host>

//appBase定義基礎目錄,基礎目錄下面可以由很多項目,默認項目是ROOT
//docBass定義首頁路徑,默認爲ROOT

# mkdir  /usr/local/tomcat/aa/base
# echo "BASE" > /usr/local/tomcat/aa/base/index.html

# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh

客戶端驗證:
#firefox http://www.aa.com:8080/    //結果爲base頁面

#####################################################################################################

頁面跳轉:

服務端:
#vim /usr/local/tomcat/conf/server.xml
<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true" >
<Context path="" docBase="base"/>
<Context path="/test" docBase="/var/www/html" />    //當用戶訪問http://www.aa.com/test打開/var/www/html目錄下的頁面
</Host>


//path指定用戶訪問的URL,docBase指定頁面的存儲位置.

# echo "Test" > /var/www/html/index.html
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh

客戶端:

客戶端驗證:
#firefox http://www.aa.com:8080/test    //返回/var/www/html/index.html的內容 ,結果爲test頁面

#############################################################################################

ssl加密:

#keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore //提示輸入密碼爲123456

# vim /usr/local/tomcat/conf/server.xml
… …
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456" clientAuth="false" sslProtocol="TLS" /> //這裏的文件位置,需要和存放密鑰的文件位置相同.密碼也要和密鑰中的相同.

//否則客戶端訪問就會出現一直正在連接,不報錯,也不顯示頁面.

#/usr/local/tomcat/bin/catalina.sh stop
#/usr/local/tomcat/bin/catalina.sh start

客戶端測試:

#firefox https://www.test.com:8443/
# firefox https://www.test.com:8443/        //顯示安全鏈接,添加信任即可

####################################################################################################

每個虛擬主機設置不同的日誌文件:



服務端:
# vim /usr/local/tomcat/conf/server.xml
<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
      <Valve className="org.apache.catalina.valves.AccessLogValve"
               prefix="aa_access" suffix=".log"
                        pattern="common"/> //設置www.aa.com網站的日誌文件爲aa_access
</Host>
<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
               prefix="bb_access" suffix=".log"
                        pattern="common"/>  設置www.bb.com網站的日誌文件爲bb_access
</Host>



# /usr/local/tomcat/bin/catalina.sh stop
# /usr/local/tomcat/bin/catalina.sh start

客戶端:

#ls /usr/local/tomcat/logs
顯示相應的日誌文件.

#################################333########33########################################################

tomcat優化:
#vim /usr/local/tomcat/bin/catalina.sh

<Connector port="8080"
    protocol="HTTP/1.1"
    maxThreads="1000"        //客戶請求最大線程數
    minSpareThreads="100"
    maxSpareThreads="1000"    //最大空閒線程數
    enableLookups="false"
    URIEncoding="utf-8"
    acceptCount="1000"    //監聽端口隊列最大數
/>

############################################################################
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章