nginx 基礎及使用
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監聽域名
- 完整的主機名 如:api.luf.com
- 含有通配符 如*.luf.com 或者 api.* (通配符只能在開頭或者結尾,只能有一個)
- 正則表達式,以~開頭
l location{}是用來為配置的URI進行配置,URI即語法中的“/uri/" location / {}匹配任何查詢,因為所有請求都是以/開頭
- root指定對應URI的資源查找路徑,
- index指定首頁index文件的名稱,可以配置多個,以空格分開。
- ~ 表示執行一個正則匹配,區分大小寫
- ~* 表示執行一個正則匹配,不區分大小寫
- ^~ 表示普通字符匹配,如果該選項匹配,值匹配該選項,一般用來匹配目錄
- = 進行普通字符精確匹配
- @ 定義個命令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 基礎及使用