Nginx server之Nginx做爲反向代理服務器

一:Nginx介紹php

1.Nginx簡介:nginx [engine x]是一個俄羅斯人編寫的HTTP和反向代理服務器,另外它也能夠做爲郵件代理服務器。 它已經在衆多流量很大的俄羅斯網站上使用了很長時間,這些網站包括Yandex、Mail.Ru、VKontakte,以及Rambler。據Netcraft統計,在2012年8月份,世界上最繁忙的網站中有11.48%使用Nginx做爲其服務器或者代理服務器。部分紅功案例請見: Netflix, Wordpress.com, FastMail.FM。html

2.總體採用模塊化設計是nginx的一個重大特色,甚至http服務器核心功能也是一個模塊。要注意的是:nginx的模塊是靜態的,添加和刪除模塊都要對nginx進行從新編譯,這一點與Apache的動態模塊徹底不一樣。nginx

3.Nginx做爲負載均衡服務器: Nginx 既能夠在內部直接支持 Rails 和 PHP 程序對外進行服務, 也能夠支持做爲 HTTP代理 服務器對外進行服務. Nginx採用C進行編寫, 不管是系統資源開銷仍是CPU使用效率都比 Perlbal 要好不少. 。Nginx可做爲7層負載均衡服務器來使用。web

4.Nginx與PHP集成:自PHP-5.3.3起,PHP-FPM加入到了PHP核心,編譯時加上--enable-fpm便可提供支持。 PHP-FPM以守護進程在後臺運行,Nginx響應請求後,自行處理靜態請求,PHP請求則通過fastcgi_pass交由PHP-FPM處理,處理完畢後返回。 Nginx和PHP-FPM的組合,是一種穩定、高效的PHP運行方式,效率要比傳統的Apache和mod_php高出很多。正則表達式

基本的HTTP服務器特性shell

處理靜態文件,索引文件以及自動索引;打開文件描述符緩存;apache

使用緩存加速反向代理;簡單負載均衡以及容錯;vim

遠程FastCGI,uwsgi,SCGI,和memcached服務的緩存加速支持;簡單的負載均衡以及容錯;後端

模塊化的架構。過濾器包括gzip壓縮、ranges支持、chunked響應、XSLT,SSI以及圖像縮放。在SSI 過濾器中,一個包含多個SSI的頁面,若是經由FastCGI或反向代理處理,可被並行處理;centos

支持SSL,TLS SNI。

其餘的HTTP服務器特性

基於名字和IP的虛擬主機;

Keep-alive和pipelined鏈接支持;

靈活的配置;

從新加載配置以及在線升級時,不須要中斷正在處理的請求;

自定義訪問日誌格式,帶緩存的日誌寫操做以及快速日誌輪轉;

3xx-5xx錯誤代碼重定向;

重寫(rewrite)模塊:使用正則表達式改變URI;

根據客戶端地址執行不一樣的功能;

基於客戶端IP地址和HTTP基本認證機制的訪問控制;

支持驗證HTTP referer;

支持PUT、DELETE、MKCOL、COPY以及MOVE方法;

支持FLV流和MP4流;

速度限制;

來自同一地址的同時鏈接數或請求數限制;

嵌入Perl語言。

郵件代理服務器特性

使用外部HTTP認證服務器重定向用戶到IMAP/POP3後端;

使用外部HTTP認證服務器認證用戶後重定向鏈接到內部SMTP後端;

支持的認證方式:

POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;

IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;

SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;

SSL支持;

STARTTLS和STLS支持。

二:具體配置步驟

//環境說明

1.系統爲centos6.4 

2.nginx編譯安裝在IP:10.10.54.157上,並配合其它幾臺web服務器實現負載均衡

3.nginx服務器即看成一臺反向代理服務器,又看成一臺web服務器和其它幾臺web服務器配合實現負載均衡

4.web服務器能夠是apache,要實現負載均衡,先得保證每臺web服務器能夠獨立被訪問

5.環境中有不止一臺web服務器,nginx服務器的功能就是把用戶的鏈接請求均衡負載到每臺web服務器上

//nginx編譯安裝

shell> ./configure --prefix=/usr/local/nginx --user=apache --group=apache --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module && make && make install
#參數解釋
--prefix=PATH                     set installation prefix
--user=USER                       set non-privileged user for
--group=GROUP                     set non-privileged group for
--with-http_ssl_module            enable ngx_http_ssl_module
--with-http_stub_status_module    enable ngx_http_stub_status_module   #支持監控
--with-http_gzip_static_module    enable ngx_http_gzip_static_module   #支持壓縮

#啓動nginx
shell> /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#測試nginx配置文件格式是否正確
shell> /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
#關閉nginx
shell> cat /usr/local/nginx/logs/nginx.pid | xargs kill -TERM
#重啓nginx
shell> cat /usr/local/nginx/logs/nginx.pid | xargs kill -HUP
HUP      重啓
TERM,INT 快速中止
USR1    從新打開日誌文件,用於日誌切割
USR2    平滑升級可執行程序
QUIT     從容關閉
WINCH    從容關閉工做進程

//nginx服務器配置

#編輯nginx主配置文件
shell> vim /usr/local/nginx/conf/nginx.conf
user  apache apache;
worker_processes  2;
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
pid        logs/nginx.pid;
events {
      worker_connections  1024;
}

http {
      include       mime.types;
      default_type  application/octet-stream;

      log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
      access_log  logs/access.log  main;
      sendfile        on;
      tcp_nopush     on;
      #keepalive_timeout  0;
      keepalive_timeout  65;
      gzip  on;
    
      include virtual/www_zijian_com_conf;    #包含虛擬主機文件目錄
}

#編輯虛擬配置文件
shell> mkdir /usr/local/nginx/conf/virtual
shell> cd /usr/local/nginx/conf/virtual
shell> vim www_zijian_com_conf
--------------------------------------------
upstream www_zijian_com {
        server 10.10.54.157:8080 max_fails=3 weight=2 fail_timeout=60s;    #本機也充當一臺web服務器
        server 10.10.54.159:10081 max_fails=3 weight=1 fail_timeout=60s;    #10.10.54.159這個web服務器上的10081端口正在監聽狀態
        server 10.10.54.152:10080 max_fails=3 weight=3 fail_timeout=60s;
        server 10.10.54.150:1500 max_fails=3 weight=4 fail_timeout=60s;
}

#nginx服務器在www.zijian.com:80(下面的配置中)端口監聽來自客戶端的鏈接,而後經過反向代理,由upstream部分決定吧用戶的請求負載到哪臺web服務器上,weight=number參數能夠指定某臺web服務器的權重
server {
            listen  80;
            server_name www.zijian.com;    #nginx服務器訪問地址,瀏覽器中輸入的是這個網址
            charset uft-8;
            access_log logs/www.access.log main;
            index index.html;
            location / {
                proxy_pass http://www_zijian_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;
       }
}

#nginx服務器自己也充當web服務器,因此這裏也要配置
server {
            listen  8080;
            server_name www.zijian.com;
            charset uft-8;
            access_log logs/www.access.log main;
            root /var/www/html;
            index index.html;
}
--------------------------------------------

#瀏覽器中輸入www.zijian.com 測試nginx負載均衡
#注意:瀏覽器的緩存會干擾測試結果,因此你要確保www.ziji被正確解析爲nginx服務器的IP,這個例子中是10.10.54.15


#虛擬配置文件另外一中形式
-----------------------------------------------------------------------
upstream www_zijian_com {
        server 10.10.54.159:10081 max_fails=3 weight=1 fail_timeout=60s; #僅有三臺web server負載
        server 10.10.54.157:8080 max_fails=3 weight=2 fail_timeout=60s;    #本機web服務器
        server 10.10.54.152:10080 max_fails=3 weight=3 fail_timeout=60s;    
}
server   {
        listen  80;
        server_name www.zijian.com;
        charset uft-8;
        access_log logs/www.access_nginx.log main;
        index index.html;

        location / {
                proxy_pass http://www_zijian_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;
        }
}
#不一樣與上一個配置文件,當upstream把用戶請求負載到10.10.54.157:8080上時,再一次啓動代理,代理到10.10.54.150:1500端口
server   {
        listen  8080;    #監聽8080端口
        access_log logs/www.access_nginx.log main;
        location / {
        proxy_pass http://10.10.54.150:1500;
        }
}
----------------------------------------------------------------------------------
相關文章
相關標籤/搜索