nginx

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個小時,此時如果它打開一個網頁幹其他的去了,而你的服務器還在一直爲他提供服務,而它只是建立了連接啥事都不幹,這不是浪費系統資源嗎,所以我們可以把這個值改小,具體多少自己視情況而定,這樣就可以把這些空連接儘量的早的關閉了,會大大的節省系統資源的。
。。。。。。

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