Nginx篇01——基本安裝配置和靜態(tài)頁面設(shè)置

image

nginx的編譯安裝、添加模塊、yum安裝哎榴、簡單配置托慨、默認目錄作用和靜態(tài)頁面配置坞琴。

0柬泽、編譯安裝nginx

0.1 準備工作

這里我們使用nginx的mainline版本的1.17.9來進行編譯安裝窥翩,nginx各版本的官網(wǎng)下載地址:http://nginx.org/en/download.html

首先我們下載并解壓nginx源碼

wget http://nginx.org/download/nginx-1.17.9.tar.gz
tar -zxvf nginx-1.17.9.tar.gz

在編譯安裝之前我們還需要先安裝幾個別的軟件:

  • GCC/G++編譯器:GCC(GNU Compiler Collection)可用來編譯C語言程序范咨,如果你還需要使用C++來編寫Nginx HTTP模塊熊楼,這時還需要用到G++編譯器了峦睡。

  • PCRE庫:PCRE(Perl Compatible Regular Expressions辣往,Perl兼容正則表達式)是由Philip Hazel開發(fā)的函數(shù)庫驼侠,目前為很多軟件所使用姿鸿,該庫支持正則表達式。實際上在nginx的很多高級配置中都會用到正則表達式倒源,因此我們在編譯Nginx時盡量先把PCRE庫編譯進Nginx苛预。

  • zlib庫:zlib庫用于對HTTP包的內(nèi)容做gzip格式的壓縮,我們可以在nginx.conf里配置了gzip on笋熬,并指定對于某些類型(content-type)的HTTP響應(yīng)使用gzip來進行壓縮以減少網(wǎng)絡(luò)傳輸量热某。

  • OpenSSL開發(fā)庫:HTTPS必備,這個就不用解釋了

    上面提到的庫我們都可以使用yum來進行安裝:

yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

# pcre-devel是使用PCRE做二次開發(fā)時所需要的開發(fā)庫胳螟,包括頭文件等昔馋,這也是編譯Nginx所必須使用的。
# 同理糖耸,zlib是直接使用的庫秘遏,zlib-devel是二次開發(fā)所需要的庫。

Nginx是高度自由化的Web服務(wù)器蔬捷,它的功能是由許多模塊來支持的垄提。而這些模塊可根據(jù)我們的使用需求來定制,如果某些模塊不需要使用則完全不必理會它周拐。同樣铡俐,如果使用了某個模塊,而這個模塊使用了一些類似zlib或OpenSSL等的第三方庫妥粟,那么就必須先安裝這些軟件审丘。

0.2 編譯安裝

我們進入nginx的目錄,輸入下面的指令可以查看各類的編譯參數(shù)勾给,或者在官網(wǎng)也可以看到:

./configure --help

我們這里使用的參數(shù)是:

./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module
image

這里我們可以看到滩报,我們在參數(shù)里面并沒有指定上面提到的幾個庫的目錄锅知,configure文件會默認系統(tǒng)已經(jīng)安裝的庫版本和目錄,當(dāng)然我們也可以手動指定某個庫的目錄來指定版本脓钾。

接下來進行make安裝:

make
make install

如無意外此時應(yīng)該已經(jīng)正常安裝好了售睹,我們到前面指定的安裝目錄看一下

image

注意這個時候我們?nèi)绻枰褂胣ginx需要指定這個安裝目錄,想要全局使用我們可以創(chuàng)建一個軟鏈接:

ln -s /usr/local/nginx/nginx /usr/sbin/nginx

0.3 添加模塊

同時可训,如果之后有需要用到的模塊而在編譯安裝的時候忘了安裝也沒關(guān)系昌妹,我們可以繼續(xù)編譯添加新模塊

首先我們需要查看已經(jīng)編譯的參數(shù):

[root@localhost ~]# nginx -V
nginx version: nginx/1.17.9
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module

需要注意上面的V是大寫的V

configure arguments: 這一欄里面我們就可以看到之前編譯的時候的參數(shù),對比上面的記錄我們可以看到是一模一樣的握截,然后我們會到之前下載的源碼目錄飞崖,注意是源碼的目錄不是安裝的目錄,然后添加上之前的編譯參數(shù)谨胞,再添加新的模塊固歪,

./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-http_v2_module --with-mail --with-mail_ssl_module

比如這里我們添加了http_v2mail胯努、mail_ssl三個模塊

如果想要添加第三方模塊的話牢裳,只需要使用--add-module=然后加上第三方模塊的路徑即可。

--add-module=/home/echo-nginx-module-0.61

最后我們的編譯參數(shù)是:

./configure \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--add-module=/home/echo-nginx-module-0.61

接著我們使用make安裝康聂,再查看目錄會發(fā)現(xiàn)原來的文件已經(jīng)被替換成*.default

make
make install
image

最后我們再確定一下是否安裝成功:

image

1贰健、yum安裝nginx

1.1 yum倉庫建立和安裝配置

centos自帶的repo中就有nginx,可以直接安裝恬汁,但是版本比較舊伶椿,想要使用yum進行安裝最新的穩(wěn)定版本,我們需要自行配置yum倉庫氓侧。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

默認情況下mainline版本是不會啟用的脊另,因此我們?nèi)绻枰惭bmainline版本的nginx則需要手動啟用這個repo。

yum install yum-utils
yum-config-manager --enable nginx-mainline
yum clean all
yum repolist
yum install nginx

安裝的時候需要注意這個列出信息中的repo應(yīng)該是我們剛剛新建的repo约巷。

image

安裝完成之后需要設(shè)置開機啟動和防火墻放行80端口偎痛,如果使用https還需要放行443端口。

systemctl enable nginx 
systemctl start nginx 
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --reload 

接下來我們可以測試一下安裝和啟動是否成功独郎。

nginx -v
curl 127.0.0.1
image

1.2 master和worker進程

使用ps命令查看進程踩麦,我們可以看到有一個master進程和一個worker進程,默認情況下氓癌,worker的進程數(shù)量為1谓谦,實際上我們可以根據(jù)具體需要對其進行修改。

ps -ef | grep nginx
image

在正式提供服務(wù)的產(chǎn)品環(huán)境下贪婉,部署Nginx時都是使用一個master進程來管理多個worker進程反粥,一般情況下,worker進程的數(shù)量與服務(wù)器上的CPU核心數(shù)相等。每一個worker進程都是繁忙的才顿,它們在真正地提供互聯(lián)網(wǎng)服務(wù)莫湘,master進程則很“清閑”,只負責(zé)監(jiān)控管理worker進程郑气。worker進程之間通過共享內(nèi)存幅垮、原子操作等一些進程間通信機制來實現(xiàn)各種功能。

image

2竣贪、nginx基本配置

2.1 nginx默認目錄

/etc/nginx/

這個是nginx服務(wù)器的默認配置目錄

image

/etc/nginx/nginx.conf

這個是nginx服務(wù)器的默認配置文件军洼,我們可以在這里對nginx的所有全局配置進行修改,包括線程數(shù)端口號等等演怎,同時在默認情況下它也包括了下述的/etc/nginx/conf.d/目錄中的所有配置文件。

/etc/nginx/conf.d/

這個目錄中包含的.conf配置文件主要用于單獨定義某個http網(wǎng)頁避乏,從而使得整個配置目錄文件的管理變得更加簡潔而清晰爷耀。

/var/log/nginx

這個目錄是默認的log日志目錄,主要有acces.logerror.log兩個文件拍皮,前者負責(zé)記錄每一個被訪問的記錄歹叮,后者負責(zé)記錄訪問中出現(xiàn)的錯誤。

image

2.2 nginx命令

輸入nginx -h即可查看所有指令铆帽,不需要特意去記憶咆耿,用多了就自然記住了。

image

3爹橱、nginx.conf文件

我們把整個全局配置文件拿出來分析一下:

user  nginx;
worker_processes  16;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

3.1 user

user指的是以哪個用戶來創(chuàng)建nginx的worker進程萨螺,master進程一般都是使用root用戶啟動,權(quán)限較大愧驱。

3.2 worker_processes

worker_processes則是nginx的worker進程數(shù)量慰技,一般與CPU的核心數(shù)量一致,這里我們設(shè)置為16组砚。

3.3 error_log

error_log是日志的存放位置和輸出等級吻商,等級的取值范圍是debuginfo糟红、notice艾帐、warnerror盆偿、crit柒爸、alertemerg陈肛,從左至右級別依次增大揍鸟。當(dāng)設(shè)定為一個級別時,大于或等于該級別的日志都會被輸出到記錄文件中,小于該級別的日志則不會輸出阳藻。這里默認設(shè)定的是warn級別晰奖,則warnerror腥泥、crit匾南、alertemerg級別的日志都會輸出蛔外。

如果設(shè)定的日志級別是debug蛆楞,則會輸出所有的日志,這樣數(shù)據(jù)量會很大夹厌,要確保存放日志的硬盤有足夠的空間豹爹,同時,如果需要開啟日志的debug功能矛纹,需要在編譯安裝的時候在configure時加入--with-debug配置項臂聋,如果不確定是否開啟了debug功能,可以輸入nginx -V查看所有的configure arguments或南。

3.4 pid

pidnginxmaster進程的pid文件孩等,理論上應(yīng)該和查找的nginx進程中master進程的PID以及worker進程的PPID一致。

image

3.5 塊配置

接下來的eventshttp都是屬于模塊或者塊采够。最基本的配置項語法格式為配置項名 配置項值1 配置項值2 … ;

  • 一個配置項以英文分號;結(jié)束肄方,中間的值使用空格隔開
  • 塊配置項由一個塊配置項名和一對大括號組成。
  • 塊配置項可以嵌套蹬癌,內(nèi)層塊直接繼承外層塊权她。
  • 當(dāng)內(nèi)外層塊中的配置發(fā)生沖突時,究竟是以內(nèi)層塊還是外層塊的配置為準冀瓦,取決于解析這個配置項的模塊伴奥。
  • 注釋部分使用井號

比如上面的log_format這個配置項,變量需要在前面加上美刀符號$翼闽,如果變量之間有空格拾徙,需要使用單引號或者雙引號避免語法錯誤,同時引號可以嵌套使用感局。同時需要注意的是尼啡,并不是所有的模塊都支持使用變量。

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

3.6 單位

當(dāng)指定空間大小時询微,可以使用的單位包括:

  • K或者k千字節(jié)(KiloByte崖瞭,KB)
  • M或者m兆字節(jié)(MegaByte,MB)

當(dāng)指定時間時撑毛,可以使用的單位包括:

  • ms(毫秒)
  • s(秒)
  • m(分鐘)
  • h(小時)
  • d(天)
  • w(周书聚,7天)
  • M(月,30天)
  • y(年,365天)

單位之間支持混合使用雌续,如1h30m即為90m如果不指定后綴斩个,那么默認使用s(秒)作為單位。

配置項后的值究竟是否可以使用這些單位驯杜,取決于解析該配置項的模塊受啥。如果這個模塊使用了Nginx框架提供的相應(yīng)解析配置項方法,那么配置項值才可以攜帶單位鸽心。

4滚局、nginx配置靜態(tài)頁面

接下來我們嘗試配置一個簡單的靜態(tài)頁面,使用vim對/etc/nginx/conf.d/default.conf進行修改顽频,需要注意的是默認情況下/etc/nginx/conf.d/下面的配置文件只要是.conf即可生效藤肢,前面的名稱并沒有特殊限制,所以最好根據(jù)文件的實際用途進行命名方便記憶和管理糯景。

接下來我們在/etc/hosts中將 www.example.com www.example.org www.example.net example.com example.org example.net的DNS解析手動指定為本機IP地址谤草,方便后面使用域名進行配置頁面

4.1 default_server

[root@localhost conf.d]# ll
總用量 16
-rw-r--r-- 1 root root 1093 3月   4 00:20 default.conf.bak
-rw-r--r-- 1 root root  158 3月  18 00:08 example.com.conf
-rw-r--r-- 1 root root  158 3月  18 00:09 example.net.conf
-rw-r--r-- 1 root root  173 3月  18 00:11 example.org.conf
[root@localhost conf.d]# cat example.*
server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        root   /var/www/html;
        index  example.com.html;
    }
}
server {
    listen 80;
    server_name example.net www.example.net;

    location / {
        root   /var/www/html;
        index  example.net.html;
    }
}
server {
    listen 80 default_server;
    server_name example.org www.example.org;

    location / {
        root   /var/www/html;
        index  example.org.html;
    }
}

這里我們可以看到上面配置了三個server塊,分別對應(yīng)三組域名莺奸,三組域名都是指向本機的IP地址,同樣都是監(jiān)聽的80端口冀宴,其中我們在第三個server塊中指定了default_server參數(shù)灭贷,此時我們訪問本機IP,返回的頁面就是我們指定了default_server參數(shù)的這個頁面略贮。

image

如果我們不指定default_server參數(shù)甚疟,返回的則是默認的第一個頁面。

image

4.2 location

location塊的默認語法如下逃延,官網(wǎng)文檔點這里览妖。

Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location

主要作用是根據(jù)請求URI設(shè)置配置,location可以由前綴字符串或正則表達式定義揽祥。

  • 正則表達式由前面的~*修飾符(不區(qū)分大小寫)或~修飾符(不區(qū)分大小寫)指定讽膏。
  • 優(yōu)先順序是,nginx首先檢查使用前綴字符串定義的位置(前綴位置)拄丰,其中府树,將選擇并記住具有最長匹配前綴的位置。
  • 然后按照在配置文件中出現(xiàn)的順序檢查正則表達式料按。
  • 正則表達式的搜索在第一個匹配項上終止奄侠,并使用相應(yīng)的配置。
  • 如果未找到與正則表達式匹配的內(nèi)容载矿,則使用前面記住的前綴位置的配置垄潮。

我們來看一下實例:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        root   /var/www/html;
        index  example.com.html;
    }
    
    location /images {
        root  /var/www;
    }
}

我們先來看一個server塊,這里我們可以看到里面包含了兩個location塊,在/var/www/html/var/www這兩個目錄下均有一個images文件夾弯洗,但是在www目錄下的images文件夾沒有images2.html這個文件旅急。

image

接著我們嘗試訪問:

image

可以看到因為我們在www目錄下的images文件夾沒有images2.html這個文件,所以在執(zhí)行curl example.com/images/images2.html的時候返回了404請求涂召。

所以我們可以得到結(jié)論坠非,當(dāng)訪問域名后面的目錄(如這里的/images/),如果在server塊里面單獨定義了一個相關(guān)的location塊果正,則只會在這個/images/目錄相關(guān)location塊定義的目錄中去查找炎码,不存在則返回404,并不會再去根目錄/location塊中的目錄中查找秋泳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末潦闲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子迫皱,更是在濱河造成了極大的恐慌歉闰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卓起,死亡現(xiàn)場離奇詭異和敬,居然都是意外死亡,警方通過查閱死者的電腦和手機戏阅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門昼弟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奕筐,你說我怎么就攤上這事舱痘。” “怎么了离赫?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵芭逝,是天一觀的道長。 經(jīng)常有香客問我渊胸,道長旬盯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任蹬刷,我火速辦了婚禮瓢捉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘办成。我一直安慰自己泡态,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布迂卢。 她就那樣靜靜地躺著某弦,像睡著了一般桐汤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上靶壮,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天怔毛,我揣著相機與錄音,去河邊找鬼腾降。 笑死拣度,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的螃壤。 我是一名探鬼主播抗果,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奸晴!你這毒婦竟也來了冤馏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤寄啼,失蹤者是張志新(化名)和其女友劉穎逮光,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墩划,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡涕刚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了乙帮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片副女。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚣旱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情戴陡,我是刑警寧澤塞绿,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站恤批,受9級特大地震影響异吻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喜庞,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一诀浪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧延都,春花似錦雷猪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽射沟。三九已至,卻和暖如春与境,著一層夾襖步出監(jiān)牢的瞬間验夯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工摔刁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挥转,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓共屈,卻偏偏與公主長得像绑谣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子趁俊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容