Nginx 運維(安裝與使用)

Nginx 運維(安裝與使用)

普通安裝

Windows安裝

(1)進入官方下載地址,選擇合適版本(nginx/Windows-xxx)。javascript

img

(2)解壓到本地php

img

(3)啓動css

下面以 C 盤根目錄爲例說明下:html

cd C:
cd C:\nginx-0.8.54 start nginx
注:Nginx / Win32 是運行在一個控制檯程序,而非 windows 服務方式的。服務器方式目前仍是開發嘗試中。

Linux 安裝

rpm 包方式(推薦)

(1)進入下載頁面,選擇合適版本下載。java

$ wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

(2)安裝 nginx rpm 包linux

nginx rpm 包實際上安裝的是 nginx 的 yum 源。nginx

$ rpm -ivh nginx-*.rpm

(3)正式安裝 rpm 包c++

$ yum install nginx

(4)關閉防火牆git

$ firewall-cmd --zone=public --add-port=80/tcp --permanent
$ firewall-cmd --reload

源碼編譯方式

下載源碼

進入官網下載地址:http://nginx.org/en/download.... ,選擇合適的版本下載(PS: 建議選擇最新的穩定版本)。github

這裏我選擇的是 1.16.1 版本:http://nginx.org/download/ngi...

wget http://nginx.org/download/nginx-1.16.1.tar.gz
安裝編譯工具及庫

Nginx 源碼的編譯依賴於 gcc 以及一些庫文件,因此必須提早安裝。

(1)安裝gcc環境

yum install gcc-c++

(2)安裝PCRE庫,用於解析正則表達式

yum install -y pcre pcre-devel

執行 pcre-config --version 命令。

(3)zlib壓縮和解壓縮依賴,

yum install -y zlib zlib-devel

(4)SSL 安全的加密的套接字協議層,用於HTTP安全傳輸,也就是https

yum install -y openssl openssl-devel
編譯源碼並安裝

(1)解壓,須要注意,解壓後獲得的是源碼,源碼須要編譯後才能安裝

tar -zxvf nginx-1.16.1.tar.gz

(2)編譯以前,先建立nginx臨時目錄,若是不建立,在啓動nginx的過程當中會報錯

mkdir /var/temp/nginx -p

(3)在nginx目錄,輸入以下命令進行配置,目的是爲了建立makefile文件

./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi
  • 注: 表明在命令行中換行,用於提升可讀性
  • 配置命令:

    命令 解釋
    –prefix 指定nginx安裝目錄
    –pid-path 指向nginx的pid
    –lock-path 鎖定安裝文件,防止被惡意篡改或誤操做
    –error-log 錯誤日誌
    –http-log-path http日誌
    –with-http_gzip_static_module 啓用gzip模塊,在線實時壓縮輸出數據流
    –http-client-body-temp-path 設定客戶端請求的臨時目錄
    –http-proxy-temp-path 設定http代理臨時目錄
    –http-fastcgi-temp-path 設定fastcgi臨時目錄
    –http-uwsgi-temp-path 設定uwsgi臨時目錄
    –http-scgi-temp-path 設定scgi臨時目錄

(4)make編譯並安裝

make
make install

(5)關閉防火牆

$ firewall-cmd --zone=public --add-port=80/tcp --permanent
$ firewall-cmd --reload

(6) 啓動 Nginx

安裝成功後,進入sbin目錄啓動 nginx

./nginx
  • 中止:./nginx -s stop
  • 從新加載:./nginx -s reload

打開瀏覽器,訪問虛擬機所處內網ip便可打開nginx默認頁面,顯示以下便表示安裝成功:
img

注意事項:
  • 若是在雲服務器安裝,須要開啓默認的nginx端口:80
  • 若是在虛擬機安裝,須要關閉防火牆
  • 本地win或mac須要關閉防火牆

Linux 開機自啓動

Centos7 以上是用 Systemd 進行系統初始化的,Systemd 是 Linux 系統中最新的初始化系統(init),它主要的設計目標是克服 sysvinit 固有的缺點,提升系統的啓動速度。Systemd 服務文件以 .service 結尾。

rpm 包方式

若是是經過 rpm 包安裝的,會自動建立 nginx.service 文件。

直接用命令:

$ systemctl enable nginx.service

設置開機啓動便可。

源碼編譯方式

若是採用源碼編譯方式,須要手動建立 nginx.service 文件。

詳情參考:centos 7.x編寫開機啓動服務

Docker 安裝

  • 官網鏡像:https://hub.docker.com/_/nginx/
  • 下載鏡像:docker pull nginx
  • 啓動容器:docker run --name my-nginx -p 80:80 -v /data/docker/nginx/logs:/var/log/nginx -v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
  • 從新加載配置(目前測試無效,只能重啓服務):docker exec -it my-nginx nginx -s reload
  • 中止服務:docker exec -it my-nginx nginx -s stop 或者:docker stop my-nginx
  • 從新啓動服務:docker restart my-nginx

腳本安裝

CentOS7 環境安裝腳本: 軟件運維配置腳本集合

安裝說明

  • 採用編譯方式安裝 Nginx, 並將其註冊爲 systemd 服務
  • 安裝路徑爲:/usr/local/nginx
  • 默認下載安裝 1.16.0 版本

使用方法

  • 默認安裝 - 執行如下任意命令便可:
curl -o- https://gitee.com/turnon/linux-tutorial/raw/master/codes/linux/soft/nginx-install.sh | bash
wget -qO- https://gitee.com/turnon/linux-tutorial/raw/master/codes/linux/soft/nginx-install.sh | bash
  • 自定義安裝 - 下載腳本到本地,並按照如下格式執行:
sh nginx-install.sh [version]

Nginx 初步配置

nginx.conf 配置結構

  • main 全局配置

    • event 配置工做模式以及鏈接數
    • http http 模塊相關配置

      • server 虛擬主機配置,能夠配置多個

        • location 路由規則,表達式
        • upstream 集羣,內網服務器

在前面搭建好 Nginx 環境後,編譯的 Nginx 根路徑爲 /usr/local/nginx,那麼對應的配置文件爲 /usr/local/nginx/conf/nginx.conf ,直接用 cat 命令查看這裏的配置文件內容(刪除掉了原配置文件中的英文註釋,並對主要配置項增長中文註釋):

$ cat /root/nginx/conf/nginx.conf

        # 設置worker進程的用戶,指的linux中的用戶,會涉及到nginx操做目錄或文件的一些權限,默認爲`nobody`
        user root;
    # worker進程工做數設置,通常來講CPU有幾個,就設置幾個,或者設置爲N-1也行
    worker_processes  1;
    
    # nginx 日誌級別`debug | info | notice | warn | error | crit | alert | emerg`,錯誤級別從左到右愈來愈大
    # error_log logs/error.log info
    
    # 設置nginx進程 pid
    # pid        logs/nginx.pid;

    # 設置工做模式
    events {
            # 默認使用 epoll
            use epoll;
            # 設置每一個worker進程的最大鏈接數,它決定了Nginx的併發能力
        worker_connections  1024;
    }

    # http 是指令塊,針對http網絡傳輸的一些指令配置
    http {
            # include 引入外部配置,提升可讀性,避免單個配置文件過大
        include      mime.types;
        default_type  application/octet-stream;

                # 設定日誌格式,`main`爲定義的格式名稱,如此 access_log 就能夠直接使用這個變量了
        # 註釋了日誌格式的配置,使用默認
        ...

                # sendfile使用高效文件傳輸,提高傳輸性能。
                # 啓用後才能使用`tcp_nopush`,是指當數據表累積必定大小後才發送,提升了效率。
        sendfile        on;
        tcp_nopush      on;

        # 重要參數,是一個請求完成以後還要保持鏈接多久,不是請求時間多久,
        # 目的是保持長鏈接,減小建立鏈接過程給系統帶來的性能損耗
        keepalive_timeout  65;
        
        # gzip啓用壓縮,html/js/css壓縮後傳輸會更快
        gzip    on;

        # server塊配置
        server {
            # 監聽80端口
            listen       80;
            server_name  localhost;

            # 匹配url /,會在html目錄下,訪問index.html或index.htm文件
            location / {
                root   html;
                index  index.html index.htm;
            }

            # 指定500 502 503 504出錯的錯誤頁面
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

設定日誌格式,main爲定義的格式名稱,如此 access_log 就能夠直接使用這個變量了

參數名 參數意義
$remote_addr 客戶端ip
$remote_user 遠程客戶端用戶名,通常爲:’-’
$time_local 時間和時區
$request 請求的url以及method
$status 響應狀態碼
$body_bytes_send 響應客戶端內容字節數
$http_referer 記錄用戶從哪一個連接跳轉過來的
$http_user_agent 用戶所使用的代理,通常來時都是瀏覽器
$http_x_forwarded_for 經過代理服務器來記錄客戶端的ip

Nginx 日誌切割

現有的日誌都會存在 access.log 文件中,可是隨着時間的推移,這個文件的內容會愈來愈多,體積會愈來愈大,不便於運維人員查看,因此咱們能夠經過把這個大的日誌文件切割爲多份不一樣的小文件做爲日誌,切割規則能夠以爲單位,若是天天有幾百G或者幾個T的日誌的話,則能夠按需以每半天或者每小時對日誌切割一下。

手動日誌切割

具體步驟以下:

  1. 建立一個shell可執行文件:cut_log.sh,內容爲:
#!/bin/bash
LOG_PATH="/var/log/nginx/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log

#向Nginx主進程發送信號,用於從新打開日誌文件
kill -USR1 `cat $PID`
  1. cut_log.sh添加可執行的權限:
chmod +x cut_log.sh
  1. 測試日誌切割後的結果:
./cut_log.sh

使用定時任務

  1. 安裝定時任務:

    yum install crontabs
  2. crontab -e 編輯而且添加一行新的任務:

    */1 * * * * /usr/local/nginx/sbin/cut_log.sh
  3. 重啓定時任務:

    service crond restart
    systemctl restart crond.service
  • 附:經常使用定時任務命令:

    service crond start         // 啓動服務
    service crond stop          // 關閉服務
    service crond restart       // 重啓服務
    service crond reload        // 從新載入配置
    crontab -e                  // 編輯任務
    crontab -l                  // 查看任務列表

定時任務表達式:

Cron表達式是,分爲5或6個域,每一個域表明一個含義,以下所示:

星期幾 年(可選)
取值範圍 0-59 0-23 1-31 1-12 1-7 2019/2020/2021/…

經常使用表達式:

  • 每分鐘執行:

    */1 * * * *
  • 每日凌晨(天天晚上23:59)執行:

    59 23 * * *
  • 每日凌晨1點執行:

    0 1 * * *

使用 Gzip 壓縮提高請求速度

# 開啓 gzip 壓縮功能,目的:提升傳輸效率,節約服務器帶寬
gzip  on;
# 限制最小壓縮,小於 1 字節文件不會壓縮
gzip_min_length 1;
# 設置圖片壓縮級別(壓縮比,文件越大,壓縮越多,可是 CPU 使用會越多)
gzip_comp_level 3;
# 定義壓縮文件的類型
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json;

root 與 alias

假如服務器路徑爲:/home/imooc/files/img/face.png

  • root 路徑徹底匹配訪問

配置的時候爲:

location /imooc {
    root /home
}

用戶訪問的時候請求爲:url:port/imooc/files/img/face.png

  • alias 能夠爲你的路徑作一個別名,對用戶透明

配置的時候爲:

location /hello {
    alias /home/imooc
}

用戶訪問的時候請求爲:url:port/hello/files/img/face.png,如此至關於爲目錄imooc作一個自定義的別名。

location 的匹配規則

  • 空格:默認匹配,普通匹配

    location / {
         root /home;
    }
  • =:精確匹配

    location = /imooc/img/face1.png {
        root /home;
    }
  • ~*:匹配正則表達式,不區分大小寫

    #符合圖片的顯示
    location ~* .(GIF|jpg|png|jpeg) {
        root /home;
    }
  • ~:匹配正則表達式,區分大小寫

    #GIF必須大寫才能匹配到
    location ~ .(GIF|jpg|png|jpeg) {
        root /home;
    }
  • ^~:以某個字符路徑開頭

    location ^~ /imooc/img {
        root /home;
    }

參考資料

<p/>

相關文章
相關標籤/搜索