一、什麼是Nginx?html
Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是一款輕量級的Web服務器/反向代理服務器以及電子郵件代理服務器,其特色是佔用內存少,併發能力強,在同類型的網頁服務器中表現優秀 Nginx是由伊戈爾.塞索耶夫開發的,於2004年10月4日公開源碼,以類BSD許可證形式發佈 Nginx因它的穩定性,豐富的功能,示例配置文件和低系統資源的消耗而聞名 。python
二、有人用Nginx嗎?linux
中國大陸使用Nginx的網站: 淘寶,京東,騰訊,百度,新浪,網易...nginx
三、爲何選擇Nginx?(優勢)web
做爲Web服務器:正則表達式
一、相比Apache,Nginx使用資源更少,支持更多的併發鏈接,體現更高的效率,使Nginx倍受歡迎。算法
二、Nginx可以支持高達50000個併發鏈接數的響應。 django
做爲負載均衡服務器:後端
一、Nginx既能夠在內部直接支持Redis和PHP,也能夠支持做爲HTTP代理服務器對外進行服務,Nginx使用C編寫,不管是系統資源開銷仍是CPU使用效率都處理的很是優秀。 數組
二、Nginx安裝很是簡單,配置文件很是簡潔,Bug很是少:Nginx啓動很是容易,而且幾乎能夠作到7 * 24小時不間斷運行,即便運行數個月也不須要從新啓動。
四、Nginx怎麼安裝?
Nginx安裝主要有兩種方式:
1、源碼安裝
1. 下載源碼壓縮包
2. 安裝源碼編譯依賴包 gcc,zlib,make...
3. 配置編譯模塊
4. make && make test
5. make install
2、包管理工具安裝
1. 去官網將所使用依賴添加到包管理工具中
2. 更新包管理工具資源
3. 使用包管理工具安裝
五、Nginx怎麼控制?
啓動Nginx nginx [ -c configpath] 信息查看 nginx -v nginx -V 控制Nginx nginx -s signal stop 快速關閉 quit 優雅的關閉 reload 從新加載配置 經過系統管理 systemctl status nginx 查看nginx狀態 systemctl start nginx 啓動nginx服務 systemctl stop nginx 關閉nginx服務 systemctl enable nginx 設置開機自啓 systemctl disable nginx 禁止開機自啓
六、Nginx配置文件怎麼搞?
Nginx配置文件包含指定指令控制的模塊。
指令分爲簡單指令和塊指令
一個簡單指令由名稱和參數組成,以空格分隔,並以分號結尾。
一個塊指令和簡單指令具備相同的結構,但不是以分號結束,而是以一個大括號包圍的一堆附。
加指令結束
若是一個大括號內能夠有其餘的指令,它就被稱爲一個上下文,好比(events,http,server,location)
指令以下:
nginx -t 不運行,僅測試配置文件 nginx -c configpath 從指定路徑加載配置文件 nginx -t -c configpath 測試指定配置文件
七、Nginx配置文件結構怎麼搞?
main 全局設置 events{ 工做模式,鏈接配置 ... } http{ http的配置 ... upstream xxx{ 負載均衡配置 ... } server{ 主機設置 ... location xxx{ URL匹配 ... } } } #main user nginx; worker進程運行的用戶和組 worker_processes 1; 指定Nginx開啓的子進程數,多核CPU建議設置和CPU數量同樣的進程數 error_log xxx level;用來定義全局錯誤日誌文件,一般放在var中,level有 debug,info,notice, warn,error,crit pid xxx; 指定進程id的存儲文件位置 #events 指定工做模式和以及鏈接上限 events{ use epoll; worker_connections 1024; } use 指定nginx工做模式 epoll 高效工做模式,linux kqueue 高效工做模式, bsd poll 標準模式 select 標準模式 worker_connections 定義nginx每一個進程的最大鏈接數 正向代理 鏈接數 * 進程數 反向代理 鏈接數 * 進程數 / 4 linux系統限制最多能同時打開65535個文件,默認上限就是65535,可解除 ulimit -n 65535 #http 最核心的模塊,主要負責http服務器相關配置,包含server,upstream子模塊 include mime.types;設置文件的mime類型 include xxxconfig; 包含其它配置文件,分開規劃解耦 default_type xxx; 設置默認類型爲二進制流,文件類型未知時就會使用默認 log_format 設置日誌格式 sendfile 設置高效文件傳輸模式 keepalive_timeout 設置客戶端鏈接活躍超時 gzip gzip壓縮 #server 用來指定虛擬主機 listen 80; 指定虛擬主機監聽的端口 server_name localhost; 指定ip地址或域名,多個域名使用空格隔開 charset utf-8; 指定網頁的默認編碼格式 error_page 500 502 /50x.html 指定錯誤頁面 access_log xxx main; 指定虛擬主機的訪問日誌存放路徑 error_log xxx main; 指定虛擬主機的錯誤日誌存放路徑 root xxx; 指定這個虛擬主機的根目錄 index xxx; 指定默認首頁 #location 核心中的核心,之後的主要配置都在這 主要功能:定位url,解析url,支持正則匹配,還能支持條件,實現動靜分離 語法 location [modifier] uri{ ... } modifier 修飾符 = 使用精確匹配而且終止搜索 ~ 區分大小寫的正則表達式 ~* 不區分大小寫的正則表達式 ^~ 最佳匹配,不是正則匹配,一般用來匹配目錄 經常使用指令 alias 別名,定義location的其餘名字,在文件系統中可以找到,若是location指定了正則表達式,alias將會引用正則表達式中的捕獲,alias替代lication中匹配的部分,沒有匹配的部分將會在文件系統中搜索
八、用Nginx部署項目怎麼搞?(Django爲例):
django 服務器 runserver wsgi uwsgi : web服務器,多線程處理的不錯 1. pip install uwsgi 2. 工程目錄下建立uwsgi.ini 配置文件 3. 書寫配置信息 4. 使用uwsgi服務器 - 啓動 uwsgi --ini uwsgi.ini - 中止 uwsgi --stop uwsgi.pid nginx配置 location /static{ alias xxx/static/; } location / { include uwsgi_params; uwsgi_pass localhost:8000; }
反向代理
proxy_pass URL; #反向代理轉發地址,默認不轉發header proxy_set_header HOST $host; #須要轉發header則設置 proxy_method POST; #轉發的方法名 proxy_hide_header Cache-Control; #指定頭部不被轉發 proxy_pass_header Cache-Control; #設置哪些頭部轉發 proxy_pass_request_header on; #設置轉發http請求頭 proxy_pass_request_body on; #設置轉發請求體
upstream
負載均衡模塊,經過一個簡單的調度算法來實現客戶ip到後端服務器的負載平衡
#寫法 upstream myproject{ ip_hash; server 127.0.0.1:8000; server 127.0.0.1:8001 down; server 127.0.0.1:8002 weight=3; server 127.0.0.1:8003 backup; fair; } #負載均衡算法 weight #負載權重 down #當前server不參與負載均衡 backup #其它機器全down掉或滿載使用此服務 ip_hash #按每一個請求的hash結果分配 fair #按後端響應時間來分(第三方的)