Nginx入門基礎(一)

Nginx介紹

Nginx 是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3/SMTP服務器。html

官方測試Nginx可以支撐5萬併發連接,而且cpu、內存等資源消耗卻很是低,運行很是穩定。前端

應用場景

HTTP 服務器,能夠作網頁靜態服務器;html5

虛擬主機,能夠實如今一臺服務器虛擬出多個網站,例如我的網站使用的虛擬主機;nginx

反向代理,負載均衡。json

Windows環境下

官網下載解壓版,雙擊nginx.exe啓動,訪問127.0.0.1展現歡迎頁。後端

nginx.conf文件的結構

nginx的配置由特定的標識符(指令符)分爲多個不一樣的模塊。api

指令符分爲簡單指令和塊指令。跨域

簡單指令格式:[name parameters;]瀏覽器

塊指令格式:和簡單指令格式有同樣的結構,但其結束標識符不是分號,而是大括號{},塊指令內部能夠包含simple directives 和block directives, 能夠稱塊指令爲上下文(e.g. events, http, server, location)服務器

conf文件中,全部不屬於塊指令的簡單指令都屬於main上下文的,http塊指令屬於main上下文,server塊指令http上下文。

配置靜態訪問

 

反向代理

反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。

配置C:\Windows\System32\drivers\etc\hosts文件,新增127.0.0.1 80.itman.com

nginx.conf配置以下:

    server {
        listen       80;
        server_name  80.itman.com;

        location / {
            proxy_pass  http://127.0.0.1:8080;
            index  index.html index.htm;
        }
  
    }

效果:啓動一個Tomcat 127.0.0.1:8080,使用nginx反響代理80.itman.com直接跳轉到127.0.0.1:8080

負載均衡(策略)

負載均衡創建在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增長吞吐量、增強網絡數據處理能力、提升網絡的靈活性和可用性。

負載均衡(Load Balance)其意思就是分攤到多個操做單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工做任務。

一、輪詢(默認)

每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器宕機,能自動剔除。

    upstream backserver { 
        server 127.0.0.1:8081; 
        server 127.0.0.1:8082; 
    } 
    
    server {
        listen       80;
        server_name  80.itman.com;

        location / {
            proxy_pass  http://backserver;
            index  index.html index.htm;
        }
  
    }
二、指定權重

指定輪詢概率,weight和訪問比率成正比,用於後端服務器性能不均的狀況。

    upstream backserver { 
        server 127.0.0.1:8081 weight=1; 
        server 127.0.0.1:8082 weight=2; 
    }
三、IP綁定

每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session的問題。 

    upstream backserver { 
        ip_hash;
        server 127.0.0.1:8081; 
        server 127.0.0.1:8082; 
    }
 四、宕機輪詢規則配置
    upstream backserver { #設定負載均衡的服務器列表
        server 127.0.0.1:8081; 
        server 127.0.0.1:8082; 
    } 
    
    server {
        listen       80;
        server_name  80.itman.com;

        location / {
            proxy_pass  http://backserver; #請求轉向backserver定義的服務器列表
            index  index.html index.htm; #定義首頁索引文件的名稱
            proxy_connect_timeout 1; #nginx跟後端服務器鏈接超時時間(代理鏈接超時)
            proxy_send_timeout 1; #後端服務器數據回傳時間(代理髮送超時)
            proxy_read_timeout 1; #鏈接成功後,後端服務器響應時間(代理接收超時)
        }
  
    }

Nginx解決網站跨域問題

若http://127.0.0.1:8080工程A中頁面直接訪問http://127.0.0.1:8081/index8081接口,會產生跨域問題。

A頁面代碼:

  $(function () {
      $.get("http://127.0.0.1:8081/index8081", {}, function (result) {
         $("#show").html(result);
      })
    })

nginx.conf:

    server {
        listen       80;
        server_name  localhost;
        location /api {
            rewrite  ^/api/(.*)$ /$1 break;
            proxy_pass  http://127.0.0.1:8081;
            index  index.html index.htm;
        }
        location / {
            proxy_pass  http://127.0.0.1:8080;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  www.itman.com;
        location /A {
            proxy_pass  http://a.a.com:81/A;
            index  index.html index.htm;
        }
        location /B {
            proxy_pass  http://b.b.com:81/B;
            index  index.html index.htm;
        }
    }
示例代碼

A頁面調整:

    $(function () {
        $.get("/api/index8081", {}, function (result) {
            $("#show").html(result);
        })
    })

瀏覽器跨域的解決方式有不少種:
1.jsonp 須要目標服務器配合一個callback函數。
2.window.name+iframe 須要目標服務器響應window.name。
3.window.location.hash+iframe 一樣須要目標服務器做處理。
4.html5的postMessage+ifrme這個也是須要目標服務器或者說是目標頁面寫一個postMessage,主要側重於前端通信。
5.CORS須要服務器設置header:Access-Control-Allow-Origin。
6.nginx反向代理 這個方法通常不多有人說起,可是他能夠不用目標服務器配合,不過須要你搭建一箇中轉nginx服務器,用於轉發請求。

Nginx配置防盜鏈

 

 

Nginx配置DDOS

限制請求速度

    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; #每分鐘30請求
     
    server {
        limit_req zone=one;
        listen       8080;
        server_name  8080.itman.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

`limit_req_zone`命令設置了一個叫one的共享內存區來存儲請求狀態的特定鍵值,在上面的例子中是客戶端IP($binary_remote_addr)。location塊中的`limit_req`經過引用one共享內存區來實現限制訪問/login.html的目的。

限制連接數

設置Nginx、Nginx Plus的鏈接數在一個真實用戶請求的合理範圍內。好比,你能夠設置每一個客戶端IP鏈接/store不能夠超過10個。

相關文章
相關標籤/搜索