nginx必知必会
nginx是一個HTTP服務器,反向代理服務器,郵件代理服務器,一個通用的TCP/UDP代理服務器,應用極為廣泛。
- 提供HTTP和反向代理服務
提供靜態和index文件服務,帶有緩存的反向代理,負載均衡和故障轉移,支持HTTP / 2
基于名稱和IP的虛擬服務器,keepAlive和Pipeline支持,
3XX-5XX錯誤碼重定向,基于正則的URI重改,基于客戶端IP/認證的訪問控制,
響應速率限制,限制來自同一個地方的連接和請求限制
等等 - Mail proxy server
- TCP/UDP 代理服務器功能
TCP/UDP的通用代理(曾經面試被問到過),負載均衡和故障轉移,基于client address的訪問控制,連接數量限制
nginx有一個Master進程和幾個worker進程,master進程主要負責讀取執行配置文件,管理維持woker進程。worker進程工作在沒有特權的用戶下,實際負責處理請求,基于event模型來分配請求,worker進程的數量可以在配置文件指定,也可以根據系統CPU數量自動調整。
nginx.conf文件提供了靈活的配置,并且不需要重啟服務,即可不間斷的提供服務。占用內存極少,10 000個不活動的keep-alive 連接只占用2.5M內存。
安裝啟動
windows直接到nginx官網下載下載即可,linux下安裝點擊這里
mac下安裝nginx一般利用brew安裝
brew search nginx 查詢nginx是否安裝
brew info nginx 這個命令非常有用,展示nginx的配置文件所在和啟動命令
brew install nginx安裝nginx
安裝后open /usr/local/etc/nginx/可以看到有nginx.conf和servers文件夾,open /usr/local/Cellar/nginx是nginx安裝的地方,進入里面可以看到bin下面是nginx的啟動文件,html的快捷方式真正指向的是上面info命令說明的/usr/local/var/www目錄
nginx或brew services start nginx啟動,mac下可以在任何目錄輸入前述指令,-c filename 加載指定配置文件,來代替缺省的。
nginx啟動后就可以通過nginx -s parameter來控制nginx:
nginx -s reload 重新加載配置文件使其生效。master進程在收到重新加載配置文件的指令后,會檢查新配置文件的語法,檢查通過后就會開啟新的worker進程去處理請求,然后發信號通知舊的worker進程停止,舊的worker進程收到停止命令后會停止接受新請求,在處理完當前請求后退出。
nginx -s quit 平穩關閉Nginx結束web服務,會等待當前worker進程處理完請求。nginx -s stop 快速關閉Nginx終止web服務。在Linux中也可以通過kill -s QUIT <master進程 PID>來正常關閉nginx,master進程PID會寫入/usr/local/nginx/logs or /var/run文件夾中,也通過ps -ax | grep nginx可以查詢nginx進程PID
nginx -s reopen 重新打開日志文件。
nginx -t 不運行,而僅僅測試配置文件。nginx 將檢查配置文件的語法的正確性,并嘗試打開配置文件中所引用到的文件。
nginx -v 顯示 nginx 的版本。
nginx -V 詳細的顯示 nginx 的版本,編譯器版本和配置文件所在位置等。
nginx配置文件詳解
nginx的使用最重要在于配置文件nginx.conf,nginx由模塊組成,這些模塊由配置文件中指定的指令控制。指令分為簡單指令和塊指令:
簡單指令由名稱和用空格隔開的參數組成,以分號(;)結束。
塊指令由名稱和一組{ }包圍的附加指令組成。如果一個塊指令可以在括號內有其他指令,則稱為上下文(例如:events、http、server和location)。放在配置文件中任何上下文之外的指令被認為是在主上下文中。
如下:
events和http指令位于主上下文中,server位于http中,location位于server中。
#號之后的表示注釋。
主要配置指令
#運行用戶 #user somebody;#啟動進程,通常設置成和cpu的數量相等 worker_processes 1;#全局錯誤日志 error_log D:/Tools/nginx-1.10.1/logs/error.log; error_log D:/Tools/nginx-1.10.1/logs/notice.log notice; error_log D:/Tools/nginx-1.10.1/logs/info.log info;#PID文件,記錄當前啟動的nginx的進程ID pid D:/Tools/nginx-1.10.1/logs/nginx.pid;#工作模式及連接數上限 events {worker_connections 1024; #單個后臺worker process進程的最大并發鏈接數 }#設定http服務器,利用它的反向代理功能提供負載均衡支持 http {#設定mime類型(郵件支持類型),類型由mime.types文件定義include D:/Tools/nginx-1.10.1/conf/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 D:/Tools/nginx-1.10.1/logs/access.log main;rewrite_log on;#sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,對于普通應用,#必須設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,以平衡磁盤與網絡I/O處理速度,降低系統的uptime.sendfile on;#tcp_nopush on;#連接超時時間keepalive_timeout 120;tcp_nodelay on;#gzip壓縮開關#gzip on;#設定實際的服務器列表upstream zp_server1{server 127.0.0.1:8089;}#HTTP服務器server {#監聽80端口listen 80;#定義使用www.xx.com訪問server_name www.helloworld.com;#首頁index index.html#指向webapp的目錄root D:\01_Workspace\Project\github\zp\SpringNotes\spring-security\spring-shiro\src\main\webapp;#編碼格式charset utf-8;#代理配置參數proxy_connect_timeout 180;proxy_send_timeout 180;proxy_read_timeout 180;proxy_set_header Host $host;proxy_set_header X-Forwarder-For $remote_addr;#反向代理的路徑(和upstream綁定),location 后面設置映射的路徑location / {proxy_pass http://zp_server1;}#靜態文件,nginx自己處理location ~ ^/(images|javascript|js|css|flash|media|static)/ {root D:\SpringNotes\spring-security\spring-shiro\src\main\webapp\views;#過期30天,靜態文件不怎么更新,過期可以設大一點,如果頻繁更新,則可以設置得小一點。expires 30d;}#設定查看Nginx狀態的地址location /NginxStatus {stub_status on;access_log on;auth_basic "NginxStatus";auth_basic_user_file conf/htpasswd;}#禁止訪問 .htxxx 文件location ~ /\.ht {deny all;}#錯誤處理頁面(可選擇性配置)#error_page 404 /404.html;#error_page 500 502 503 504 /50x.html;#location = /50x.html {# root html;#}} }總結
- 上一篇: Tomcat入门
- 下一篇: windows常用技巧