Nginx

一、什麼是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上面編輯負載均衡的配置文件

步驟四、啓動服務


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