Nginx學(xué)習(xí):HTTP核心模塊(一)簡單搭建
前面就說過了,HTTP 模塊是整個 Nginx 中最核心的模塊。在這其中,它又有一部分最核心的模塊,其實也就是在編譯安裝的時候,我們不裝任何擴(kuò)展就自帶的模塊。這一部分模塊就像是基本的 PHP 語法一樣,是最基礎(chǔ)的,也是我們最需要重點掌握的內(nèi)容。
今天先入個門,搭起簡單的一套 Web 服務(wù),讓 Nginx 可用就行了。內(nèi)容不復(fù)雜,但如果是初學(xué)者,那一定要跟著動手練練哦。即使是做了幾年的老油條了,如果你對 Nginx 也僅限于 寶塔 之類的面板配置的話,那也最好一起動手玩玩哦。
HTTP模塊
在 Nginx 中,除了核心模塊之外,其它模塊之間的劃分就是通過命令標(biāo)識與一對花括號來體現(xiàn)的,我們上回學(xué)習(xí)到的事件模塊就是在 events 中進(jìn)行配置。其實很像我們在編程語言中的作用域的感覺。比如在 HTTP 模塊中,所有的配置指令都是在下面這個 http 指令模塊中。
http?{?...?}
它就是為HTTP服務(wù)器提供配置上下文的,后續(xù)我們要學(xué)習(xí)的所有和 HTTP 相關(guān)的配置指令都是在這個 http 下面進(jìn)行配置的。也就是說,馬上要學(xué)習(xí)的內(nèi)容,基本全是在這個 http 內(nèi)部的配置指令。
今天是第一篇,所以咱們還是先搭起來一個簡單的服務(wù)器。
簡單搭建起來一個服務(wù)器
只需要寫下下面這些配置,就可以運行起來一個標(biāo)準(zhǔn)的 Web HTTP 靜態(tài)服務(wù)器了。
worker_processes??1;
events?{
????worker_connections??1024;
}
http?{
????include???????mime.types;
????default_type??application/octet-stream;
????sendfile????????on;
????keepalive_timeout??65;
????server?{
????????listen???????80;
????????server_name??localhost;
????????location?/?{
????????????root???html;
????????????index??index.html?index.htm;
????????}
????????error_page???500?502?503?504??/50x.html;
????????location?=?/50x.html?{
????????????root???html;
????????}
????}
}
這個配置其實就是我通過?cat nginx.conf.default | grep -Ev '^$|#'
?去除掉 nginx.conf.default 這自帶的默認(rèn)配置文件的注釋和空格所得到的結(jié)果。我們可以把這部分內(nèi)容保存到另一個文件中,比如我就起名為 nginx.conf-first.conf 。
接下來,關(guān)閉正在運行的 Nginx ,還記得之前命令行學(xué)過的內(nèi)容吧。
nginx?-s?quit
然后使用我們這個新的配置文件來啟動。
nginx?-c?/etc/nginx/nginx.conf-first.conf
為啥不直接用自帶的原始的那個 nginx.conf 文件呢?其實如果是剛裝好的 Nginx ,那么 nginx.conf 文件和上面的配置內(nèi)容是一模一樣的,只是有注釋而已。用默認(rèn)的 nginx.conf 文件也可以,但是在寫文章的時候我對那個默認(rèn)的配置文件已經(jīng)做了很多更改,所以暫時我不想動它。正好也順便復(fù)習(xí)一下之前學(xué)習(xí)的命令行相關(guān)的內(nèi)容嘛。同時也證明一下,啟動 nginx 的時候,具體使用哪個配置文件是我們可以自己指定的,就像 Reids 那些一樣。
好了,現(xiàn)在我們使用的就是這個新的配置文件了。大家可以訪問一下試試。
基本模塊
在 http 中,最基礎(chǔ)的就是 server 模塊,它代表一個虛擬主機(jī),下篇文章我們就來重點介紹它。在 http 中,一定要有一個虛擬主機(jī),要不就不知道訪問誰了。
另一個就是 location 模塊,它其實是在 server 之下的,用于指定路徑的訪問。一般最少都會有一個?location /
?的配置,這一部分內(nèi)容我們將在下下篇文章學(xué)習(xí),也就是講完 Server 之后。
這兩塊是 Http 模塊中最重要的兩部分內(nèi)容。
return 指令
這個指令是屬于重寫 Rewrite 模塊的,不在 HTTP 的核心模塊中,未來我們學(xué)習(xí)到相關(guān)的模塊時才會詳細(xì)的學(xué)習(xí),這里先只是簡單的介紹一下,因為它對于我們的調(diào)試非常有用。
………………
location?/?{
??root???html;
??index??index.html?index.htm;
}
location?/t1?{
?return?201?'return?test!';
}
………………
在?location /
?后面添加一個訪問路徑?/t1
,在這個路徑里面我們就使用了 return 指令。這個指令的參數(shù)可以指定一個 HTTP 狀態(tài)碼,后面可以可選地返回一個文本內(nèi)容或 URL 鏈接。對于調(diào)試來說,我們可能會更多地使用文本內(nèi)容。
現(xiàn)在大家需要重載服務(wù)配置,這回可不能直接就?nginx -s reload
?了,需要把配置文件參數(shù)也帶上?nginx -c /etc/nginx/nginx.conf-first.conf -s reload
?。不帶會怎樣?大家自己試試唄。然后就可以訪問上面配置的鏈接,看看狀態(tài)碼是不是 201 ,響應(yīng)體輸出的內(nèi)容是不是 return test! 。
連接 PHP
這個連接 PHP 的配置,對于我們大部分 PHPer 來說應(yīng)該非常熟悉了。但對于使用其它語言的,可能會用得比較少。其實這套配置在默認(rèn)的 nginx.conf.default 和 nginx.conf 中已經(jīng)給出了。我們復(fù)制過來就好。
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
這個 location 使用了正則,后面學(xué)習(xí)的時候再詳細(xì)說,意思就是所有以 .php 結(jié)尾的文件,走這個 location 。在這里,我們需要先修改一個地方,就是 fastcgi_pass ,表示連接 PHP-FPM 的方式。之前在?了解PHP-FPMhttps://mp.weixin.qq.com/s/NUpDnfYfbPuWmal4Am3lsg?這篇文章中我們就已經(jīng)介紹過了 UnixSocket 和 TCP 兩種連接方式的區(qū)別。因此,要根據(jù)你在當(dāng)前服務(wù)器上安裝的 PHP-FPM 的配置來進(jìn)行配置。比如我這里使用的就是 UnixSocket 方式,sock 文件在 /var/sock/php-fpm/www.sock 。因此,最終的配置就是修改一下這里。
location?~?\.php$?{
????…………
????fastcgi_pass???unix:/var/sock/php-fpm/www.sock;
????…………
}
接下來,在程序安裝目錄的 html 目錄下新建一個 script 目錄(我這里是 /usr/local/nginx/html ),里面放一個 1.php 文件,文件內(nèi)容就簡單地打印一個?$_SERVER
?的內(nèi)容好了。
<?php
print_r($_SERVER);
現(xiàn)在訪問一下 /1.php ,不對呀,F(xiàn)ile not found. 錯誤出現(xiàn)了。這是啥情況?其實呀,還有一個地方被我們忽略了,那就是 fastcgi_param SCRIPT_FILENAME 這一行,默認(rèn)它是 /scripts/$fastcgi_script_name。表示的是 FastCGI的腳本目錄是 /scripts 目錄下的文件,$fastcgi_script_name?是一個 Nginx 變量,表示的是具體的腳本名稱,也就是 1.php 。合起來的話,就是讓 FastCGI 去執(zhí)行 /srcipts/1.php 這個文件。很明顯,這個文件不存在呀,我們創(chuàng)建的文件路徑應(yīng)該是 /usr/local/nginx/html/scripts/1.php 嘛。
這里的修改其實很簡單,再加一個變量?$document_root
?,它會獲得 root 配置所指定的目錄的絕對路徑,即使我們在上面的配置中指定的 root 是一個相對路徑,它也會返回完整的 /usr/local/nginx/ 目錄。好了,修改一下這里。
location?~?\.php$?{
????…………
????fastcgi_param??SCRIPT_FILENAME??$document_root/scripts$fastcgi_script_name;
????…………
}
現(xiàn)在重載配置之后再訪問一下,看看是不是正常顯示 PHP 輸出的內(nèi)容了。
目錄權(quán)限問題
前面的測試,不管添加的文件,還是 html 這個目錄,權(quán)限全是 root 用戶的,并且文件權(quán)限也只有 644 。但是大家在日常使用時,更喜歡將 Nginx 的項目根目錄設(shè)置為 www 或者 nginx 之類的用戶,也就是跟我們在 Nginx 設(shè)置的?user
?配置中使用相同的用戶。其實這么做是對的,但是,并不是說一定要這個指定的用戶才能運行。Nginx 運行靜態(tài)或者動態(tài)文件,只需要所有父目錄為755權(quán)限,文件為 644 權(quán)限就可以了?;蛘邠Q句話說,只要有 r 這個讀權(quán)限就可以。但是,這種權(quán)限如果都是 root 用戶的話,那么 www 之類的用戶就沒法寫入,而且目錄用戶給的確實太大。做為標(biāo)準(zhǔn)開發(fā)的話,通常還是會改成 www 之類的標(biāo)準(zhǔn)用戶。
當(dāng)然,這個用戶名不是完全一定要用 www 之類的,你完全可以指定自己喜歡的用戶名,不過需要注意的是要設(shè)置成 nologin 的,而且 Nginx 和 PHP-FPM 都要配置成一樣的。這樣才能避免因為權(quán)限而產(chǎn)生的各種問題。
總結(jié)
比較簡單吧?非常入門。但是對于純?nèi)腴T的新手來說可能也會比較懵圈,另外我也沒講過 Nginx 的安裝,這一部分的內(nèi)容大家可以在網(wǎng)上搜搜,不管是視頻還是文章,簡直不要太多了。推薦的還是手動編譯安裝一下,將來學(xué)完了日常在工作中不管是 yum 還是面板工具之類的都沒問題。但是打基礎(chǔ)階段還是用笨方法吧。文章來源:http://www.zghlxwxcb.cn/news/detail-521076.html
好了,接下來就進(jìn)入到我們第一個非常核心的部分,那就是 Server 模塊的學(xué)習(xí)。文章來源地址http://www.zghlxwxcb.cn/news/detail-521076.html
到了這里,關(guān)于【Nginx04】Nginx學(xué)習(xí):HTTP核心模塊(一)簡單搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!