1. 程式人生 > >nginx 基礎及使用

nginx 基礎及使用

ges tar 發送 同時 字符 內存泄漏 keep dex 語法

Nginx由於出色的性能,在世界範圍內受到了越來越多人的關註,淘寶內部被廣泛使用

介紹:

Nginx俄羅斯人編寫的十分輕量級HTTP服務器,是一個高性能HTTP和反向代理服務器,同時也是一個IMAP、POP3、SMTP代理服務器,Nginx以事件驅動的方式編寫,所以有非常好的性能,同事也是一個非常高效的反向代理,負載平衡,其擁有匹配Lighttpd的性能,同時還沒有Lighttpd的內存泄漏問題。

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

特點:

Nginx作為HTTP服務器,有幾個基本特性:

l 處理靜態文件,索引文件以及自動索引,打開文件描述符緩沖,

l 無緩存的反向代理加速,簡單的負載均衡和容錯

l FastCGI,簡單的負載均衡和容錯

l 模塊化結構,包括gzipping,byte ranges,chunked respinse,以及SSI-filter等filter如果由 FastCGI 或其它代理服務器處理單頁中存在的多個 SSI,則這項處理可以並行運行,而不需要相互等待。

l 支持 SSL 和 TLSSNI.

配置:

nginx.conf 是主配置文件

worker_process 工作進程的數量

worker_connections 表示每個工作進程的最大連接數量

server{}塊定義了虛擬主機

l listener監聽接口,監聽本機ip和端口

l server_name監聽域名

    1. 完整的主機名 如:api.luf.com
    2. 含有通配符 如*.luf.com 或者 api.* (通配符只能在開頭或者結尾,只能有一個)
    3. 正則表達式,以~開頭

l location{}是用來為配置的URI進行配置,URI即語法中的“/uri/" location / {}匹配任何查詢,因為所有請求都是以/開頭

    1. root指定對應URI的資源查找路徑,
    2. index指定首頁index文件的名稱,可以配置多個,以空格分開。
    3. ~ 表示執行一個正則匹配,區分大小寫
    4. ~* 表示執行一個正則匹配,不區分大小寫
    5. ^~ 表示普通字符匹配,如果該選項匹配,值匹配該選項,一般用來匹配目錄
    6. = 進行普通字符精確匹配
    7. @ 定義個命令location 使用在內部定向時,

mime.types

文件擴展名與文件類型映射表,Nginx根據映射關系,設置HTTP請求響應頭的conntent-type值。

架構:

Nginx啟動後,後臺進程中包含一個master進程和多個worker進程。master來管理worker進程,所以我們只需要與master進程通信就行了,master進程會接收來自外界發來的信號,在根據信號做不同的事情,比如kill -HUP pid則是告訴Nginx,從容地重啟Nginx,(過程:首先從新加載配置文件,然後在啟動新的worker進程,並想所有舊的worker發送信號退出,新的worker啟動後,就開始接收新的請求,老的worker在接收到信號後,不在接收新的請求,並在當前進程中所有未處理完的請求處理完成後在退出)在Nginx0.8版本之後,引入了一系列命令行參數管理,比如./nginx -s reload 重啟, ./nginx -s stop 停止。

Nginx使用

使用:

轉發:

server_name localhost:8080;

location / {

proxy_pass http://localhost:8080;

}

常用命令:

l 開始: start nginx

l 停止: nginx -s stop

l nginx -s reload 在Windows下失效

錯誤:

404 Not Found: root路徑時相對路徑 替換使用 : alias /space/ReactRouterPro/;

react-router 刷新403 : try_files $uri /index.html; 重定向指令 前提history類型為browerHistory

語法:

Nginx的配置文件使用的就是一門微型的編程語言

l 變量只能存放一種類型的值,字符串

a) set $a ‘hello world‘ set配置指令對變量$a進行了賦值操作

b) $uri 請求中的當前URI不帶請求參數,可以通過內部重定向

c) $arg_name 請求中帶的參數

d) $hostname 主機名

e) $args 請求中的參數值

f) $query_string 同args

g) $request 客戶端請求地址

h) $request_uri 這個變量等於包含一些客戶端請求參數的原始URI

l 如果你網站上一些資源永久移除了,最快捷的方法就是使用return直接返回

  location /wrong/url { return 404; }

l return的第一個參數是響應代碼可選第二個參數可以重定向

  location /permanently/moved/url { return 301 http://www.example.com/moved/here; }

l 錯誤處理: error_page命令可以配置特定錯誤碼的錯誤頁面,或者重定向到其他頁面

l 重寫URIs: rewrite 指令可以多次修改請求的URI,第一個參數是匹配的正則表達式,第二個參數是將要替換的URI,第三個參數可選,指示是否繼續可以重寫或者返回重定向代碼

  location /users/ { rewrite ^/users/(.*)$ /show?user=$1 break; }

我的實例: conf

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

    sendfile        on;
    
    keepalive_timeout  65;

    server {
        listen       8888;
        server_name  localhost;

        location / {  #用於React router項目
            alias   /space/ReactRouter/; # 配置非Nginx路徑的其他路徑
            try_files $uri /index.html;
            index  index.html;
        }

    }

    # server {
    #     listen       8889;
    #     server_name  localhost;
    #     location / {
    #         root   html;
    #         index  index.html;
    #     }
    
    #     location / {
    #         proxy_pass https://***.com; #代理其他服務器
    #     }
    # }



}

說明: 僅閱讀總結。

nginx 基礎及使用