国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Nginx(1)-創建一個靜態 Web 站點

simpleapples / 849人閱讀

摘要:的配置文件是以塊形式組織,每個都是以一個塊名稱和一對大括號組成。這里注意的是,當打開的是首頁依然是一個頁面,只有中繼續定義了查看靜態網站文件系統目錄中的某一目錄時,才會將文件列出。使用此啟動類型應同時指定,以便能夠跟蹤服務的主進程。

初識Nginx

Nginx 的三個主要應用場景:

靜態資源服務:通過本地文件系統提供服務

反向代理服務:緩存加速與負載均衡

API服務:OpenResty

Nginx 背景和優點:

互聯網的數據量快速增長、摩爾定律的性能提升以及低效的 Apache(一個連接對應一個進程)促使 Nginx 的出現。

Nginx 的優點

高并發、高性能:32核64G 內存可以處理數千萬并發連接

可擴展性:得益于模塊化設計

高可靠性:持續不間斷運行數年

熱部署:不停止服務情況下,升級 Nginx

BSD 許可證

Nginx 的組成

Nginx 二進制可執行文件:由各模塊源碼編譯出的一個文件

Nginx.conf 配置文件:控制 nginx 的行為

access.log 訪問日志:記錄每一條 http 請求信息

error.log 錯誤日志:定位問題

Nginx 的版本發布

開源版本的 Nginx 中,奇數版本的 Nginx 如1.15.x 是 Mainline 主干版本,它會有新的功能,但可能并不穩定,偶數版本如1.14.x,是Stable 穩定版本。每個版本的 CHANGES 中,包含三部分:Feature新增功能、Bugfix 修復 bug、Change重構。

編譯 Nginx

安裝 Nginx 的方法主要用兩種:編譯 Nginx 或者直接安裝二進制 nginx。二進制格式的 Nginx 中模塊已經編譯,但并不是每一個模塊(功能)都開啟(被編譯),一些第三方模塊,同樣包含強大的功能就無法編譯到二進制 Nginx 中。自主編譯 nginx 可以根據自己的需求合理開啟需要編譯的模塊。

下載 Nginx

下載你需要的 Nginx 版本,并解壓縮。解壓縮 Nginx 的源碼包后,包含6個目錄和5個文件

auto:有四個子目錄,用于編譯的 cc、lib庫目錄 lib、判斷操作系統的 os、types 和19個文件用于輔助 configure判斷當前系統支持哪些模塊以及特性

conf:示例文件,安裝成功后,會將此目錄中的內容拷貝到安裝目錄

configure:執行編譯前的必備動作,生成中間文件

contrib:提供兩個 perl 腳本和一個vim 配置文件用于高亮顯示 nginx 的配置文件,文件放置于~/.vim/中:cp -r contrib/vim/* ~/.vim/

html:提供兩個標準 html 文件 index.html 和50X.html

src:源碼目錄

Configure

獲取支持的的參數使用./configure --help,編譯時支持的參數有三類:

指定 Nginx 各種文件的安裝位置;

確定開啟和關閉的模塊。使用 with 開頭的需要手動開啟,使用 without 的默認會編譯到 nginx 中,指定即可取消編譯該模塊;

指定 nginx 的安裝過程中使用的特殊參數,如 c 編譯器的路徑等。

執行./configure --prefix=/usr/local/nginx檢查系統環境是否符合滿足安裝要求,并將定義好的安裝配置信息和系統環境信息寫入Makefile文件中。 Makefile 文件包含了如何編譯、啟用哪些功能、安裝路徑等信息。

在預編譯過程中,可以出現的錯誤大部分是因為軟件包的缺失。編譯 Nginx 需要依賴的軟件包關系有:

yum install -y gcc gcc-c++ autoconf automake make /
yum install -y pcre pcre-devel /
yum install -y zlib zlib-devel

預編譯后,會生成 objs 目錄和 Makefile 文件

編譯

執行make命令進行編譯。make命令會根據Makefile文件進行編譯。編譯工作主要是調用編譯器(如gcc)將源碼編譯為可執行文件,通常需要一些函數庫才能產生一個完整的可執行文件。

編譯生成的二進制文件存在于 src 目錄中,如果使用了動態模塊,編譯產生的.so 文件,會存在于 objs 目錄中。

安裝

上面之所以沒有使用 make && make install,是因為如果是升級 nginx,則需要將二進制文件拷貝到安裝目錄中。首次安裝 nginx時,可以使用make install將編譯的文件復制到指定目錄中。

創建軟鏈接:sudo ln -s /usr/nginx-1.14.2/sbin/nginx /usr/bin/nginx

Nginx 的配置文件

Nginx 的配置文件中,nginx.conf 為主配置文件,配置文件中,以#開始的行,或者是前面有若干空格或者 TAB 鍵,然后再跟#的行,都會被認為是注釋。

Nginx 的配置文件是以 block(塊)形式組織,每個 block 都是以一個塊名稱和一對大括號“{}”組成。block 分為幾個層級,整個配置文件為 main 級別,即最大層級;在 main 級別之下會有 event、http、mail 等層級,而 http 中又會包含 server block,server block 中可以包含 location block。即塊之間是可以嵌套的,內層 block 繼承外層 block。最基本的配置項語法格式是“配置項名 配置項值1 配置項值2 配置項值3 ... ”;

每個層級可以有自己的指令(Directive),例如 worker_processes 是一個main層級指令,它指定 Nginx 服務的 Worker 進程數量。有的指令只能在一個層級中配置,如worker_processes 只能存在于 main 中,而有的指令可以存在于多個層級,在這種情況下,子 block 會繼承 父 block 的配置,同時如果子block配置了與父block不同的指令,則會覆蓋掉父 block 的配置。指令的格式是“指令名 參數1 參數2 … 參數N;”,注意參數間可用任意數量空格分隔,最后要加分號。

下圖是 Nginx 配置文件的一般結構:

總結一下 Nginx 的配置語法:

配置文件由指令塊和指令組成

每條指令以“;”結尾,指令與參數間以空格分隔

指令塊以{}將多條指令組織在一起

include 語句允許組合多個配置文件以提升可維護性

使用“#”添加注釋,以提高可讀性

“$”使用變量

部分指令的參數支持正則表達式

Nginx 中時間參數的單位

時間單位 描述
ms milliseconds
s seconds
m minutes
h hours
d days
w weeks
M months(30 days)
y years(365 days)

Nginx 中空間參數的單位

空間單位 描述
不加任何單位 bytes
k/K Kilobytes
m/M Meagbytes
g/G Gigabytes

Nginx 服務運行時,需要加載幾個核心模塊和一個事件模塊,這些模塊運行時所支持的配置項稱為基本配置;基本配置項大概分為四類:

用于調試、定位的配置項

正常運行的必備配置項

優化性能的配置項

事件類配置項

操作 Nginx 命令行
功能 命令行
一般格式 nginx -s reload
獲取幫助 -?-h
使用指定的配置文件 -c
指定配置指令 -g
執行運行的目錄 -p
發送信號 -s
立刻停止服務 stop
優雅停止服務 quit
重載配置文件 reload
重新開始記錄日志文件 reopen
測試配置文件語法 -t -T
打印 nginx 的版本和編譯信息 -v -v

這里需要說明的是:在修改配置文件后,使用nginx -s reload,在不停止服務的情況下,運行修改后的配置文件。

熱部署 nginx(升級)

備份低版本的 nginx 二進制文件cp ngnx nginx.old

將編譯好的新版本 nginx 二進制文件拷貝替換正在運行的 nginx 進程所使用的二進制文件

發送信號給舊 nginx master 進程,讓其優雅關閉進程kill -WINCH [舊 ngix mater 進程號]。當前舊 nginx master還存在的原因是,如果新版本 nginx有問題,可以進行版本回退。

日志切割

將當前的日志文件復制到系統的另外一個位置

執行命令nginx -s reopen,nginx 會重新生成同名的日志文件

實際上日志切割會定期進行,應該使用 bash 腳本來實現,并有 crond 定時執行。

#!/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 主進程發送 USR1 信號。USR1 信號試重新打開日志文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
使用 Nginx 搭建一個靜態服務器

將靜態網站部署在服務器中對外提供服務,在 nginx 安裝目錄中創建一個 dlib 目錄用于存放靜態網頁

配置 nginx,修改配置文件中的 server 中的監聽端口listen為80或8080,location 后面定義的"/"表示所有請求,指定 url的后綴與服務端文件系統路徑一一對應,有兩種用法,一種是使用 root,一種是使用 alias,如使用 alias dlib/就表示 url/后面的路徑與 dlib/后面的路徑是一一對應的。

節選配置文件:

user  simon;
...
http{
    gzip on;
    ...
    server{
        listen 8080;
        ...
        location / {
            alias dlib/;
        }
    }
}

優化:開啟壓縮

gzip  on; #開啟 gzip 壓縮
gzip_min_length 1; #壓縮的最小單位,小于1字節不壓縮
gzip_comp_level 2; #壓縮級別
gzip_types text/plain application/x-javascript text/css application/xml text/javascript applicat
ion/x-httpd-php image/jpep image/gif image/png; #針對指定類型進行壓縮

壓縮前:

壓縮后:

功能:將文件系統通過web 網頁展示

通過 ngx_http_autoindex_module ,可以將以“/”結尾的 url 對應到相應文件系統目錄中,并列出。在 location 塊中加入“autoindex on;”即可開啟。

這里注意的是,當打開的是首頁依然是一個web 頁面,只有 url 中繼續定義了查看靜態網站文件系統目錄中的某一目錄時,才會將文件列出。

優化:高并發時,限制大文件的傳輸速率

在 location 塊中,設置“set $limit_rate 1k(http 模塊的內置變量);”意思是限制 nginx 每秒傳輸1字節到瀏覽器中,

定義 nginx access 日志格式

定義日志格式需要命名,因為會根據不同的場景記錄不同的日志信息,nginx 默認的日志記錄名稱為 main,記錄了諸如客戶端 IP、客戶端名稱、時間、狀態碼等。

定義日志,在 http 配置塊下,使用 log_format,后面定義日志的名稱,然后使用nginx 中指定的變量定義需要記錄的日志格式。

定義日志存儲位置,使用 access_log,定義 access_log的位置決定了記錄日志的范圍,也就是說,當在 server 配置塊中定義了 access_log,那么發往server 指定的端口或者域名的請求,都會使用 access_log定義的級別和位置進行記錄。

使用 goaccess 可以使日志可視化。

總結

如何編譯、安裝、升級 Nginx

部署一個靜態網站常用的流程,以及 Nginx 的配置文件中相關指令的配置

參考

Nginx 配置文件

NGINX systemd service file

systemd 添加自定義系統服務

附錄

預編譯參數

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 的有系統和用戶的區分:系統(/lib/systemd/system/)、用戶(/etc/lib/systemd/system/),一般系統管理員手工創建的單元文件建議存放在/etc/lib/systemd/system/目錄下。

在/lib/systemd/system/目錄下創建服務文件nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server #服務的簡單描述
Documentation=http://nginx.org/en/docs/ #服務文檔,可有可無
After=syslog.target network.target remote-fs.target nss-lookup.target
#定義啟動順序,After表示本服務在指定的服務之后啟動,另外類似的還有 Before、Requires本單元啟動,它需要的單元也會被啟動;它需要的單元停止了,這個單元也停止了、wants推薦使用,這個單元啟動了,它需要的單元也會被啟動;它需要的單元被停止了,對本單元無影響。

[Service]
Type=forking 
#systemd認為當該服務進程fork,且父進程退出后服務啟動成功。對于常規的守護進程(daemon),除非你確定此啟動方式無法滿足需求,使用此類型啟動即可。使用此啟動類型應同時指定 PIDFile=,以便systemd能夠跟蹤服務的主進程。
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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/40385.html

相關文章

  • 一鍵安裝LNMP或LAMP Web環境實現Linux服務器部署 PHP MySQL Nginx/Ap

    摘要:目前,我們看到的老蔣采用的部署的環境,在鏡像中配置,于是我們會稱作為。有沒有一件傻瓜式安裝工具腳本呢這里老蔣要推薦的來自國內比較老牌且一直更新維護的一鍵安裝包,我們可以較為直觀且無人值守的安裝需要的網站服務器環境。如今我們建站較多的還是會選擇VPS云服務器,很少會去選擇虛擬主機,固然前者有很多的優點。不過相比虛擬主機不同的是,VPS云服務器需要我們自己配置WEB環境,而且我們較多的還是會選擇...

    IntMain 評論0 收藏0
  • 在 Ubuntu 14.04 服務器上部署 Hexo 博客

    摘要:本文將介紹如何在一臺的云服務器上快速部署博客站點,如何快速發布一篇博文并通過云服務器上的私有倉庫部署到服務器目錄下。此外,還要在云服務器上安裝和兩個必備的軟件包。在服務器上部署博客以下為文章正文。 推薦理由:Hexo 是用 Node.js 開發的一個靜態站點生成器(Static Site Generator),支持 Markdown 語法寫作,有著強大的插件系統,而且性能優異。下面我推...

    cyqian 評論0 收藏0
  • Cabloy-CMS:動靜結合,解決Hexo痛點問題

    摘要:文章也不例外,只有提交進入正常狀態,才會進行渲染。提交并預覽首頁文章頁部署實例與子域名支持多實例,實例與網站子域名一一對應,不同實例的數據完全隔離。 介紹 Cabloy-CMS是什么 Cabloy-CMS是基于CabloyJS全棧業務開發框架開發的動靜結合的CMS,可以快速構建企業網站、博客、社區、商城等Web應用。 在線演示 https://zhennann.com 特性 Cablo...

    alin 評論0 收藏0
  • 公司項目NODEJS實踐0.1[ ubuntu,nodejs,nginx...]

    摘要:創建成功后進入文件夾執行執行作用創建文件,維護項目的依賴文件解釋創建文件執行作用用系統的編輯器打開文件。我的技術新群上一篇前后端分離項目實踐分析下一篇公司項目實踐 一、前言 前端如何獨立用nodeJs實現一個簡單的注冊、登錄功能,是不是只用nodejs+sql就可以了?其實是可以實現,但離實際應用還有距離,那要怎么做才是實際可用的。 網上有很多nodeJs的示例,包括和 sql /...

    cppprimer 評論0 收藏0

發表評論

0條評論

simpleapples

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<