經過本地文件系統提供服務:對css,js文件,圖片等靜態文件css
緩存:將一些數據常常不變的,緩存到Nginx中,直接給用戶提供服務html
負載均衡前端
OpenRestyjava
數據庫的服務比較簡單,tps和併發遠遠高於應用服務,全部Nginx能夠直接訪問數據庫提升性能linux
利用nginx強大的併發性能,實現web防火牆等複雜的業務功能;nginx
高併發,高性能:對每個鏈接使用的內存儘可能少web
可擴展性好:nginx模塊化很是穩定使得Nginx第三方模塊生態圈豐富。正則表達式
高可靠性:運行時間長,不須要常常重啓服務器數據庫
熱部署:不中止服務下,升級Nginxwindows
BSD許可證:能夠修改源代碼運行在商業的服務器上是合法的
nginx二進制可執行文件:由各個模塊編譯出的文件
nginx.conf:配置文件
access.log:記錄每一條http請求信息
error.log:錯誤消息
開源版:nginx.org
商業版:nginx.com(不開源)
Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了不少高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等獲得了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平臺。
從2011年12月開始,Tengine成爲一個開源項目,Tengine團隊在積極地開發和維護着它。Tengine團隊的核心成員來自於淘寶、搜狗等互聯網企業。
缺點:沒有辦法根據nginx的官方版本同步升級
OpenResty(也稱爲 ngx_openresty)是一個全功能的 Web 應用服務器。它打包了標準的 Nginx 核心,不少的經常使用的第三方模塊,以及它們的大多數依賴項。
開源OpenResty:http://openresty.org
商業版OpenResty:https://openresty.com
windows
直接在官網上下載windows版本便可,安裝的目錄不要帶有中文,不然啓動nginx會報錯,能夠直接運行
linux
首先linux可能須要安裝其餘的模塊(nginx中gzip模塊須要zlib庫,rewrite模塊須要pcre庫,ssl功能須要openssl庫),若是須要的時候能夠來下載...
參考http://www.javashuo.com/article/p-sxzixkwa-m.html
一、nginx下載
wget http://nginx.org/download/nginx-1.16.1.tar.gz
二、編譯和安裝
參考官方文檔:http://nginx.org/en/docs/configure.html
./configure ---prefix=/usr/local/nginx/ 能夠指定其餘的,不指定就是默認值,執行完成後,會生成objs目錄 make 能夠在objs目錄下看到一個nginx文件,這個文件是爲了在版本升級時,不能進行make install,須要將該(nginx)copy到prefix安裝目錄中sbin目錄下 make install 安裝完成以後,能夠去prefix指定的目錄中查看安裝後的文件
格式:nginx -s reload 幫助:-?-h 使用指定的配置文件:-c 指定運行目錄:-p 發送信號:-s 測試配置文件是否有語法錯誤:-t -T 打印nginx的版本信息、編譯信息等:-v -V
./nginx //啓動,若是啓動後訪問不了,看看是否是防火牆禁止了端口(nginx默認監聽80端口) ./nginx -s reload //重載配置文件,在sbin目錄下(若是咱們修改了配置文件中的配置(咱們安裝nginx的目錄中的conf),咱們但願馬上生效,可是不會重啓nginx) ./nginx -s stop //關閉
firewall-cmd --list-all :查看防火牆開放的端口
添加對外開放的端口
sudo firewall-cmd --add-port=80/tcp --permanent firewall-cmd -reload 重啓防火牆
當咱們的nginx處於運行狀態,咱們須要對他進行版本升級
咱們能夠將sbin目錄中的nginx執行二進制文件備份一下
cp nginx nginx.old
編譯好最新的nginx二進制文件去替換sbin目錄下的nginx文件(在objs目錄中有咱們編譯好的nginx,用它來替換sbin目錄中nginx)
給正在運行的nginx master進程發送一個信號,咱們須要版本升級了
ps-ef I grep nginx
kill -USR2 13195:此時會新啓動一個nginx master進程
kill -WINCH 13195:關閉老的進程,此時的worker process關閉了,可是master process沒有關閉是爲了若是新版本有問題,方便咱們回退版本
能夠寫一個腳本,每隔一段時間進行切割日誌
#!/bin/bash #Rotate the Nginx logs to prevent a single logfile from consuming too much disk space. LOGS_PATH=/usr/Local/openresty/nginx/logs/history CUR_LOGS_PATH=/usr/Local/openresty/nginx/logs YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) mv ${CUR_LOGS PATH}/taohui_access.1og ${LOGS_PATH}/taohui_access_${YESTERDAY}.1og mv ${CUR_LOGS_PATH}/maomaoxiong_access.1og ${L0GS_PATH}/maomaoxiong_access_${YESTERDAY}.1og mv ${CUR_LOGS_PATH}/error.1og ${LOGS_PATH}/error_${YESTERDAY}.1og ##向Nginx主進程發送USR1信號。USR1信號是從新打開日誌文件,1是數字1 kil1-USR1 $(cat /usr/Local/openresty/nginx/Logs/nginx.pid)
event以前的部分:全局塊,從配置文件開始到events塊之間的內容,主要會設置一些影響nginx服務器總體運行的配置指令
event:events 涉及的指令主要影的 Nginx 服務器與用戶的網絡鏈接
http塊:
http全局塊:配置的指令包括文件引入、MIME-TYPE定義、日誌自定義、鏈接超時時間、單連接請求數上限等。
server塊:這塊和虛擬主機有密切關係,虛擬主機從用戶角度看,和一臺獨立的硬件主機是徹底同樣的,該技術的產生是爲了節省互聯網服務器硬件成本。
location塊:這塊的主要做用是基於Nginx 服務器接收到的請求字符串(例如 server_name/uri-string),對虛擬主機名稱(也能夠是IP別名)以外的字符串(例如前面的/uri-string)進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能,還有許多第三方模塊的配置也在這裏進行。
localtion語法說明
location [=|~|~*|^~] uri{}
一、=:用於不含正則表達式的uri前,要求請求字符串與uri嚴格匹配,若是匹配成功,就中止繼續向下搜索並當即處理該請求。
二、~:用於表示uri包含正則表達式,而且區分大小寫。
三、~*:用於表示uri包含正則表達式,而且不區分大小寫。
四、^~:用於不含正則表達式的 uri前,要求Nginx 服務器找到標識uri和請求字
########### 每一個指令必須有分號結束。################# #user administrator administrators; #配置用戶或者組,默認爲nobody nobody。 #worker_processes 2; #容許生成的進程數,默認爲1 #pid /nginx/pid/nginx.pid; #指定nginx進程運行文件存放地址 error_log log/error.log debug; #制定日誌路徑,級別。這個設置能夠放入全局塊,http塊,server塊,級別以此爲:debug|info|notice|warn|error|crit|alert|emerg events { accept_mutex on; #設置網路鏈接序列化,防止驚羣現象發生,默認爲on multi_accept on; #設置一個進程是否同時接受多個網絡鏈接,默認爲off #use epoll; #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #最大鏈接數 http { include mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream; #默認文件類型,默認爲text/plain #access_log off; #取消服務日誌 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式 access_log log/access.log myFormat; #combined爲日誌格式的默認值 sendfile on; #容許sendfile方式傳輸文件,默認爲off,能夠在http塊,server塊,location塊。 sendfile_max_chunk 100k; #每一個進程每次調用傳輸數量不能大於設定的值,默認爲0,即不設上限。 keepalive_timeout 65; #鏈接超時時間,默認爲75s,能夠在http,server,location塊。 upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #熱備 } error_page 404 https://www.baidu.com; #錯誤頁 server { keepalive_requests 120; //單鏈接請求上限次數。 listen 4545; //監聽端口 server_name 127.0.0.1; //監聽地址,能夠寫成www.xx.com,經過域名訪問 location ~*^.+$ { //請求的url過濾,正則匹配,~爲區分大小寫,~*爲不區分大小寫。 #root(alias) path; //根目錄(能夠設置爲絕對路徑(前端項目工程路徑)D:/xx/xx/ 注意路徑使用 / ) #index vv.txt; //設置默認頁 proxy_pass http://mysvr; //請求轉向mysvr 定義的服務器列表 deny 127.0.0.1; //拒絕的ip allow 172.18.5.54; //容許的ip } } }