secureCat掃描nginx

一. ngnix用途
1. Web 服務器:
相比 Apache,Nginx 使用更少的資源,支持更多的併發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支持高達 50,000 個併發連接數的響應,感謝 Nginx 爲我們選擇了 epoll and kqueue 作爲開發模型.

2.負載均衡服務器
支持作爲 HTTP代理服務器對外進行服務。Nginx用C編寫,不論是系統資源開銷還是 CPU 使用效率都比 Perlbal 要好的多。

3.作爲郵件代理服務器
Nginx 同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作爲郵件代理服務器),Last.fm 描述了成功並且美妙的使用經驗.

4.優勢
安裝非常的簡單,配置文件 非常簡潔(還能夠支持perl語法),Bugs非常少的服務器, Nginx 啓動特別容易,並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啓動。你還能夠在 不間斷服務的情況下進行軟件版本的升級。

Nginx配置詳解
一、Nginx簡介
Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器,Nginx,它的發音爲“engine X”,是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP 代理服務器。
Nginx以事件驅動的方式編寫,所以有非常好的性能,同時也是一個非常高效的反向代理、負載平衡。
Nginx因爲它的穩定性、豐富的模塊庫、靈活的配置和低系統資源的消耗而聞名.業界一致認爲它是Apache2.2+mod_proxy_balancer的輕量級代替者,不僅是因爲響應靜態頁面的速度非常快,而且它的模塊數量達到Apache的近2/3。對proxy和rewrite模塊的支持很徹底,還支持mod_fcgi、ssl、vhosts ,適合用來做mongrel clusters的前端HTTP響應。
Nginx專爲性能優化而開發,可以支持高併發連接

性能是其最重要的考量,實現上非常注重效率,處理響應請求很快 。它支持內核Poll模型,能經受高負載的考驗,有報告表明能支持高達 50,000個併發連接數。
Nginx具有很高的穩定性。

其它HTTP服務器,當遇到訪問的峯值,或者有人惡意發起慢速連接時,也很可能會導致服務器物理內存耗盡頻繁交換,失去響應,只能重啓服務器。例如當前apache一旦上到200個以上進程,web響應速度就明顯非常緩慢了。而Nginx採取了分階段資源分配技術,使得它的CPU與內存佔用率非常低。nginx官方表示保持10,000個沒有活動的連接,它只佔2.5M內存,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩定性而言,nginx比lighthttpd更勝一籌。

Nginx支持熱部署。
它的啓動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啓動。你還能夠在不間斷服務的情況下,對軟件版本進行進行升級。
Nginx配置簡單,只需要修改conf下的nginx.conf文件就行,也就幾十行配置,簡單的十幾行就能搞定。


啓動和停止Nginx

Nginx目前只支持命令行操作,進入Nginx部署目錄。


1)         啓動Nginx:start nginx
2)         停止Nginx:nginx -s stop
3)         修改配置後重啓:nginx -s reload
二、nginx.conf 配置文件
Nginx 配置文件主要分成四部分:main(全局設置)、http(HTTP 的通用設置)、server(虛擬主機設置)、location(匹配 URL 路徑)。還有一些其他的配置段,如 event,upstream 等。
1、 通用設置
user nginx
指定運行 nginx workre 進程的用戶和組
worker_rlimit_nofile #
指定所有 worker 進程能夠打開的最大文件數
worker_cpu_affinity
設置 worker 進程的 CPU 粘性,以避免進程在 CPU 間切換帶來的性能消耗。如 worker_cpu_affinity 0001 0010 0100 1000;(四核)
worker_processes 4
worker 工作進程的個數,這個值可以設置爲與 CPU 數量相同,如果開啓了 SSL 和 Gzip,那麼可以適當增加此數值
worker_connections 1000
單個 worker 進程能接受的最大併發連接數,放在 event 段中
error_log logs/error.log info
錯誤日誌的存放路徑和記錄級別
use epoll
使用 epoll 事件模型,放在 event 段中
2、 http 服務器配置
server {}:
定義一個虛擬主機
listen 80;
定義監聽的地址和端口,默認監聽在本機所有地址上,該端口不能被其他程序佔用,否則啓動不了,最開始80開始的端口。
server_name NAME [...];
定義虛擬主機名,可以使用多個名稱,還可以使用正則表達式或通配符。
sendfile on
開啓 sendfile 調用來快速的響應客戶端
keepalive_timeout 10
長連接超時時間,單位是秒。
send_timeout
指定響應客戶端的超時時間
client_max_body_size 10m
允許客戶端請求的實體最大大小
root PATH
設置請求 URL 所對應資源所在文件系統上的根目錄
location [ = | ~ | ~* | ^~ ] URI { ... }
設置一個 URI 匹配路徑
=:精確匹配
~:正則表達式匹配,區分字符大小寫
~*:正則表達式匹配,不區分字符大小寫
^~:URI 的前半部分匹配,且不實用正則表達式
優先級:
= > location 完整路徑 > ^~ > ~ > ~* > location 起始路徑 > location /
allow 和 deny
基於 IP 訪問控制,如:
僅允許 192.168.0.1/192.168.255.255 網段客戶端訪問
allow 192.168.0.1/192.168.255.255;
deny all;

rewrite <REGEX> <REPL> <FLAG>
URL 重寫,可以使用多種標記
例如:
rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
可用的 flag:
- last:重寫完成後,繼續匹配其他 rewrite 規則
- break:重寫完成後不再繼續匹配
- redirect:返回 302 重定向(臨時重定向),客戶端對重定向的 URL 發起新的請求
- permanent:返回 301 重定向(永久重定向),客戶端對重定向的 URL 發起新的請求
當我們把前段工程放到nginx的html目錄下的時候,我們訪問前段工程的時候就需要使用到URL的重寫
例如:我們的工程項目叫test,主頁面是test目錄下的index.html頁面。
配置如下:
location/{
rewrite "^/home/(.+)" /test/$1 last;
}
當我們訪問主頁面的時候使用127.0.0.1:80/home/index.htnl就OK了。

三、反向代理配置
修改部署目錄下conf子目錄的nginx.conf文件(如nginx/conf/nginx.conf)內容,可調整相關配置。

反向代理配置示例:
在對應的Server裏面添加如下配置
location / {#默認的/是指根目錄。如果需要配置其他反向代理的路徑,可以是根路徑 location /test
             #禁用緩存
             proxy_buffering off;
             #設置反向代理的地址
#代理的可以是單獨的地址,也可以加端口號,還可以加對應的路徑比如http://192.168.1.1:8080/test
             proxy_pass http://192.168.1.1;       
     }

四、負載均衡配置
1、RR(默認)權重輪詢
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。
例如:
upstream tomcats {
server 192.168.1.1:8080  max_fails=3 fail_timeout=3s weight=9;
server 192.168.1.2:8080  max_fails=3 fail_timeout=3s weight=1;
}
那麼10次一般只會有1次會訪問到8080,而有9次會訪問到8080
2、ip_hash
上面的2種方式都有一個問題,那就是下一個請求來的時候請求可能分發到另外一個服務器,當我們的程序不是無狀態的時候(採用了session保存數據),這時候就有一個很大的很問題了,比如把登錄信息保存到了session中,那麼跳轉到另外一臺服務器的時候就需要重新登錄了,所以很多時候我們需要一個客戶只訪問一個服務器,那麼就需要用iphash了,iphash的每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。

    upstream test {
        ip_hash;
        server 192.168.1.1:8080;
        server 192.168.1.2:8080;
    }
3、fair(第三方)
需要安裝第三方的fair插件才能配置使用
按後端服務器的響應時間來分配請求,響應時間短的優先分配。

    upstream backend { 
        fair; 
        server 192.168.1.1:8080;
        server 192.168.1.2:8080;
server 192.168.1.3:8080 backup;#設置爲備用主機
    } 
4、url_hash(第三方)
需要安裝第三方的url_hash插件才能配置使用
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。 在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash算法
    upstream backend { 
        hash $request_uri; 
        hash_method crc32; 
        server 192.168.1.1:8080;
        server 192.168.1.2:8080;
    } 

每個設備的狀態設置爲:
1.down 表示單前的server暫時不參與負載
2.weight 默認爲1.weight越大,負載的權重就越大。
3.max_fails :允許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
4.fail_timeout:max_fails次失敗後,暫停的時間。
5.backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。
要注意的是 weight 與 ip_hash 是不能同時使用的,原因很簡單,他們是不同且彼此衝突的策略。
以上4種負載均衡各自適用不同情況下使用,所以可以根據實際情況選擇使用哪種策略模式,不過fair和url_hash需要安裝第三方模塊才能使用。


下面是一個完整的nginx的配置樣例:


#user  nginx;#windows下可以不配置,但是linux下必須配置,不然沒有訪問權限。你使用用戶nginx啓動nginx,就配置爲user nginx
worker_processes  8;#工作線程數量,可以配置爲CPU的數量

error_log  logs/error.log;#錯誤日誌輸出文件
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;#指定進程ID,方便在部署環境的時候寫腳本去管理進程


events {
    worker_connections  1024;#配置的最大併發連接數量
}
upstream tomcats {
server 192.168.1.1:8080  max_fails=3 fail_timeout=3s weight=9;
server 192.168.1.2:8080  max_fails=3 fail_timeout=3s weight=1;
}

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;
    #配置一個虛擬的server服務器
    server {
        listen       8880;#監聽端口
        server_name  localhost;#主機名稱
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            proxy_pass http://tomcats;
            index  index.html index.htm;
        }
        location /home {
            rewrite "^/home/(.+)" /test/$1 last;
        }
       location /Test {
           proxy_pass http://192.168.1.1:8080/TestServlet;
       }
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    include servers/*;
}
 


 

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