一、什麼是Nginx? 很多人對apache非常的熟悉,Nginx和Apache類似,都屬於Web容器,同時也是一款高性能的 HTTP和反向代理軟件,發音(engine x) 二、爲什麼要選擇Nginx Nginx和Apache最大的區別: (1)Apache處理速度非常慢,而且佔用很多內存資源,Nginx正好相反, (2)在功能Apache的所有模塊都是支持動靜態編譯,而Nginx都是靜態編譯 (3)Apache對FCGI的支持不好,而Nginx對FCGI支持非常的好. (4)在處理鏈接上,Nginx支持epoll,而Apache卻不支持 (5)從安裝包看Nginx只有百K,Apache都按照M以算,非常的龐大. 三、Nginx的優勢 (1)作爲WEB服務器,Nginx處理靜態文件,索引文件 自動搜索的效率非常之高 (2)作爲代理服務器Nginx可以實現反向代理加速。提高網站的運行速度 (3)做負載均衡器,Nginx可以在內部直接支持Rails和PHP,可以支持HTTP代理服務器對外進行服務,同時還支持簡單的容錯利用算法進行負載 (4)在性能方面,Nginx專門爲性能優化而開發的,支持最併發鏈接數爲5萬. (5)穩定方面 CPU佔用資源非常低,官方表示Nginx保持1萬個沒有活動的鏈接,佔用2.5M內存,官方聲稱在這種狀態DDOS***是完全無效的. (6)在高性能方面,Nginx支持熱部署,啓動速度特別迅速,因此可以不間斷服務的情況下,對軟件的版本配置或者升級,不影響現網業務,運行幾個月也不需要啓動,幾乎可以做7*24小時不間斷運行. 四、Nginx的模塊工作原理 Nginx由內核與模塊組成,內核的設計非常小巧和簡潔,完成的工作也是非常的簡單,通過配置文件 將客戶端請求映射到一個location block當中,然後通過這個location中的配置每個指令調用不同模塊,從而完成相應的工作. Nginx的模塊從結構分: 核心模塊包含了:http模塊,event模塊,mail模塊 基礎模塊包含了:http Access模塊 Http FastCGI模塊 Http Proxy 模型和HTTP Rewrite模塊. 第三方模塊:Http upstream request模塊,Notice模塊和Http Access key模塊 以上模塊從功能分爲3個大類: (1)Handerls(處理模塊)此類模塊直接請求,並且將輸出內容和修改Haders信息操作, Handerls處理器模塊只有一個 (2)Filters(過濾模塊) 主要針對其它的處理模塊輸出內容和進修修改,最後由Nginx輸出. (3)Proxies(代理模塊),此模塊Nginx的HTTP upstream之類的模塊,這些模塊實現了後端服務比如:FastCGI的信息交互,實現代理服務和負載均衡. HTTP發出請求 | | \|/ Nginx內核 | | 選擇一個Handlers處理模塊 | | Handlers模塊進行處理-----》交給Filters(過濾模塊)-->響應HTTP請求 在工作方式上,Nginx分爲單進程和雙進程兩種,Nginx默認工作方式爲單進程工作 #=============================================================== 五、Nginx的安裝與配置 (1)安裝依賴庫 # yum -y install gcc openssl-devel zlib-devel 安裝pcre-delvel庫pcre-8.01.tar.gz # cd /soft/ # tar xf pcre-8.01.tar.gz -C tmp/ # cd tmp/pcre-8.01/ #./configure && make && make install 安裝libmd5 libmd5-0.8.2b.tar.gz # cd /soft/ #tar xf libmd5-0.8.2b.tar.gz -C tmp/ (2)安裝Nginx # useradd user_00 -g users -s /sbin/nologin # cd /soft/ # tar -xvf nginx-0.8.55.tar.gz -C tmp/ # cd tmp/nginx-0.8.55/ ./configure --user=user_00 --group=users --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-md5=/soft/md5/ --with-sha1=auto/lib/sha1 --with-pcre=/soft/pcre-8.01/ --without-select_module --without-poll_module --without-http_ssi_module --without-http_userid_module --without-http_geo_module --without-http_map_module --without-http_memcached_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --prefix=/usr/local/services/nginx-0.8.55 # make >/dev/null && make install >/dev/null 編譯參數詳解: --with-http_realip_module 此模塊支持顯示真實來源IP地址,主要用於NGINX做前端負載均衡服務器使用。 -with-http_stub_status_module 這個模塊可以取得一些nginx的運行狀態, --with-http_gzip_static_module 這個模塊在一個預壓縮文件傳送到開啓Gzip壓縮的客戶端之前檢查是否已經存在以“.gz”結尾的壓縮文件,這樣可以防止文件被重複壓縮。 --with-md5=/soft/md5/ 設定md5庫文件路徑 --with-sha1=auto/lib/sha1 設定sha1庫文件路徑 --with-pcre=/soft/pcre-8.01 設定PCRE庫路徑 --without-select_module 標準連接模式。默認情況下自動編譯方式。您可以啓用或禁用通過使用-select_module和不帶- select_module配置參數這個模塊 --without-poll_module 不使用poll模塊 --without-http_ssi_module 不使用ngx_http_ssi_module模塊,此模塊處理服務器端包含文件(ssi)的處理. --without-http_userid_module 不使用ngx_http_userid_module模塊 --without-http_geo_module 這個模塊基於客戶端的IP地址創建一些ngx_http_geoip_module變量,並與MaxMindGeoIP文件進行匹配,該模塊僅用於 0.7.63和0.8.6版本之後。但效果不太理想,對於城市的IP記錄並不是特別準確,不過對於網站的來源訪問區域的分析大致有一定參考性 。 --without-http_map_module 不使用ngx_http_map_module模塊 --without-http_memcached_module 不使用ngx_http_memcached_module模塊 --without-mail_pop3_module 不允許ngx_mail_pop3_module模塊 --without-mail_imap_module 不允許ngx_mail_imap_module模塊 --without-mail_smtp_module 不允許ngx_mail_smtp_module模塊 4.4、編輯主配置文件 配置文件位置:/usr/local/nginx/conf/nginx.conf 1. Nginx配置文件分爲4個部分 2. main(全局設置) 3. server(主機設置) 4. upstream(負載均衡設置) 5. localtion(URL匹配特定位置的設置) 這四個 server繼承main location繼承server upstream即不會繼承 其它設置也不會被繼承. #vim /usr/local/nginx/conf/nginx.conf #==================================一全局配置#======================== user user_00 users; #這個模塊指令,指Nginx Worker 運用的用戶和組,默認爲nobody worker_processes 8; #指定了要開啓的進程數,每進程佔用10M~12M的內存,建議和CPU的核心數量一樣多的進程就行了。 error_log logs/error.log; #全局錯誤日誌 #error_log logs/error.log notice; #error_log logs/error.log info; pid logs/nginx.pid; #:用來指定進程ID的存儲位置. #Specifies the value for maximum file descriptors that can be opened by this process. #events 用來指定Nginx工作模式以及連接數上限 events { use epoll; #使用epoll高效模式,適用於Linux,Unix使用kqueue worker_connections 100000; #定義Ningx沒個進程最大的連接數。默認爲1024,受到文件句柄的約束。 } worker_rlimit_nofile 100000; #打開的文件句柄數量最高爲10萬 #==================================二、HTTP配置======================== http { include mime.types; #實現對配置文件所包含的文件設定 default_type application/octet-stream; #屬於HTTP核心模塊,默認設定爲二進制流 server_tokens off; #禁止錯誤頁面裏顯示nginx的版本號 # 定義日誌處理的格式 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; # 定義它的hash表爲128K server_names_hash_bucket_size 128; client_header_buffer_size 32k; #客戶端請求頭部的緩衝區大小,一般一個請求頭的大小不會超過1k large_client_header_buffers 4 32k; #客戶請求頭緩衝大小 nginx默認會用client_header_buffer_size這個buffer來讀取header值 client_max_body_size 8m; #設定通過nginx上傳文件的大小 #sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件, #對於普通應用,必須設爲on。 #如果用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,降低系統uptime。 sendfile on; tcp_nopush on; #此選項允許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用 tcp_nodelay on; #keepalive_timeout 0; keepalive_timeout 60; #keepalive超時時間。連接保持活動時間超過這個,將被關閉掉 #===================重要位置============ fastcgi_connect_timeout 300; #指定連接到後端FastCGI的超時時間。 fastcgi_send_timeout 300; #向FastCGI傳送請求的超時時間,這個值是指已經完成兩次握手後向FastCGI傳送請求的超時時間。 fastcgi_read_timeout 300; #接收FastCGI應答的超時時間,這個值是指已經完成兩次握手後接收FastCGI應答的超時時間。 fastcgi_buffer_size 254k; #指定讀取FastCGI應答第一部分需要用多大的緩衝區 fastcgi_buffers 16 256k; #指定本地需要用多少和多大的緩衝區來緩衝FastCGI的應答。 fastcgi_busy_buffers_size 512k; #這個指令我也不知道是做什麼用,只知道默認值是fastcgi_buffers的兩倍。 fastcgi_temp_file_write_size 512k; #在寫入fastcgi_temp_path時將用多大的數據塊,默認值是fastcgi_buffers的兩倍。 gzip on; #該指令用於開啓或關閉gzip模塊(on/off) gzip_min_length 1k; #設置允許壓縮的頁面最小字節數,頁面字節數從header頭得content-length中進行獲取 gzip_buffers 4 16k; #設置系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流 gzip_http_version 1.0; #識別http的協議版本 gzip_comp_level 2; #gzip壓縮比,1壓縮比最小處理速度最快 #匹配mime類型進行壓縮,無論是否指定,”text/html”類型總是會被壓縮的 gzip_types text/plain application/x-javascript text/css application/xml text/javascript; gzip_vary on; #和http頭有關係,加個vary頭,給代理服務器用的 charset utf-8; #字符集爲utf-8 access_log off; # 日常日誌關閉 log_not_found off; # 日常日誌關閉 error_page 400 403 405 408 /40x.html; # 錯誤返回頁面 error_page 500 502 503 504 /50x.html; # 錯誤返回頁面 #===================Server虛擬機配置保持默認============ server { listen 80 default; #默認監聽端口號爲80 server_name _; return 444; } #===================自定義虛擬機配置文件=========== include vhost/vhost.www.fanhougame.com; } 主配虛擬Server配置文件如下: server { listen 80 ; #監聽端口號 #域名爲 server_name 10.0.0.201; # 指定網站的目錄 root /data/www/oa.com/www.fanhougame.com ; # localtion模塊指定網站首頁名稱 location / { index index.php index.html index.htm; if (!-e $request_filename) { return 444; } } #:返回的錯誤信息 error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/local/nginx/html; } #可以指定多個localtion進行不同的指令處理,這裏是指定php的sock location ~ \.php$ { fastcgi_pass unix:/tmp/php-cgi-5313-web.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SERVER_NAME $http_host; fastcgi_ignore_client_abort on; } #指定對網頁圖片格式進行緩存max表示10年,也可以是30d(天) location ~ \.(swf|js|css|xml|gif|jpg|jpeg|png|bmp)$ { error_log off; access_log off; #expires 30d; expires max; } } 4.5、啓動與平滑重啓 # cd /usr/local/services/nginx-0.8.55/sbin/ # ./nginx –t 檢測配置文件是否有錯誤 # ./nginx 啓動nginx # ./nginx -s reload #################################################################################### 六、 Nginx常用配置實例 6.1、負載均衡配置實例環境: Master:10.0.0.201 Master Web 10.0.0.201:81 Slave1 Web 10.0.0.202:80 Slave2 Web 10.0.0.203:80 6.2、在201編輯主配置文件nginx.conf # vim /usr/local/service/nginx/conf/nginx.conf 6.3、在201上面編輯虛擬主機配置文件vhost.aatest.com # vim /usr/local/service/nginx/conf/vhost/vhost.aatest.com 6.4、在201上面編輯負載均很配置文件 # vim /usr/local/service/nginx/conf/vhost/vhost.fuzai upstream www.aatest.com { server 10.0.0.201:81 weight=1 max_fails=3 fail_timeout=20s; server 10.0.0.202:80 weight=1 max_fails=3 fail_timeout=20s; server 10.0.0.203:80 weight=1 max_fails=3 fail_timeout=20s; } server{ listen 80; server_name www.aatest.com; location / { proxy_pass http://www.aatest.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 6.5、在202和203編輯如下主配置文件 # vim /usr/local/service/nginx/conf/nginx.conf 6.5、在202和203編輯如下虛擬主機配置文件 # vim /usr/local/service/nginx/conf/www.aatest.com server { listen 80 ; #監聽端口號 #域名爲 server_name www.aatest.com; # 指定網站的目錄 root /opt/zeng ; # localtion模塊指定網站首頁名稱 location / { index index.php index.html index.htm; if (!-e $request_filename) { return 444; } } #:返回的錯誤信息 error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/local/nginx/html; } #可以指定多個localtion進行不同的指令處理,這裏是指定php的sock location ~ \.php$ { fastcgi_pass unix:/tmp/php-cgi-5313-web.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SERVER_NAME $http_host; fastcgi_ignore_client_abort on; } #指定對網頁圖片格式進行緩存max表示10年,也可以是30d(天) location ~ \.(swf|js|css|xml|gif|jpg|jpeg|png|bmp)$ { error_log off; access_log off; #expires 30d; expires max; } } 總結如下: 單機WEB配置 1、安裝庫 2、安裝Nginx 3、編輯Nginx.conf主文件(注意編輯完虛擬配置文件之後。要主文件相關連(include file> 4、編輯虛擬機的配置文件 5、啓動服務 6、建立網站對應的目錄,編寫一些靜態的html頁面.echo "test" >index.html 負載均衡的配置 環境: 10.0.0.201 負載均衡服務器:對外80 10.0.0.201 虛擬主機(WEB)81 10.0.32.111 端口號:80 10.0.0.131 端口號:80 步驟一、在201 32.111 131服務器上面都編輯Nginx.conf 步驟二、在201 111 131 編輯一個虛擬機配置文件 步驟三、在201上面編輯負載均衡的配置文件 步驟四、啓動服務
Nginx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.