Nginx初學

轉載自:https://blog.csdn.net/dutsoft/article/details/55003116

Nginx簡介

Nginx是一個輕量級的、高性能的WebServer,主要可以幹下面兩件事:作爲http服務器(和apache的功能一樣);作爲反向代理服務器實現負載均衡。

安裝Nginx

Mac上執行:

brew install nginx
  • 1

Ubuntu上執行:

sudo apt-get install nginx 
  • 1

Nginx基本操作

1) 啓動Nginx:start nginx
2) 停止Nginx:nginx -s stop
3) 修改配置後重啓:nginx -s reload
  • 1
  • 2
  • 3

關於代理

正向代理

正向代理,作爲一個媒介將互聯網上獲取的資源返回給相關聯的客戶端。代理和客戶端在一個局域網,對於服務端是透明的

反向代理

反向代理,根據客戶端的請求,從後端的服務器上獲取資源,然後再將這些資源返回給客戶端。代理和服務器在一個局域網,對客戶端是透明的。

反向代理的作用

  • 提高動態語言的I/O處理能力,Python、PHP、Java這樣的動態服務的I/O處理能力不高,反向代理可以緩衝請求,交給後端一個完整的HTTP請求,同樣,Nginx也可以緩衝響應,也達到了減輕後端的壓力。
  • 加密和SSL加速。
  • 安全。它保護和隱藏了原始資源服務器,還可以用作應用防火牆防禦一些網絡攻擊,比如DDoS。
  • 負載均衡。它幫應用服務器分配請求,以達到資源使用率最佳、吞吐率最大、響應時間最小的目的。
  • 緩存靜態內容。代理緩存通常可以滿足相當數量的網站請求,大大降低應用服務器上的負載。
  • 支持壓縮。通過壓縮優化可以提高網站訪問速度,還能大大減少帶寬的消耗。

在生產環境中,通常會在多個服務器啓動多個tornado進程實例,使用Nginx在前端作爲反向代理服務器來分發web請求,同時負載均衡。

反向代理實例

tornado服務的demo

# coding: utf-8
import tornado.ioloop
import tornado.web
from multiprocessing import Pool
import sys
import os


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world! PID: %s" % os.getpid())

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    def run(port):
        print 'Start Process on port: %s' % port
        sys.stdout.flush()
        application.listen(port)
        tornado.ioloop.IOLoop.instance().start()

    pool = Pool(3)
    pool.map(run, [8001, 8002, 8003])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

tornado會啓動三個進程,分別偵聽8001, 8002, 8003三個端口。

調整Nginx配置

負載均衡的目的是爲了解決單個節點壓力過大,造成Web服務響應過慢,嚴重的情況下導致服務癱瘓,無法正常提供服務的問題。
Nginx負載均衡是通過upstream模塊來實現的,內置實現了多種負載策略。Mac上Nginx的配置文件位於/usr/local/etc/nginx,用vim打開進行編輯。

負載均衡配置

upstream tornado.server {
   server 127.0.0.1:8001;
   server 127.0.0.1:8002;
   server 127.0.0.1:8003;
}
  • 1
  • 2
  • 3
  • 4
  • 5

upstream指令主要用於負載均衡,設置一系列的後端服務器。nginx 的 upstream默認是以輪詢的方式實現負載均衡,這種方式中,每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。此外還有ip_hash、weight、url_hash、fair等負載均衡策略。
upstream命名和服務器地址根據實際情況修改。我這裏是本地起的三個tornado服務,所以server IP地址都配的是127.0.0.1,默認輪詢的負載均衡。

反向代理配置

location / {
       proxy_pass_header Server;
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Scheme $scheme;
       proxy_pass http://tornado.server;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

location部分用於匹配反向代理的網頁位置。反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。

完整配置示例


worker_processes  1;

events {
    worker_connections  1024;
    use kqueue;
}

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

    # 負載均衡配置
    upstream tornado.server {
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
        server 127.0.0.1:8003;
    }

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # 反向代理配置
        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://tornado.server;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

代理地址根據實際情況修改,其他缺省配置項採用默認值就可以。

重新加載nginx.conf

如果已經啓動了Nginx,執行sudo nginx -s reload重新加載配置。

訪問結果

直接在瀏覽器中訪問http://127.0.0.1/,就可以訪問demo應用了。每次刷新都返回了Hello, world! PID:18854,後面跟的pid是交替出現,說明負載均衡生效了。

附錄: Windows下Nginx的啓動、停止等命令

在Windows下使用Nginx,我們需要掌握一些基本的操作命令,比如:啓動、停止Nginx服務,重新載入Nginx等,下面我就進行一些簡單的介紹。
1、啓動:

C:\server\nginx-1.0.2>start nginx

C:\server\nginx-1.0.2>nginx.exe

注:建議使用第一種,第二種會使你的cmd窗口一直處於執行中,不能進行其他命令操作。

2、停止:

C:\server\nginx-1.0.2>nginx.exe -s stop

C:\server\nginx-1.0.2>nginx.exe -s quit

注:stop是快速停止nginx,可能並不保存相關信息;quit是完整有序的停止nginx,並保存相關信息。

3、重新載入Nginx:

C:\server\nginx-1.0.2>nginx.exe -s reload

當配置信息修改,需要重新載入這些配置時使用此命令。

4、重新打開日誌文件:

C:\server\nginx-1.0.2>nginx.exe -s reopen

5、查看Nginx版本:

C:\server\nginx-1.0.2>nginx -v

推薦修改本地hosts的插件

在這裏插入圖片描述

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