摘要:的配置文件是以塊形式組織,每個(gè)都是以一個(gè)塊名稱和一對(duì)大括號(hào)組成。這里注意的是,當(dāng)打開的是首頁依然是一個(gè)頁面,只有中繼續(xù)定義了查看靜態(tài)網(wǎng)站文件系統(tǒng)目錄中的某一目錄時(shí),才會(huì)將文件列出。使用此啟動(dòng)類型應(yīng)同時(shí)指定,以便能夠跟蹤服務(wù)的主進(jìn)程。
初識(shí)Nginx
Nginx 的三個(gè)主要應(yīng)用場(chǎng)景:
靜態(tài)資源服務(wù):通過本地文件系統(tǒng)提供服務(wù)
反向代理服務(wù):緩存加速與負(fù)載均衡
API服務(wù):OpenResty
Nginx 背景和優(yōu)點(diǎn):
互聯(lián)網(wǎng)的數(shù)據(jù)量快速增長、摩爾定律的性能提升以及低效的 Apache(一個(gè)連接對(duì)應(yīng)一個(gè)進(jìn)程)促使 Nginx 的出現(xiàn)。
Nginx 的優(yōu)點(diǎn)
高并發(fā)、高性能:32核64G 內(nèi)存可以處理數(shù)千萬并發(fā)連接
可擴(kuò)展性:得益于模塊化設(shè)計(jì)
高可靠性:持續(xù)不間斷運(yùn)行數(shù)年
熱部署:不停止服務(wù)情況下,升級(jí) Nginx
BSD 許可證
Nginx 的組成
Nginx 二進(jìn)制可執(zhí)行文件:由各模塊源碼編譯出的一個(gè)文件
Nginx.conf 配置文件:控制 nginx 的行為
access.log 訪問日志:記錄每一條 http 請(qǐng)求信息
error.log 錯(cuò)誤日志:定位問題
Nginx 的版本發(fā)布
開源版本的 Nginx 中,奇數(shù)版本的 Nginx 如1.15.x 是 Mainline 主干版本,它會(huì)有新的功能,但可能并不穩(wěn)定,偶數(shù)版本如1.14.x,是Stable 穩(wěn)定版本。每個(gè)版本的 CHANGES 中,包含三部分:Feature新增功能、Bugfix 修復(fù) bug、Change重構(gòu)。
編譯 Nginx安裝 Nginx 的方法主要用兩種:編譯 Nginx 或者直接安裝二進(jìn)制 nginx。二進(jìn)制格式的 Nginx 中模塊已經(jīng)編譯,但并不是每一個(gè)模塊(功能)都開啟(被編譯),一些第三方模塊,同樣包含強(qiáng)大的功能就無法編譯到二進(jìn)制 Nginx 中。自主編譯 nginx 可以根據(jù)自己的需求合理開啟需要編譯的模塊。
下載 Nginx
下載你需要的 Nginx 版本,并解壓縮。解壓縮 Nginx 的源碼包后,包含6個(gè)目錄和5個(gè)文件
auto:有四個(gè)子目錄,用于編譯的 cc、lib庫目錄 lib、判斷操作系統(tǒng)的 os、types 和19個(gè)文件用于輔助 configure判斷當(dāng)前系統(tǒng)支持哪些模塊以及特性
conf:示例文件,安裝成功后,會(huì)將此目錄中的內(nèi)容拷貝到安裝目錄
configure:執(zhí)行編譯前的必備動(dòng)作,生成中間文件
contrib:提供兩個(gè) perl 腳本和一個(gè)vim 配置文件用于高亮顯示 nginx 的配置文件,文件放置于~/.vim/中:cp -r contrib/vim/* ~/.vim/
html:提供兩個(gè)標(biāo)準(zhǔn) html 文件 index.html 和50X.html
src:源碼目錄
Configure
獲取支持的的參數(shù)使用./configure --help,編譯時(shí)支持的參數(shù)有三類:
指定 Nginx 各種文件的安裝位置;
確定開啟和關(guān)閉的模塊。使用 with 開頭的需要手動(dòng)開啟,使用 without 的默認(rèn)會(huì)編譯到 nginx 中,指定即可取消編譯該模塊;
指定 nginx 的安裝過程中使用的特殊參數(shù),如 c 編譯器的路徑等。
執(zhí)行./configure --prefix=/usr/local/nginx檢查系統(tǒng)環(huán)境是否符合滿足安裝要求,并將定義好的安裝配置信息和系統(tǒng)環(huán)境信息寫入Makefile文件中。 Makefile 文件包含了如何編譯、啟用哪些功能、安裝路徑等信息。
在預(yù)編譯過程中,可以出現(xiàn)的錯(cuò)誤大部分是因?yàn)檐浖娜笔А>幾g Nginx 需要依賴的軟件包關(guān)系有:
yum install -y gcc gcc-c++ autoconf automake make / yum install -y pcre pcre-devel / yum install -y zlib zlib-devel
預(yù)編譯后,會(huì)生成 objs 目錄和 Makefile 文件
編譯
執(zhí)行make命令進(jìn)行編譯。make命令會(huì)根據(jù)Makefile文件進(jìn)行編譯。編譯工作主要是調(diào)用編譯器(如gcc)將源碼編譯為可執(zhí)行文件,通常需要一些函數(shù)庫才能產(chǎn)生一個(gè)完整的可執(zhí)行文件。
編譯生成的二進(jìn)制文件存在于 src 目錄中,如果使用了動(dòng)態(tài)模塊,編譯產(chǎn)生的.so 文件,會(huì)存在于 objs 目錄中。
安裝
上面之所以沒有使用 make && make install,是因?yàn)槿绻巧?jí) nginx,則需要將二進(jìn)制文件拷貝到安裝目錄中。首次安裝 nginx時(shí),可以使用make install將編譯的文件復(fù)制到指定目錄中。
創(chuàng)建軟鏈接:sudo ln -s /usr/nginx-1.14.2/sbin/nginx /usr/bin/nginx
Nginx 的配置文件Nginx 的配置文件中,nginx.conf 為主配置文件,配置文件中,以#開始的行,或者是前面有若干空格或者 TAB 鍵,然后再跟#的行,都會(huì)被認(rèn)為是注釋。
Nginx 的配置文件是以 block(塊)形式組織,每個(gè) block 都是以一個(gè)塊名稱和一對(duì)大括號(hào)“{}”組成。block 分為幾個(gè)層級(jí),整個(gè)配置文件為 main 級(jí)別,即最大層級(jí);在 main 級(jí)別之下會(huì)有 event、http、mail 等層級(jí),而 http 中又會(huì)包含 server block,server block 中可以包含 location block。即塊之間是可以嵌套的,內(nèi)層 block 繼承外層 block。最基本的配置項(xiàng)語法格式是“配置項(xiàng)名 配置項(xiàng)值1 配置項(xiàng)值2 配置項(xiàng)值3 ... ”;
每個(gè)層級(jí)可以有自己的指令(Directive),例如 worker_processes 是一個(gè)main層級(jí)指令,它指定 Nginx 服務(wù)的 Worker 進(jìn)程數(shù)量。有的指令只能在一個(gè)層級(jí)中配置,如worker_processes 只能存在于 main 中,而有的指令可以存在于多個(gè)層級(jí),在這種情況下,子 block 會(huì)繼承 父 block 的配置,同時(shí)如果子block配置了與父block不同的指令,則會(huì)覆蓋掉父 block 的配置。指令的格式是“指令名 參數(shù)1 參數(shù)2 … 參數(shù)N;”,注意參數(shù)間可用任意數(shù)量空格分隔,最后要加分號(hào)。
下圖是 Nginx 配置文件的一般結(jié)構(gòu):
總結(jié)一下 Nginx 的配置語法:
配置文件由指令塊和指令組成
每條指令以“;”結(jié)尾,指令與參數(shù)間以空格分隔
指令塊以{}將多條指令組織在一起
include 語句允許組合多個(gè)配置文件以提升可維護(hù)性
使用“#”添加注釋,以提高可讀性
“$”使用變量
部分指令的參數(shù)支持正則表達(dá)式
Nginx 中時(shí)間參數(shù)的單位
時(shí)間單位 | 描述 |
---|---|
ms | milliseconds |
s | seconds |
m | minutes |
h | hours |
d | days |
w | weeks |
M | months(30 days) |
y | years(365 days) |
Nginx 中空間參數(shù)的單位
空間單位 | 描述 |
---|---|
不加任何單位 | bytes |
k/K | Kilobytes |
m/M | Meagbytes |
g/G | Gigabytes |
Nginx 服務(wù)運(yùn)行時(shí),需要加載幾個(gè)核心模塊和一個(gè)事件模塊,這些模塊運(yùn)行時(shí)所支持的配置項(xiàng)稱為基本配置;基本配置項(xiàng)大概分為四類:
用于調(diào)試、定位的配置項(xiàng)
正常運(yùn)行的必備配置項(xiàng)
優(yōu)化性能的配置項(xiàng)
事件類配置項(xiàng)
操作 Nginx 命令行功能 | 命令行 |
---|---|
一般格式 | nginx -s reload |
獲取幫助 | -?-h |
使用指定的配置文件 | -c |
指定配置指令 | -g |
執(zhí)行運(yùn)行的目錄 | -p |
發(fā)送信號(hào) | -s 立刻停止服務(wù) stop 優(yōu)雅停止服務(wù) quit 重載配置文件 reload 重新開始記錄日志文件 reopen |
測(cè)試配置文件語法 | -t -T |
打印 nginx 的版本和編譯信息 | -v -v |
這里需要說明的是:在修改配置文件后,使用nginx -s reload,在不停止服務(wù)的情況下,運(yùn)行修改后的配置文件。
熱部署 nginx(升級(jí))備份低版本的 nginx 二進(jìn)制文件cp ngnx nginx.old
將編譯好的新版本 nginx 二進(jìn)制文件拷貝替換正在運(yùn)行的 nginx 進(jìn)程所使用的二進(jìn)制文件
發(fā)送信號(hào)給舊 nginx master 進(jìn)程,讓其優(yōu)雅關(guān)閉進(jìn)程kill -WINCH [舊 ngix mater 進(jìn)程號(hào)]。當(dāng)前舊 nginx master還存在的原因是,如果新版本 nginx有問題,可以進(jìn)行版本回退。
日志切割將當(dāng)前的日志文件復(fù)制到系統(tǒng)的另外一個(gè)位置
執(zhí)行命令nginx -s reopen,nginx 會(huì)重新生成同名的日志文件
實(shí)際上日志切割會(huì)定期進(jìn)行,應(yīng)該使用 bash 腳本來實(shí)現(xiàn),并有 crond 定時(shí)執(zhí)行。
#!/bin/bash #Rotate the Nginx logs to prevent a single logfile from consuming too much disk space. LOGS_PATH=/usr/local/nginx/logs/history CUR_LOGS_PATH=/usr/local/nginx/logs YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) mv ${CUR_LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log mv ${CUR_LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log #向 Nginx 主進(jìn)程發(fā)送 USR1 信號(hào)。USR1 信號(hào)試重新打開日志文件 kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)使用 Nginx 搭建一個(gè)靜態(tài)服務(wù)器
將靜態(tài)網(wǎng)站部署在服務(wù)器中對(duì)外提供服務(wù),在 nginx 安裝目錄中創(chuàng)建一個(gè) dlib 目錄用于存放靜態(tài)網(wǎng)頁
配置 nginx,修改配置文件中的 server 中的監(jiān)聽端口listen為80或8080,location 后面定義的"/"表示所有請(qǐng)求,指定 url的后綴與服務(wù)端文件系統(tǒng)路徑一一對(duì)應(yīng),有兩種用法,一種是使用 root,一種是使用 alias,如使用 alias dlib/就表示 url/后面的路徑與 dlib/后面的路徑是一一對(duì)應(yīng)的。
節(jié)選配置文件:
user simon; ... http{ gzip on; ... server{ listen 8080; ... location / { alias dlib/; } } }
優(yōu)化:開啟壓縮
gzip on; #開啟 gzip 壓縮 gzip_min_length 1; #壓縮的最小單位,小于1字節(jié)不壓縮 gzip_comp_level 2; #壓縮級(jí)別 gzip_types text/plain application/x-javascript text/css application/xml text/javascript applicat ion/x-httpd-php image/jpep image/gif image/png; #針對(duì)指定類型進(jìn)行壓縮
壓縮前:
壓縮后:
功能:將文件系統(tǒng)通過web 網(wǎng)頁展示
通過 ngx_http_autoindex_module ,可以將以“/”結(jié)尾的 url 對(duì)應(yīng)到相應(yīng)文件系統(tǒng)目錄中,并列出。在 location 塊中加入“autoindex on;”即可開啟。
這里注意的是,當(dāng)打開的是首頁依然是一個(gè)web 頁面,只有 url 中繼續(xù)定義了查看靜態(tài)網(wǎng)站文件系統(tǒng)目錄中的某一目錄時(shí),才會(huì)將文件列出。
優(yōu)化:高并發(fā)時(shí),限制大文件的傳輸速率
在 location 塊中,設(shè)置“set $limit_rate 1k(http 模塊的內(nèi)置變量);”意思是限制 nginx 每秒傳輸1字節(jié)到瀏覽器中,
定義 nginx access 日志格式
定義日志格式需要命名,因?yàn)闀?huì)根據(jù)不同的場(chǎng)景記錄不同的日志信息,nginx 默認(rèn)的日志記錄名稱為 main,記錄了諸如客戶端 IP、客戶端名稱、時(shí)間、狀態(tài)碼等。
定義日志,在 http 配置塊下,使用 log_format,后面定義日志的名稱,然后使用nginx 中指定的變量定義需要記錄的日志格式。
定義日志存儲(chǔ)位置,使用 access_log,定義 access_log的位置決定了記錄日志的范圍,也就是說,當(dāng)在 server 配置塊中定義了 access_log,那么發(fā)往server 指定的端口或者域名的請(qǐng)求,都會(huì)使用 access_log定義的級(jí)別和位置進(jìn)行記錄。
使用 goaccess 可以使日志可視化。
總結(jié)如何編譯、安裝、升級(jí) Nginx
部署一個(gè)靜態(tài)網(wǎng)站常用的流程,以及 Nginx 的配置文件中相關(guān)指令的配置
參考Nginx 配置文件
NGINX systemd service file
systemd 添加自定義系統(tǒng)服務(wù)
附錄
預(yù)編譯參數(shù)
mkdir -p /var/cache/nginx ./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nobody --group=nobody --with-pcre --with-http_v2_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-threads --with-stream --with-stream_ssl_module
NGINX systemd service file
system 的有系統(tǒng)和用戶的區(qū)分:系統(tǒng)(/lib/systemd/system/)、用戶(/etc/lib/systemd/system/),一般系統(tǒng)管理員手工創(chuàng)建的單元文件建議存放在/etc/lib/systemd/system/目錄下。
在/lib/systemd/system/目錄下創(chuàng)建服務(wù)文件nginx.service
[Unit] Description=The NGINX HTTP and reverse proxy server #服務(wù)的簡單描述 Documentation=http://nginx.org/en/docs/ #服務(wù)文檔,可有可無 After=syslog.target network.target remote-fs.target nss-lookup.target #定義啟動(dòng)順序,After表示本服務(wù)在指定的服務(wù)之后啟動(dòng),另外類似的還有 Before、Requires本單元啟動(dòng),它需要的單元也會(huì)被啟動(dòng);它需要的單元停止了,這個(gè)單元也停止了、wants推薦使用,這個(gè)單元啟動(dòng)了,它需要的單元也會(huì)被啟動(dòng);它需要的單元被停止了,對(duì)本單元無影響。 [Service] Type=forking #systemd認(rèn)為當(dāng)該服務(wù)進(jìn)程fork,且父進(jìn)程退出后服務(wù)啟動(dòng)成功。對(duì)于常規(guī)的守護(hù)進(jìn)程(daemon),除非你確定此啟動(dòng)方式無法滿足需求,使用此類型啟動(dòng)即可。使用此啟動(dòng)類型應(yīng)同時(shí)指定 PIDFile=,以便systemd能夠跟蹤服務(wù)的主進(jìn)程。 PIDFile=/usr/nginx-1.14.2/logs/nginx.pid ExecStartPre=/usr/bin/nginx -t ExecStart=/usr/bin/nginx ExecReload=/usr/sbin/nginx -s reload ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/40385.html
摘要:目前,我們看到的老蔣采用的部署的環(huán)境,在鏡像中配置,于是我們會(huì)稱作為。有沒有一件傻瓜式安裝工具腳本呢這里老蔣要推薦的來自國內(nèi)比較老牌且一直更新維護(hù)的一鍵安裝包,我們可以較為直觀且無人值守的安裝需要的網(wǎng)站服務(wù)器環(huán)境。如今我們建站較多的還是會(huì)選擇VPS云服務(wù)器,很少會(huì)去選擇虛擬主機(jī),固然前者有很多的優(yōu)點(diǎn)。不過相比虛擬主機(jī)不同的是,VPS云服務(wù)器需要我們自己配置WEB環(huán)境,而且我們較多的還是會(huì)選擇...
摘要:本文將介紹如何在一臺(tái)的云服務(wù)器上快速部署博客站點(diǎn),如何快速發(fā)布一篇博文并通過云服務(wù)器上的私有倉庫部署到服務(wù)器目錄下。此外,還要在云服務(wù)器上安裝和兩個(gè)必備的軟件包。在服務(wù)器上部署博客以下為文章正文。 推薦理由:Hexo 是用 Node.js 開發(fā)的一個(gè)靜態(tài)站點(diǎn)生成器(Static Site Generator),支持 Markdown 語法寫作,有著強(qiáng)大的插件系統(tǒng),而且性能優(yōu)異。下面我推...
摘要:文章也不例外,只有提交進(jìn)入正常狀態(tài),才會(huì)進(jìn)行渲染。提交并預(yù)覽首頁文章頁部署實(shí)例與子域名支持多實(shí)例,實(shí)例與網(wǎng)站子域名一一對(duì)應(yīng),不同實(shí)例的數(shù)據(jù)完全隔離。 介紹 Cabloy-CMS是什么 Cabloy-CMS是基于CabloyJS全棧業(yè)務(wù)開發(fā)框架開發(fā)的動(dòng)靜結(jié)合的CMS,可以快速構(gòu)建企業(yè)網(wǎng)站、博客、社區(qū)、商城等Web應(yīng)用。 在線演示 https://zhennann.com 特性 Cablo...
摘要:創(chuàng)建成功后進(jìn)入文件夾執(zhí)行執(zhí)行作用創(chuàng)建文件,維護(hù)項(xiàng)目的依賴文件解釋創(chuàng)建文件執(zhí)行作用用系統(tǒng)的編輯器打開文件。我的技術(shù)新群上一篇前后端分離項(xiàng)目實(shí)踐分析下一篇公司項(xiàng)目實(shí)踐 一、前言 前端如何獨(dú)立用nodeJs實(shí)現(xiàn)一個(gè)簡單的注冊(cè)、登錄功能,是不是只用nodejs+sql就可以了?其實(shí)是可以實(shí)現(xiàn),但離實(shí)際應(yīng)用還有距離,那要怎么做才是實(shí)際可用的。 網(wǎng)上有很多nodeJs的示例,包括和 sql /...
閱讀 1911·2021-10-20 13:49
閱讀 1432·2019-08-30 15:52
閱讀 2920·2019-08-29 16:37
閱讀 1096·2019-08-29 10:55
閱讀 3137·2019-08-26 12:14
閱讀 1715·2019-08-23 17:06
閱讀 3294·2019-08-23 16:59
閱讀 2603·2019-08-23 15:42