nginx介紹
Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器 。它是由俄羅斯的Igor Sysoev爲俄羅斯
Rambler.ru 站點開發的。
nginx的版本介紹
當前開發版: Nginx 1.1.3 | Nginx/windows 1.1.3 (更新記錄) (2011年9月14日)
當前穩定版: Nginx 1.0.6 | Nginx/windows 1.0.6 (更新記錄) (2011年8月29日)
歷史穩定版: Nginx 0.8.54 | Nginx/windows 0.8.55 (更新記錄) (2011年7月19日)
歷史穩定版: Nginx 0.7.69 | Nginx/windows 0.7.69 (更新記錄) (2011年7月19日)
--摘自維基
使用nginx可以實現一個高性能的web和反向代理服務器,做爲web服務器的時候
尤其是在高併發時處理靜態文件上的能力,apache是無法比擬的。
nginx使用epoll模型,經過優化的併發訪問能力在幾萬是沒問題的。
它支持多種操作系統,如linux,frebsd,windows等等
nginx的主配置文件在/etc/nginx/nginx.conf
用戶
user nobody nobody;
啓動進程這裏的數字最好與你的cpu個數一致。
worker_processes 2;
錯誤日誌及pid文檔
error_log logs/error.log notice;
pid logs/Nginx.pid;
events {
use epoll; 使用epoll模型
worker_connections 1024; 連接數上限
}
設定http服務器,利用他的反向代理功能提供負載均衡支持
http {
include conf/mime.types; 設定mime類型
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';
設定請求緩衝
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
開啓gzip模塊
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
output_buffers 1 32k;
postpone_output 1460;
設定access log
access_log logs/access.log main;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
設定負載均衡的服務器列表
upstream mysvr {
weigth參數表示權重,權值越高被分配到的機率越大,Squid開啓3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}
設定虛擬主機
server {
listen 80;
server_name 192.168.0.11
www.redhat.com
;
charset gb2312;
設定本虛擬主機的訪問日誌
access_log logs/www.yejr.com.access.log main;
..........
例如這裏設置一個基於主機名的虛擬主機
基於nginx的虛擬主機建立過程。
基於主機名的虛擬主機
這裏使用windows作爲客戶端訪問,定義honts文件。
C:\WINDOWS\system32\drivers\etc文件下的honts文件
添加如下兩行。
192.168.0.123 www.a.com
192.168.0.123 www.b.com
我的服務器ip爲192.168.0.123 兩個虛擬主機名爲www.a.com www.b.com
打開安裝好nginx的服務器
編輯配置文件
vim /etc/nginx/nginx.conf
在http後面的{}裏面加入如下兩段。
server {
listen 80;
server_name www.a.com; #虛擬主機名
index index.html;
root /var/www/a.com/; #虛擬主機網頁存放位置爲/var/www/a.com/index.html
}
server {
listen 80;
server_name www.b.com;
index index.html;
root /var/www/b.com/;
}
保存退出
cd /var/www/
mkdir {a,b}.com
cd a.com
echo "a.com" > index.html
cd ../b.com
echo "b.com" > index.html
打開瀏覽器輸入
www.a.com會顯示a.com
www.b.com會顯示b.com
對nginx內核參數的優化:
可以在/proc/sys/net下修改
net.ipv4.ip_local_port_range = 1024 65000
允許系統打開的端口範圍。
net.ipv4.tcp_tw_recycle = 1
啓用timewait快速回收。
net.ipv4.tcp_tw_reuse = 1
開啓重用。允許將sockets重新用於新的TCP連接。
如:一個連接已經完成了,現在該斷開連接了。而此時又又一個新的連接進來了
此時會再次建立一個tcp的三次握手,然後請求內存空間,提供服務。此時如果
把剛纔要斷開的連接直接用在新的連接上會怎樣呢?大大減少了時間,和從新
分配內存的資源消耗。但是再重用之前,上一次的數據是必須要清空的。
net.ipv4.tcp_syncookies = 1
開啓Syncookies,當出現SYN等待隊列溢出時,啓用cookies來處理。
net.core.somaxconn = 262144
web應用中listen函數的backlog默認會給我們內核參數的net.core.somaxconn限制到128,而Nginx內核參數定義的NGX_LISTEN_BACKLOG默認爲511,所以有必要調整這個值。
net.core.netdev_max_backlog = 262144
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
net.ipv4.tcp_max_orphans = 262144
系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被複位並打印出警告信息。這個限制僅僅是爲了防止簡單的DoS***,不能過分依靠它或者人爲地減小這個值,更應該增加這個值(如果增加了內存之後)。
net.ipv4.tcp_max_syn_backlog = 262144
記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有128M內存的系統而言,缺省值是1024,小內存的系統則是128。
net.ipv4.tcp_timestamps = 0
時間戳可以避免序列號的卷繞。一個1Gbps的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的數據包。這裏需要將其關掉。
net.ipv4.tcp_synack_retries = 1
爲了打開對端的連接,內核需要發送一個SYN並附帶一個迴應前面一個SYN的ACK。這個設置決定了內核放棄連接之前發送SYN+ACK包的數量。
net.ipv4.tcp_syn_retries = 1
在內核放棄建立連接之前發送SYN包的數量。
net.ipv4.tcp_fin_timeout = 1
如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。對端可以出錯並永遠不關閉連接,甚至意外當機。缺省值是60秒。即使你的機器是一個輕載的WEB服務器,也有因爲大量的死套接字而內存溢出的風險,FIN- WAIT-2的危險性比FIN-WAIT-1要小,因爲它最多隻能用掉1.5K內存,但是它們的生存期長些。
net.ipv4.tcp_keepalive_time = 30
當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時。
也就是說一個連接建立了,保持連接的時間默認是2個小時,此時如果它打開一個網頁幹其他的去了,而你的服務器還在一直爲他提供服務,而它只是建立了連接啥事都不幹,這不是浪費系統資源嗎,所以我們可以把這個值改小,具體多少自己視情況而定,這樣就可以把這些空連接儘量的早的關閉了,會大大的節省系統資源的。
。。。。。。