1. 程式人生 > >Nginx常見問題 、 Tomcat服務器 、 Tomcat高級應用

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

nginx常見問題 、 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" //監聽端口隊列最大數
/>

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

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