工具—遠程桌面查看器--VNC 172.40.50.118:8javascript
###################################################php
opration linux高級運維css
day 04html
常見壓力測試工具:java
ab -c 併發數 -n 總請求數 URLnode
http_load -p 併發數 -s 測試時間 URLpython
webbench -c 併發數 -t 測試時間 URLlinux
siege -c 併發數 -r 重複次數 URLnginx
#########################################web
nginx全局配置優化:
1.不顯示Nginx具體版本號
#vim /usr/local/nginx/conf/nginx.conf
http {
server_tokens off; }
#curl -I http://192.168.4.5
worker_processes; //與CPU核心數量一致
error_logs /var/log/nginx.error_log info; //定義日誌級別
##########################################
2.若是客戶端訪問服務器提示「Too many open files」如何解決
a) 修改系統配置[系統對不少東西有限制]
1.最大開幾個進程
2.最大開幾個文件
3.登陸人數
# yum -y install httpd-tools
#ab -c 2000 -n 2000 http://192.168.4.5/ (服務器報錯too many open files)
event模塊優化:
軟件自己參數調整:
# ulimilt -a
# vim /etc/security/limits.conf /重起計算機纔有效 ,永久有效
#<domain>用戶*表示對全部用戶有效 <type> <item> <value>
* soft nofile 100000
* hard nofile 100000
# ulimit -Hn 20000 /臨時有效
# ulimit -Sn 20000 /H硬限制S軟限制
# ulimilt -a
nofile 打開文件數
#ab -c 10000 -n 10000 http://192.168.4.5/ /ab併發c用戶n數量
#watch -n 1 ss -s
# ss -s /列出全部打開的網絡鏈接端口
#vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; //與CPU核心數量一致
events {
worker_connections 20000; //每一個worker最大併發鏈接數
#########################################
3.如何解決客戶端訪問頭部信息過長的問題(http模塊優化)
測試腳本(服務器414報錯,緩存不夠URI Too Large) 請求的地址欄過長超過限定頭部信息大小
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i
done
curl $URL
http {
client_header_buffer_size //默認請求包頭信息的緩存
large_client_header_buffers //大請求包頭部信息的緩存個數與容量
client_header_buffer_size 1k; //默認請求包頭信息的緩存
large_client_header_buffers 4 4k; //大請求包頭部信息的緩存個數與容量k/m/g
//先根據client_header_buffer分配,若是不夠,再根據large值分配
##########################################
4.如何讓客戶端瀏覽器緩存數據(http模塊優化)
在Firefox地址欄內輸入about:cache將顯示Firefox瀏覽器的緩存信息
靜態緩存在用戶的電腦【視頻、音樂、圖片】
#vim /usr/local/nginx/conf/nginx.conf
server {
location / {}
location ~ \.(jpg|jpeg|gif|png|css|js|ico|xml|flv)$ {
access_log off;
expires 30d; /過時時間30天
} }
#nginx -s reload
#find / -name "*.jpg"
#cp xx.jpg /usr/local/nginx/html/x.jpg
#firefox 192.168.4.5/x.jpg
#firefox about:cache
http://192.168.2.100/a.jpg 2727 bytes 4 2017-07-03 2017-08-02
#########################################
5.error_page 404 //自定義404錯誤頁面
返回首頁
返回自定義的報錯頁面
#vim /usr/local/nginx/conf/nginx.conf
server {
... ...
charset utf-8; /中文字符集
error_page 404 400 /404.html;
}
#nginx -s reload
#cd /usr/local/nginx/html
#echo "網站崩潰了" > 404.html
#########################################
調優方向:
軟件:自己參數
硬件:DDR4、ddr3內存條、800Hz、CPU內核數量 2GHz 、 SDD固態盤
操做系統[內核] :/proc/裏面
集羣
nginx優化:
#curl -I http://192.168.4.5 (查看服務器信息-暴露版本信息)
#vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; //與CPU核心數量一致
events {
worker_connections 10000; //每一個worker最大併發鏈接數65536
}
http {
server_tokens off; //不顯示Nginx具體版本號
client_header_buffer_size 1k; //默認請求包頭信息的緩存
large_client_header_buffers 4 4k; //大請求包頭部信息的緩存個數與容量k/m/g
//先根據client_header_buffer分配,若是不夠,再根據large值分配
######################################
http模塊優化:
sendfile on; //提高Nginx讀文件性能,訪問速度加快
tcp_nodelay on; //關閉TCP的默認延遲發送數據,ping包
keepalive_timeout 10; //保持鏈接的超時時間,短期不斷開,一次握手,屢次請求
gzip on; //壓縮頁面,節省流量 (全部瀏覽器都支持gzip解壓,mp3、jpg多媒體文件不要壓縮)
gzip_min_length 1000; //1000字節如下不壓縮
gzip_comp_level 4; //壓縮比例,壓縮比例越高,cpu消耗越大
gzip_types text/plain text/css application/json application/x-javascript text/xml
application/xml application/xml+rss text/javascript; //壓縮格式
open_file_cache max=2000 inactive=20s; //設置服務器文件緩存,最大緩存2000個文件句柄,關閉20秒內無請求的文件句柄
open_file_cache_valid 60s; //文件句柄的有效時間是60秒,60秒後過時
open_file_cache_min_uses 5; //只有訪問次數超過5次會被緩存
open_file_cache_errors off; //緩存出錯不報錯
}
常見擴展名gzip_types:/usr/local/nginx/conf/mime.types auodio聲音 video視頻
########################################
緩存
瀏覽器[緩存]
varnish[緩存]異地
nginx硬盤[緩存]
盜連接
youku,letv,aiqiyi,tudou
防止盜鏈:瀏覽器向web服務器發送請求時;http頭部信息,header的一部分;
Referer:我從哪個頁面連接過來
none表示沒有referer,即直接訪問;blocked有referer但被防火牆或代理刪除;
server_name 最後的域名
www.sina.com
Referer:www.sina.com
百度:搜索sina
連接www.sina.com
Referer:www.baidu.com
判斷referer是否是www.sina.com
rewrite ^/ http://www.sina.com/a.jpg
步驟:
# cat /usr/local/nginx/conf/nginx.conf
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.tarena.com;
if ($invalid_referer) {
rewrite ^/ http://www.tarena.com/403.html;
}}
nginx總結:
用戶認證
虛擬主機:IP,端口,域名
SSL加密網站
調度器(負載均衡,web高可用)
LNMP(動態)
地址重寫
優化[併發,版本,壓縮,緩存,keepalive,自定義報錯]
++++++++++++++++++++++++++++++++++++++
tomcat概述:
PHP網站開發;shell運維。java通用;c語言 通用;python通用
apache,nginx:php 不支持java
JAVA網站:Tomcat,weblogic,websphere,Jboss,resin
java的標準: 標準版SE、企業版EE、移動版ME
JDK:java軟件開發工具包,運行環境、java工具(編譯、排錯、打包等)、基礎類庫
JRE:JDK的子集,java標準實現和核心類庫,無工具
紅帽光盤自帶openjdk,和oracle官方jdk
java Servlet:針對網站,一種擴展web服務器功能的組件規範。可以以種可移植的方法來提供動態的、面向用戶的內容,處理用戶請求。
常見Servlet容器:IBM--websphere、Oracle--weblogic、Apache--tomcat、RedHat--Jboss
JSP(java server page):網頁上的代碼以.jsp結尾,SUN推出的相似於ASP的鑲嵌型的JSP,把JSP TAG鑲嵌到HTML語句中,大大簡化和方便了網頁的設計和修改
#######################################
bin/ 主程序目錄--開startup關shutdown服務; lib/ 庫文件目錄 ; logs/ 日誌目錄; temp/ 臨時目錄 ;work/ 自動編譯目錄 ; conf/ 配置文件目錄 ; webapps/ 頁面目錄;
server.xml主配置文件;context.xml定義會話管理器JDBC等;tomcat-users.xml用戶認證的賬號和密碼配置文件
tomcat[java編寫的Web服務器,可自動解壓包,嚴格區分大小寫且無報錯提示,需看logs(tailf),啓動慢-需等待生成隨機數]
查看日誌:grep 'failed' /usr/local/tomcat/logs/catalina.2017-07-03.log服務日誌 localhost虛擬主機日誌
端口8005==shutdown關閉服務; engine調度器 ;appbase基礎目錄; docbase頁面路徑;path指定項目不寫默認爲ROOT項目;
#######################################
安裝並啓動tomcat:
系統自帶默認已安裝:java-1.8.0-openjdk.x86_64
cd lnmp_soft
tar -xf apache-tomcat-....
mv apache-tomcat... /usr/local/tomcat //移動到哪就裝在哪
/usr/local/tomcat/bin/startup.sh 啓動服務
測試頁面訪問:
netstat -antpu | grep 8080 或java //端口爲8080
firefox http://192.168.2.100:8080
tomcat配置文件模版框架:connector 與engine平級
#vim /usr/local/tomcat/conf/server.xml
<server>
<service>
<connector port=8080 /> /默認8080,可改爲80端口
<engine default=localhost> /調度器,調用域名
<host name=localhost appbase=webapps>
</host> /一個host一個網站,域名、路徑
<host name=www.a.com appbase=
/usr/local/tomcat/webapps/xxx>
</host>
</engine>
</service>
</server>
#######################################
實驗1:基於域名的虛擬主機www.a.com,www.b.com
vim /usr/local/tomcat/conf/server.xml
... ...
<Engine ...>
<Host name="www.a.com" appBase="a"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.b.com" appBase="b"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
#cd /usr/local/tomcat/
#mkdir -p {a,b}/ROOT
#echo "AAA" > a/ROOT/index.html
#echo "BBB" > b/ROOT/index.html
#/usr/local/tomcat/bin/shutdown.sh
#/usr/local/tomcat/bin/startup.sh
#curl http://www.a.com:8080
#curl http://www.b.com:8080
#####################################
實驗2:設置自定義網頁ROOT路徑(注意大小寫)
#vim /usr/local/tomcat/conf/server.xml
... ...
<Host name="www.a.com" appBase="a"
unpackWARS="true" autoDeploy="true">
<Context path="" docBase="chen" reloadable="true"/>
</Host>
<Host name="www.b.com" appBase="b"
unpackWARS="true" autoDeploy="true">
</Host>
#mkdir -p /usr/local/tomcat/a/chen
#echo "chenguizhen" > /usr/local/tomcat/a/chen/index.html
#/usr/local/tomcat/bin/shutdown.sh
#/usr/local/tomcat/bin/startup.sh
實驗3:當用戶訪問test時轉到/var/www/html/下找頁面,(至關於nginx裏的rewrite)
#vim /usr/local/tomcat/conf/server.xml
... ...
<Host name="www.a.com" appBase="a"
unpackWARS="true" autoDeploy="true">
<Context path="/test" docBase="/var/www/html/" reloadable="true"/>
</Host>
#/usr/local/tomcat/bin/shutdown.sh
#/usr/local/tomcat/bin/startup.sh
測試是否打開/var/www/html下的首頁:
#firefox http://www.a.com:8080/test/
#########################################
實驗4:加密站點
裝完jdk後有keytool工具包(註釋爲<!-- -->)
apache[httpd:80\443, tomcat 8080\8443]
SSL加密網站:
1.生成密鑰:
# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
備註:
-genkeypair 生成密鑰
-alias 別名
-keyalg 算法爲RSA
-keystore 密鑰文件存儲路徑及文件名
-keysize 默認1024位
-validity<valDays>有效期天數默認一年,到期網站訪問不了
# keytool -genkeypair --help【查看幫助】
2.調用密鑰:
# vim /usr/local/tomcat/conf/server.xml / ...84行左右
<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" />
3.重啓服務測試
firefox https://192.168.2.100:8443
tomcat端口和虛擬主機是獨立的,8443能夠加密全部網站
8009沒有用,能夠註釋掉
########################################
每一個虛擬主機能夠作獨立日誌
給b網站加日誌:複製到b的host裏
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="www_b_access_log" suffix=".txt" 擴展名txt
pattern="%h %l %u %t "%r" %s %b" /> /名稱上自動加時間
Tomcat 優化
修改Connector屬性
<Connector port="8080" protocol="HTTP/1.1"
maxTreads="1000" /最大線程
minSpareTreads="100" /最小空閒線程
maxSpareTreads="1000" /最大空閒線程
enableLookups="false" /不要支持查詢dns解析
URIEncoding="utf-8" /編碼
acceptCount="1000" /端口隊列最大數
/>
1 案例1:Nginx常見問題處理
2 案例2:安裝部署Tomcat服務器
3 使用Tomcat部署虛擬主機
1 案例1:Nginx常見問題處理
1.1 問題
本案例要求對Nginx服務器進行適當優化,以提高服務器的處理性能:
而後客戶機訪問此Web服務器驗證效果:
1.2 方案
使用2臺RHEL7虛擬機,其中一臺做爲Nginx服務器(192.168.4.5)、另一臺做爲測試用的Linux客戶機(192.168.4.100),如圖-1所示。
圖-1
Nginx優化主要從配置文件着手,常見優化參數以下:
1.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:構建Nginx服務器
1)源碼安裝Nginx軟件
1 [root@svr5 ~]# yum -y install gcc pcre-devel openssl-devel //安裝常見依賴包
2 [root@svr5 ~]# useradd -s /sbin/nologin nginx
3 [root@svr5 ~]# tar -zxvf nginx-1.8.0.tar.gz
4 [root@svr5 ~]# cd nginx-1.8.0
5 [root@svr5 nginx-1.8.0]# ./configure \
6 > --prefix=/usr/local/nginx \ //指定安裝路徑
7 > --user=nginx \ //指定用戶
8 > --group=nginx \ //指定組
9 > --with-http_ssl_module //開啓SSL加密功能
10 [root@svr5 nginx-1.8.0]# make && make install //編譯並安裝
2)啓用Nginx服務並查看監聽端口狀態
1 [root@svr5 ~]# /usr/local/nginx/sbin/nginx
2 [root@svr5 ~]# netstat -anptu | grep nginx
3 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10441/nginx
步驟二:優化前從客戶機訪問Nginx服務器測試
1)使用ab高併發測試
1 [root@svr100 ~]# ab –n 2000 –c 2000 http://192.168.4.5/
2 Benchmarking 192.168.4.5 (be patient)
3 socket: Too many open files (24) //提示打開文件數量過多
2)使用腳本測試長頭部請求是否能得到響應
1 [root@svr100 ~]# cat buffer.sh
2 #!/bin/bash
3 URL=http://192.168.4.5/index.html?
4 for i in {1..5000}
5 do
6 URL=${URL}v$i=$i
7 done
8 curl $URL
9 [root@svr100 ~]# chmod +x buffer.sh
10 [root@svr100 ~]# ./ buffer.sh
11 .. ..
12 <center><h1>414 Request-URI Too Large</h1></center> //提示頭部信息過大
3)使用Firefox瀏覽器測試客戶端緩存
以Firefox瀏覽器爲例,只要在地址欄內輸入 http://192.168.4.5/a.jpg,回車後即鏈接目標主機192.168.4.5的Web服務,得到服務器上的a.jpg圖片資源。若訪 問成功,再次,在Firefox地址欄內輸入about:cache將顯示Firefox瀏覽器的緩存信息,如圖-2所示。
圖-2
4)客戶端使用瀏覽器訪問不存在的頁面
1 [root@svr5 ~]# firefox http://192.168.4.5/tt.html //訪問不存在的頁面
步驟三:優化Nginx服務器
1)修改Nginx配置文件
1 [root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
2 .. ..
3 worker_processes 2; //與CPU核心數量一致
4 events {
5 worker_connections 10000; //每一個worker最大併發鏈接數
6 use epoll;
7 }
8 http {
9 client_header_buffer_size 1k; //默認請求包頭信息的緩存
10 large_client_header_buffers 4 4k; //大請求包頭部信息的緩存個數與容量
11
12 server {
13 listen 80;
14 server_name www.tarena.com;
15 location / {
16 root html;
17 index index.html index.htm;
18 }
19 location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
20 expires 30d; //定義客戶端緩存時間爲30天
21 }
22 error_page 404 /40x.html; //自定義錯誤頁面
23 location = /40x.html {
24 root html;
25 }
26 }
27 }
2)修改Linux操做系統最大打開文件數
經過修改/etc/security/limits.conf文件修改打開文件最大數量:
1 [root@svr5 ~]# vim /etc/security/limits.conf
2 * soft nofile 100000
3 * hard nofile 100000
4 [root@svr5 ~]# ulimit –Hn 10000
5 [root@svr5 ~]# ulimit –Sn 10000
3)提早生成404錯誤頁面,供測試使用:
1 [root@svr5 ~]# vim /usr/local/nginx/html/40x.html
2 <h1>~~~~^^^Error^^^~~~</h1>
步驟四:優化後從客戶機訪問Nginx服務器測試
對Nginx服務器進行各類參數優化後,在客戶端訪問服務器頁面,對比優化前與優化後的區別,驗證優化是否生效。
2 案例2:安裝部署Tomcat服務器
2.1 問題
本案例要求部署Tomcat服務器,具體要求以下:
而後客戶機訪問此Web服務器驗證效果:
2.2 方案
使用2臺RHEL7虛擬機,其中一臺做爲Tomcat服務器(192.168.2.5)、另一臺做爲測試用的Linux客戶機(192.168.2.100),如圖-3所示。
圖-3
使用RPM安裝JDK基礎環境
使用源碼安裝部署Tomcat服務器
調整Tomcat配置文件,禁用默認的8009端口
2.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:部署服務器軟件
1)使用RPM安裝JDK環境
1 [root@svr100 ~]# rpm -ivh jdk-8u77-linux-x64.rpm //安裝JDK
2 [root@svr100 ~]# rpm -q jdk1.8.0_77-1.8.0_77-fcs.x86_64 //查看軟件安裝結果
3 [root@svr100 ~]# java –version //查看JAVA版本
2)安裝Tomcat
1 [root@svr100 ~]# tar -xzf apache-tomcat-8.0.30.tar.gz
2 [root@svr100 ~]# mv apache-tomcat-8.0.30 /usr/local/tomcat
3 [root@svr100 ~]# ls /usr/local/tomcat
4 bin/ //主程序目錄
5 lib/ //庫文件目錄
6 logs/ //日誌目錄
7 temp/ //臨時目錄
8 work/ //自動編譯目錄jsp代碼轉換servlet
9 conf/ //配置文件目錄
10 webapps/ //頁面目錄
步驟二:修改Tomcat配置文件
1)建立測試JSP頁面
1 [root@svr100 ~]# vim vim /usr/local/tomcat/webapps/ROOT/test.jsp
2 <html>
3 <body>
4 <center>
5 Now time is: <%=new java.util.Date()%> //顯示服務器當前時間
6 </center>
7 </body>
8 </html>
步驟三:驗證測試
1)服務器驗證端口信息
1 [root@svr100 ~]# netstat -nutlp |grep java //查看java監聽的端口
2 tcp 0 0 :::8080 :::* LISTEN 2778/java
3 tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 2778/java
2)客戶端瀏覽測試頁面
1 [root@client ~]# firefox http://127.0.0.1:8080
2 [root@client ~]# firefox http://172.0.0.1:8080/test.jsp
3 使用Tomcat部署虛擬主機
3.1 問題
沿用練習二,使用Tomcat部署加密虛擬主機,實現如下要求:
3.2 方案
修改server.xml配置文件,建立兩個域名的虛擬主機,修改以下兩個參數塊:
1 <Host name=www.test.com appBase="test" unpackWARS="true" autoDeploy="true">
2 </Host>
3 <Host name="www.tomcat.com" appBase="tom" unpackWARS="true" autoDeploy="true">
4 </Host>
生產SSL密鑰與證書文件
1 #keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/cert
3.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:配置服務器設置
1)修改server.xml配置文件,建立虛擬主機
1 [root@svr100 ~]# vim /usr/local/tomcat/conf/server.xml
2 … …
3 <Host name="www.test.com" appBase="test" unpackWARS="true" autoDeploy="true">
4 </Host>
5 <Host name="www.tomcat.com" appBase="tom" unpackWARS="true" autoDeploy="true">
6 </Host>
2)建立虛擬主機對應的頁面根路徑
1 [root@svr100 ~]# mkdir -p /usr/local/tomcat/{test,tom}/ROOT
2 [root@svr100 ~]# echo 「test.com」 > /usr/local/tomcat/test/ROOT/index.html
3 [root@svr100 ~]# echo 「tomcat.com」 > /usr/local/tomcat/tom/ROOT/index.html
3)建立加密用的私鑰和證書文件
1 [root@svr100 ~]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/cert //提示輸入密碼爲:123456
4)再次修改server.xml配置文件,建立加密鏈接的Connector
1 [root@svr100 ~]# vim /usr/local/tomcat/conf/server.xml
2 … …
3 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
4 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
5 keystoreFile="/usr/local/tomcat/conf/keystore" keystorePass="123456" clientAuth="false" sslProtocol="TLS" />
5)爲每一個虛擬主機設置不一樣的日誌文件
1 [root@svr100 ~]# vim /usr/local/tomcat/conf/server.xml
2 <Host name="www.test.com" appBase="test" unpackWARS="true" autoDeploy="true">
3 <Valve className="org.apache.catalina.valves.AccessLogValve"
4 prefix="test_access" suffix=".log"
5 pattern="common"/>
6 </Host>
7 <Host name="www.tomcat.com" appBase="tom" unpackWARS="true" autoDeploy="true">
8 <Valve className="org.apache.catalina.valves.AccessLogValve"
9 prefix="tomcat_access" suffix=".log"
10 pattern="common"/>
11 </Host>
6)重啓Tomcat服務器
1 [root@svr100 ~]# /usr/local/tomcat/bin/catalina.sh stop
2 [root@svr100 ~]# /usr/local/tomcat/bin/catalina.sh start
步驟二:配置客戶端設置
1)客戶端設置host文件,並瀏覽測試頁面進行測試
1 [root@client ~]# vim /etc/hosts
2 … …
3 192.168.4.5 www.test.com www.tomcat.com
4 [root@client ~]# firefox http://www.test.com:8080/
5 [root@client ~]# firefox http://www.tomcat.com:8080/
6 [root@client ~]# firefox https://www.test.com:8443/
7 [root@client ~]# firefox https://www.test.com:8443/
2)查看服務器日誌文件
1 [root@svr100 ~]# tail /usr/local/tomcat/logs/test_access.log
2 [root@svr100 ~]# tail /usr/local/tomcat/logs/tomcat_access.log