Nginx----基礎

靜態資源服務

  經過本地文件系統提供服務:對css,js文件,圖片等靜態文件css

反向代理服務

  緩存:將一些數據常常不變的,緩存到Nginx中,直接給用戶提供服務html

  負載均衡前端

api服務

  OpenRestyjava

  數據庫的服務比較簡單,tps和併發遠遠高於應用服務,全部Nginx能夠直接訪問數據庫提升性能linux

  利用nginx強大的併發性能,實現web防火牆等複雜的業務功能;nginx

Nginx優勢

高併發,高性能:對每個鏈接使用的內存儘可能少web

可擴展性好:nginx模塊化很是穩定使得Nginx第三方模塊生態圈豐富。正則表達式

高可靠性:運行時間長,不須要常常重啓服務器數據庫

熱部署:不中止服務下,升級Nginxwindows

BSD許可證:能夠修改源代碼運行在商業的服務器上是合法的

Nginx組成

  nginx二進制可執行文件:由各個模塊編譯出的文件

  nginx.conf:配置文件

  access.log:記錄每一條http請求信息

  error.log:錯誤消息

 

Nginx各版本

開源版:nginx.org
商業版:nginx.com(不開源)

 

 

阿里巴巴的Tengine

  Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了不少高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等獲得了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平臺。
從2011年12月開始,Tengine成爲一個開源項目,Tengine團隊在積極地開發和維護着它。Tengine團隊的核心成員來自於淘寶、搜狗等互聯網企業。

缺點:沒有辦法根據nginx的官方版本同步升級

OpenResty

  OpenResty(也稱爲 ngx_openresty)是一個全功能的 Web 應用服務器。它打包了標準的 Nginx 核心,不少的經常使用的第三方模塊,以及它們的大多數依賴項。

  開源OpenResty:http://openresty.org

  商業版OpenResty:https://openresty.com

 

下載Nginx

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命令行

格式: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)

 

四、nginx配置文件詳細

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           
        } 
    }
}
相關文章
相關標籤/搜索