高級運維之nginx
Nginx -one:
基本了解 Nginx搭建 用戶認證 基於域名的虛擬主機 安全的ssl虛擬主機 基本了解 常見的web服務器比較: Unix和Linux平臺:Apache Nginx tengine Tomcat Lighttpd Windows:IIs(Internet information server) Tengine 淘寶引擎 優化了Nginx server:"tarena" 請求頭文件中顯示的版本 改過的 不要暴露自己的服務器軟件及版本容易被×××。 網頁類型: php python: apache nginx tengine lighttpd java : tomcat IBM WebSphere Jboss
Nginx搭建:
1、安裝:
yum -y install gcc pcre-devel openssl-devel pcre-devel redhat中以-devel結束的包通常是代表依賴包 這個是支持兼容Perl語言的正則 redhat中@anaconda/7.4通常是代表這個已經裝上了沒有這個的代表是在Yum中而沒有裝。 useradd -s /sbin/nologin nginx tar -xf nginx-1.10.3.tar.gz cd nginx-1.10.3 ./configure: --prefix=/usr/local/nginx \ //指定安裝路徑 > --user=nginx \ //指定用戶 > --group=nginx \ //指定組 以普通用戶來啟動服務!更安全 被×××以後也只會獲得普通用戶權限而且是/sbin/nologin 不能登陸的用戶。 > --with-http_ssl_module //開啟SSL加密功能 模塊話設計:盡可能多的人的需求 100個功能 相互獨立 可以選擇需求功能安裝 設計為100個模塊。 不知道模塊就可以安默認 /.configure時就相當於windows下裝軟件時選擇功能後下一步下一步。可以選路徑模塊 功能 第一次裝的時候可以直接confiure 它會告訴你有哪些依賴包你沒裝。gcc 沒有就裝gcc 什麽沒有裝什麽。 make && make install make 把src的c語言的轉為二進制的格式 生成一個程序 但是在家目錄下 make install 把make生成的程序拷貝到可執行路徑下 等等操作。 nginx -V 能看到別人安裝軟件時是怎麽confgiure的了可以照著安裝。 nginx version: nginx/1.10.3 configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module ln -s /usr/local/nginx/sbin/nginx /sbin/ 做了個快捷方式到可執行程序路徑下,可以直接nginx後Tab了方便管理服務 ll /sbin/nginx 可以看到軟鏈接情況。 nginx 啟動服務 /usr/local/nginx/sbin/nginx -s reload //重新加載配置文件 必須在服務開啟時才能用。不關服務時重讀配置文件!!! 不會影響別人的服務訪問。 setenforce 0 firewall-cmd --set-default-zone=trusted curl http://127.0.0.1 訪問測試
2、平滑升級:
cd nginx-1.12.2 ./configure > --prefix=/usr/local/nginx \ > --user=nginx \ > --group=nginx \ > --with-http_ssl_module make 千萬不要make install 這樣就覆蓋安裝了,不是平滑升級了。 conf html logs 都希望保留 mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold sbin 把這個下面的程序升級。升級有風險最好備份一下老的程序nginxold 想用老的就用nginxold。 cp objs/nginx /usr/local/nginx/sbin/ objs裏放的是make出來的新的可執行綠色程序。 make upgrade 殺死老程序 重新啟動升級後的新程序。 make upgrade 失敗了就 netstat -natulp | egrep nginx 看進程號 7035 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7035/nginx kill 7035 或者killall nginx 再啟動服務即可 nginx nginx -V nginx version: nginx/1.12.2 程序、進程、線程: 程序program (下載到硬盤的) 很多是多進程的程序 可以同時訪問多個頁面(並發高些,占內存高) 進程process(內存裏啟動的程序,進程之間是獨立的不會相互影響) 線程thread (進程下面再啟動的加線程 更省內存一些 進程掛了下面的8個線程全掛了 進程線程結合著用 pstree ├─polkitd───5*[{polkitd}] 這個進程中啟動了5個線程。 worker_processes 1; 雙擊時啟動1個進程。
用戶認證:
vim /usr/local/nginx/conf/nginx.conf (配置文件框架)
<VirtualHost *:80>
ServerName www0.example.com
DocumentRoot /var/www/nsd01
</VirtualHost> nginx的虛擬主機和Apache的虛擬主機類似
全局配置
(進程所有者;啟動進程數量;日誌文件;pid文件;單進程最大並發量;...)
http{ 配置容器
server{ 虛擬主機
listen 80;
server_name localhost;
root html; 發布目錄(位置)
location / {
root html;
index index.html index.htm;
}
}
server{
listen 80;
server_name www.xyz.com;
root www;
}
}
server中添加:
auth_basic "Input Password:"; //認證提示符
auth_basic_user_file "/usr/local/nginx/pass"; //認證密碼文件 怎麽敲都沒有!要在這個路徑下建一樣的文件 寫上密碼和用戶名。
install httpd-tools
htpasswd -c /usr/local/nginx/pass tom 第一個用戶要-c
cat /usr/local/nginx/pass
tom:$apr1$0fBOo/ZS$lIw/0axG5oQ7kELEb5D1K1
htpasswd /usr/local/nginx/pass lisi 第二個用戶不要c
刪除用戶就直接vim進去刪除。
nginx -s reload
firefox http://192.168.4.5
基於域名的virtualhost
理論概述:
用戶沒用域名直接用IP的話出來的頁面為配置文件中的第一個server的頁面
容器配置中 域名 IP 端口 總有一個不一樣,哪個不一樣就是基於哪個的虛擬主機。
ctrl + v 選了以後再x就可以批量去註釋了。
nginx 的配置文件 /usr/local/nginx/conf/nginx.conf
nginx 的(root)默認網頁根目錄 /usr/local/nginx/html
改配置:
第一個sever
server_name www.a.com;
location:root html;
第二個sever
server_name www.b.com;
location:root www;
mkdir /usr/local/nginx/www
echo "www" > /usr/local/nginx/www/index.html
nginx -s reload
vim /etc/hosts
192.168.4.5 www.a.com www.b.com
firefox http://www.a.com
firefox http://www.b.com
安全的ssl虛擬主機
理論概述:
ssl 加密網站部署
http協議是明文協議
https協議是加密協議
對稱加密
加123 解123 同一把鑰匙
非對稱
加123 解dkfgjhdlk (隨機) 無任何規律 不是同一把鑰匙。
md5: 網上的所有妙傳都是基於這個原理 壓根都沒傳 核對md5 一樣的就不用傳了。
鑒黃師 刪除的是md5 相關的所有文件 就把這個視頻都在網上刪除了。
校驗文件內容是否有變化 網站上東西時會提供md5碼 用於檢驗下載文件是否完整。
不安全 被破解了。 山東大學 王小東
碼是用內容來決定的 內容不變碼不變 只於文件內容有關。
非對稱加密:
瀏覽器自動下載了公鑰 瀏覽器自動用公鑰加密了數據 網站自動用私鑰來解密
openssl req -new -x509 -key cert.key > cert.pem //生成證書
請求生成 一個新的證書 格式為509 鑰匙是剛剛生成的私鑰匙。
第一個必須兩個字母其他的隨便。
實驗:
生成私鑰與證書
cd /usr/local/nginx/conf
openssl genrsa > cert.key
openssl req -new -x509 -key cert.key > cert.pem
改Nginx配置
vim /usr/local/nginx/conf/nginx.conf
server裏location外:
listen 443 ssl;
server_name www.c.com;
ssl_certificate cert.pem; #這裏是證書文件
ssl_certificate_key cert.key; #這裏是私鑰文件
nginx -s reload
vim /etc/hosts
192.168.4.5 www.c.com www.a.com www.b.com
firefox https://www.c.com
nginx-two:
LNMP平臺搭建及地址重寫:
主流端企業網站平臺之一:LNMP(LAMP)
lnmp:linux nginx (mariadb | mysql) (php | python | perl )新項目多數是這個
lamp:linux apache(mariadb | mysql) (php | python | perl )老項目用的這個能不動就不動
動態頁面:java php python perl ruby
靜態頁面:html
一、lnmp平臺搭建:
安裝步驟:按照lnmp這幾個字母的順序進行安裝避免出錯。
1安裝源碼包的依賴包
yum -y install gcc openssl-devel pcre-devel(地址重寫要這個包) zlib-devel
2安裝完成nginx並啟服務
cd nginx-1.12.2/ 進入解壓後的位置
useradd -s /sbin/nolgin/ nginx 創建一個不能登錄端用戶
./configure --help 模塊不記得了就help
./configure --prefix=/usr/local/nginx/ --user=nginx --group=nginx
--with-http_ssl_module --with-stream --with-http_stub_status_module
--without-http_autoindex_module --without-http_ssi_module
--with-http_ssl_module 加密模塊
--with-stream 代理模塊
--with-http_stub_status_module 查看nginx狀態模塊
--without-http_autoindex_module 禁用文件索引模塊
--without-http_ssi_module
以上是常用模塊可以根據需要自行選擇
make && make install
ln -s /usr/local/nginx/sbin/nginx /sbin/
nginx
ss -natulp |grep 80
3安裝mariadb(客戶端 啟動服務) mariadb-server(服務端 提供mysql命名) mariadb-devel(依賴包)
如果是mysql就安裝mysql
yum -y install mariadb mariadb-server mariadb-devel
安裝nosql數據庫
yum -y install memcached
4安裝php(解釋器) php-mysql(調用mariadb數據庫的模塊)
php-fpm php-pecl-memcache (調用memcache數據庫的模塊)
cd php_scripts/
yum -y install php php-mysql
yum -y install php-pecl-memcache
yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm
5啟服務和關防火墻
服務:nginx mariadb php-fpm memcached
nginx
systemctl restart mariadb
systemctl enable mariadb
systemctl restart php-fpm
systemctl enable php-fpm
systemctl restart memcached.service
systemctl enable memcached
setenforce 0
firewall-cmd --set-default-zone=trusted
6修改配置文件使能夠訪問php動態網站(動靜分離)
vim /usr/local/nginx/conf/nginx.conf //nginx配置文件
#location 位置nginx 讓用戶進入
#nginx 做判斷靜態或動態 靜態直接給 動態要交給php解釋器
#location匹配用戶地址欄
#同個server下可以多個location
#匹配及停止,類似if elif else的判斷
location / { #/的優先級最低什麽都找不著就匹配根
root html;
index index.php index.html index.htm;
#設置默認首頁為index.php(只寫域名或IP時)
}
location ~ \.php$ { #nginx支持正則 ~匹配。類似awk的~號匹配 (幫用戶找php)
root html;
fastcgi_pass 127.0.0.1:9000; //找到php交給9000端口解釋
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf; //fastcgi.conf 一堆環境變量
}
#改錯了可以cp nginx.conf.default nginx.conf 還原配置文件
vim /etc/php-fpm.d/www.conf //php配置文件 默認不用修改
[www]
listen = 127.0.0.1:9000 //PHP端口號
pm.max_children = 32 //php是多進程的;最大進程數量
pm.start_servers = 15 //最小進程數量
pm.min_spare_servers = 5 //最少需要幾個空閑著的進程
隨時待命一旦小於5個就自動再開啟了
pm.max_spare_servers = 32 //最多允許幾個進程處於空閑狀態
7驗證結果:
cp mem.php /usr/local/nginx/html
curl 192.168.2.111/mem.php (結果為test)
幾種常見排錯:
三個常用日誌:
/usr/local/nginx/logs/access.log Nginx的默認訪問日誌文件
/usr/local/nginx/logs/error.log Nginx的默認錯誤日誌文件
/var/log/php-fpm/www-error.log PHP默認錯誤日誌文件
空白(頁面寫錯了 但是第一個日誌沒有報錯 證明nginx沒有錯,
頁面給你了,但是頁面是空。直接看php-fpm服務的報錯!!
下載 (沒做動態分離)
an Error (php沒啟動)
配置文件改錯 最容易發現,因為服務都啟不來。
tailf /usr/local/nginx/logs/error.log 弄到空白處 再訪問test.php 最後幾行一定時相關日誌。
二、地址重寫:(需要依賴包pcre-devel)
語法格式:
rewrite 舊地址 新地址 [選項]
所有訪問a.html的請求,重定向到b.html;
location下加:
rewrite /a.html /b.html; (地址欄沒變)
rewrite /a.html /b.html redirect; (跳轉地址欄)
所有訪問192.168.4.5的80端口就把請求重定向至www.baidu.com;
server_name下加: (註意空格)
rewrite ^/(空格)http://www.baidu.com/; 在打開自己網站之前就跳轉
正則是匹配包含就算 訪問4.5不管是啥都跳到tmooc。
所有訪問192.168.4.5/下面子頁面,重定向至www.baidu.com/下相同的頁面;
server_name下加: (註意空格)
rewrite ^/(.*)$(空格)http://www.baidu.com/$1; 第一個$可有可無
$1 與正則中的\1等效 就是把根目錄下的.* 粘貼到tmooc的/下。
實現firefox與curl訪問相同頁面文件,返回不同的內容。
理論基礎:
不同瀏覽器訪問相同頁面,返回的頁面的結果不同。 (手機瀏覽器和電腦瀏覽器頁面不同)
電腦:sina.com
手機:sina.com 結果不同 按鈕和功能不同。
首先服務器要知道客戶端的瀏覽器是什麽。
關於變量$http_user_agent :
Nginx的默認訪問日誌文件為/usr/local/nginx/logs/access.log 這裏能知道客戶端的瀏覽器
#log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
#‘$status $body_bytes_sent "$http_referer" ‘
#‘"$http_user_agent" "$http_x_forwarded_for"‘;
這些變量都是nginx的內置變量。
"$http_user_agent"可識別客戶端的信息。
192.168.4.254 - - [26/May/2018:16:36:46 +0800] "GET /xixi HTTP/1.1" 302 161 "-" "Mozilla/5.0
(X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
通常企業會設計兩套頁面 手機和PC
/usr/local/nginx/html/寬{a b c }html 默認是訪問這個
如果你是uc 手機 。。。就跳轉
rewrite /(.*)
/usr/local/nginx/html/andriod/窄{a b c} html 做個跳轉
最終結果:
server裏,location外面加:
if ($http_user_agent ~* firefox) {rewrite ^(.*)$ /firefox/$1;}
#if ($http_user_agent ~* firefox)等價於grep firefox "$http_user_agent"
地址重寫格式【總結】:
rewrite a c last(不再讀其他rewrite) | break (不再讀其他語句,結束請求 )
匹配到了才會a跳到c才會執行last 或者break 不然相當於沒寫
有點if的意思 if a 再跳c elif b 跳d。。。
rewrite b d redirect 臨時重定向
rewrite e f permament 永久重定向
redirect permament 給蜘蛛看的 蜘蛛 :百度 搜狗 360.。。等搜索引擎。
賣鞋子的:
url: www.jd.com/a 臨時的就不動 如果是永久 就直接改數據庫為www.jd.com/c讓用戶直接訪問c
逗蜘蛛完可能被直接除名影響生意。
nginx-three:
nginx調度
web高可用
tcp/udp服務代理
nginx調優
nginx調度
web高可用:
負載均衡上面掛了直接轉下面(類似備份功能) 帶健康檢查後面機子壞了轉到另外一臺。
普通的情況下,nginx代理沒有壓力的因為它只負責轉發 不負責頁面請求!
——————web1
a |
user————》proxy———— |
b |
——————-web2
nginx調度器算法:
輪詢算法:默認算法
ip_hash算法:相同客戶端訪問相同服務器。
nginx實現web反向代理: 定義集群和調用集群
部署實施後端Web服務器
vim /usr/local/nginx/conf/nginx.conf
定義集群: (後期調用)一個配置文件可以寫n多個upsteam。web服務器有多少加多少。
upstream webserver {
server 192.168.2.111:80 weight=1 max_fails=1 fail_timeout=20;
//設置權重 :性能好的多承擔。沒改過默認都是1 各承擔一次輪詢一次。
3的話就是接收3次請求再交給別人。
//max_fails=1 連一次不通覺得連不上了就認為這個web服務器掛了。
//fail_timeout=30 掛了之後30秒之內不找你了。 每隔30秒就又去連一次,好了就繼續輪詢。
server 192.168.2.222:80;
server 192.168.2.101 down;
//人為判斷標記為關機要很久才能修好 先使它不參與集群調度不去試它好沒有,節省資源。
}
location / {
proxy_pass http://webserver; //調用集群,將請求轉給後端web服務器
root html; #這個要改掉,不改的話自己就是web服務器了不是代理服務器,到自己根下去給客戶機找頁面了。
index index.html index.htm;
#rewrite /a.html /b.html redirect;
}
nginx -s reload
curl 192.168.4.5
web1
curl 192.168.4.5
web1
加上ip_hash算法:只需要在集群服務器前加上ip_hash;
解決你輸了賬號密碼登上服務器了,只是輪詢算法的話,一刷新就會到另外一臺服務器上去
另外服務器沒有你的賬號密碼信息的話就會讓你重新登陸!
upstream webserver {
#通過ip_hash設置調度規則為:相同客戶端訪問相同服務器
ip_hash;
server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
}
tips://最終的nginx反向代理web結果:ip哈希加輪詢都要有!
tcp/udp服務代理:
需要--with-stream
四層調度,所有服務的代理,都是走tcp/ip協議 只是端口號不一樣。
代理不同的服務只需要服務的端口號不一樣就可以了。
可以實現只要能ping通的情況下家裏就能連公司的服務器或數據庫或web,不用管ip地址。
代理就是能訪問平時訪問不了的網站啊 所以不管是什麽網段的能ping通代理服務器的ip就可以了。
新技術出來找不到資料就找官網
——————tcp/udp服務(ssh)
a |
user————》proxy———— |
b |
——————tcp/udp服務(ssh)
使用nginx代理可以用192.168.4.100 ssh 192.168.2.222 就是可以連不同網段。
源碼安裝Nginx軟件--with-stream
啟用Nginx服務,修改/usr/local/nginx/conf/nginx.conf配置文件
stream {
upstream backend {
server 192.168.2.100:22; //後端SSH服務器的IP和端口
server 192.168.2.200:22;
}
server {
listen 12345; //Nginx監聽的端口
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass backend;
}
}
nginx -s reload
[root@client ~]# ssh 192.168.4.5 -p 12345 //多次訪問查看效果
nginx調優:
如果客戶端訪問服務器提示“Too many open files”如何解決
如何解決客戶端訪問頭部信息過長的問題
如何讓客戶端瀏覽器緩存數據
如何自定義返回給客戶端的404錯誤頁面
如何查看服務器狀態信息
開啟gzip壓縮功能,提高數據傳輸效率
環境準備:
構建Nginx服務器並啟動服務
解決客戶端訪問服務器提示“Too many open files”
儲備知識:cat /proc/cpuinfo | grep process
lscpu :雙核雙進程 假四核。 //查看cpu核心數
ps aux | grep nginx #兩個進程在幹活,work的數量。
root 7404 0.0 0.1 45964 1136 ? Ss 14:13 0:00 nginx: master process nginx
nginx 7405 0.0 0.2 48500 2520 ? S 14:13 0:00 nginx: worker process
root 7535 0.0 0.0 112676 984 pts/0 R+ 14:25 0:00 grep --color=auto nginx
1、優化Nginx並發量
http_load,webbeach,siege也是壓力測試軟件可以測試服務器壓力,根據情況自行選擇
ab -n 2000 -c 2000 http://192.168.4.5/
socket: Too many open files (24) //提示打開文件數量過多
vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; //啟動nginx時打開的進程默認為1;調成與CPU核心數量一致
error_log /var/log/nginx.error_log info; //定義日誌文件級別為信息
events {
worker_connections 65535; //每個worker最大並發連接數默認為1024
小了就被限制死了,大點可以達到它的最大值
//最大並發量為兩個相乘法 2*65535
use epoll;
}
nginx -s reload
2、調整系統本身限制:
selinux 對最大打開文件數量有限制默認1024個。
2000個人訪問就要同時打開2000個頁面給客戶端很容易突破1024個。
ulimit -a
open files (-n) 1024
軟限制和硬限制之間普通用戶可以自調 軟限制(預設值)可以超硬限制不能超
ulimit -Hn 100000 //設置硬限制(臨時規則)
ulimit -Sn 100000 //設置軟限制(臨時規則)
vim /etc/security/limits.conf #security安全性
#用戶或組 硬限制或軟限制 需要限制的項目 限制的值
* soft nofile 100000
* hard nofile 100000
ab -n 2000 -c 2000 http://192.168.4.5/
解決客戶端訪問頭部信息過長的問題
414 Request-URI Too Large 緩存太小存不下發送過來的請求。
優化前:
vim lnmp_soft/buffer.sh //寫個測試頭文件腳本
#!/bin/bash
URL=http://192.168.4.5/index.html
for i in {1..500}
do
URL=${URL}/v$i=$i
//第一次循環在初值後面加v1=1,二次加v2=2 類推;“=”無特殊意義!!
done
curl $URL //經過500次循環後,生成一個長的URL地址欄
./buffer.sh
<center><h1>414 Request-URI Too Large</h1></center> //提示頭部信息過大
步驟:
修改vim /usr/local/nginx/conf/nginx.conf
http {
client_header_buffer_size 1k; //默認請求包頭信息的緩存
large_client_header_buffers 4 4k; //大請求包頭部信息的緩存個數與容量(16k)
.. .. //先根據默認的分配,不夠再根據large值分配 上班推薦值
}
nginx -s reload
./buffer.sh 5000次好像還是不夠-_-.
如何讓客戶端瀏覽器緩存數據
以Firefox瀏覽器為例,在Firefox地址欄內輸入about:cache將顯示Firefox瀏覽器的緩存信息
點擊List Cache Entries可以查看詳細信息。
瀏覽器緩存(只適合靜態數據圖片視頻音頻)
清空firefox本地緩存數據
vim /usr/local/nginx/conf/nginx.conf
#在虛擬主機server中加入
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d; //定義客戶端緩存時間為30天
} //如果匹配到地址欄為以上這些靜態數據信息則瀏覽器過期時間為30天
cp /usr/share/backgrounds/day.jpg /usr/local/nginx/html
nginx -s reload
firefox http://192.168.4.5/day.jpg
在Firefox地址欄內輸入about:cache,查看本地緩存數據,查看是否有圖片以及過期時間是否正確。
自定義報錯頁面
常見http狀態碼
200 為新加載 一切正常
300 重定向類
301 永久重定向
302 臨時重定向
304 為已緩存
400 用戶方面的錯誤
401 用戶名或密碼錯誤
403 禁止訪問(ip被禁)
403 資源不可用,服務器上目錄或文件權限設置導致
404 頁面不存在
414 請求頭部信息過長
500 服務器內部錯誤
502 bad getaway:一定是作了代理兩個後臺web都掛了就會報這個
firefox http://192.168.4.5/xxxxx //訪問一個不存在的頁面
vim /usr/local/nginx/conf/nginx.conf
server中location外 有默認模板 改改就行
server {
error_page 404 /40x.html; //去掉註釋改個頁面
error_page 403 /403x.html;
error_page 414 /414x.html; //想自定義的都可以
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
vim /usr/local/nginx/html/40x.html //生成錯誤頁面
nginx -s reload
firefox http://192.168.4.5/xxxxx //訪問一個不存在的頁面
查看服務器狀態信息 --with-http_stub_status_module
編譯安裝時使用--with-http_stub_status_module開啟狀態頁面模塊
vim /usr/local/nginx/conf/nginx.conf
location /status {
stub_status on;
allow ip; ip 寫自己的ip地址 自己能看服務器的狀態
deny all;
}
curl http://192.168.4.5/status
Active connections:當前活動的連接數量。
//server Accepts:已經接受客戶端的連接總數量(握手的數量)連接就是通道。
一次握手(連接)多次請求。建立連接之後不會立刻斷開,可以多次請求。
長時間(timeout)沒有請求連接自動斷開。
Accepts:已經接受客戶端的連接總數量。
Handled:已經處理客戶端的連接總數量(一般與accepts一致,除非服務器限制了連接數量)。
Requests:客戶端發送的請求數量。
Reading:當前服務器正在讀取客戶端請求頭的數量。
Writing:當前服務器正在寫響應信息的數量。
Waiting:當前多少客戶端在等待服務器的響應。
//當前多少客戶端在等待服務器的響應 (說明服務器肯定在卡)
適合寫在腳本中,取出正在waiting的那行大於多少就郵件報警。
對頁面進行壓縮處理
目前所有瀏覽器支持解壓動作 但是不支持rar
網頁壓縮通常為gzip
小文件不要壓縮,會壓縮得更大,最少1000字節。
linux下1-9選擇數字月大效果越好壓得越慢。
jpg,mp3,mp4,gif,等多媒體文件不要壓縮,已經是壓縮格式了。
壓縮最適合文檔,ape無損音樂。
cat /usr/local/nginx/conf/mime.types
對什麽類型壓縮參考這個文件 有擴展名對應的類型碼。
vim /usr/local/nginx/conf/nginx.conf
http {
.. ..
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 application/javascript;
//對特定文件壓縮,類型參考mime.types
.. ..
}
服務器內存緩存:
如果需要處理大量靜態文件,可以將文件緩存在內存,下次訪問會更快。
vim /usr/local/nginx/conf/nginx.conf
http {
open_file_cache max=2000 inactive=20s;
//設置服務器最大緩存2000個文件句柄關掉20s之內沒有請求的文件。
open_file_cache_valid 60s;
//有效緩存時間為60s 60秒後過期
open_file_cache_min_uses 5;
// 最少被訪問5次才會被認為是熱點數據 才會緩存。
open_file_cache_errors off;
}
高級運維之nginx