全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

nginx.conf配置方法詳細(xì)介紹

更新時(shí)間:2021-07-16 來(lái)源:黑馬程序員 瀏覽量:

從前面的內(nèi)容學(xué)習(xí)中,我們知道Nginx的核心配置文件默認(rèn)是放在/usr/local/nginx/conf/nginx.conf,這一節(jié),我們就來(lái)學(xué)習(xí)下nginx.conf的內(nèi)容和基本配置方法。

讀取Nginx自帶的Nginx配置文件,我們將其中的注釋部分【學(xué)習(xí)一個(gè)技術(shù)點(diǎn)就是在Nginx的配置文件中可以使用#來(lái)注釋】刪除掉后,就剩下下面內(nèi)容:

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;
        }
    }

}
指令名 指令值;  #全局塊,主要設(shè)置Nginx服務(wù)器整體運(yùn)行的配置指令

 #events塊,主要設(shè)置,Nginx服務(wù)器與用戶(hù)的網(wǎng)絡(luò)連接,這一部分對(duì)Nginx服務(wù)器的性能影響較大
events {     
    指令名 指令值;
}
#http塊,是Nginx服務(wù)器配置中的重要部分,代理、緩存、日志記錄、第三方模塊配置...             
http {      
    指令名 指令值;
    server { #server塊,是Nginx配置和虛擬主機(jī)相關(guān)的內(nèi)容
        指令名 指令值;
        location / { 
        #location塊,基于Nginx服務(wù)器接收請(qǐng)求字符串與location后面的值進(jìn)行匹配,對(duì)特定請(qǐng)求進(jìn)行處理
            指令名 指令值;
        }
    }
    ...
}

簡(jiǎn)單小結(jié)下:

nginx.conf配置文件中默認(rèn)有三大塊:全局塊、events塊、http塊。http塊中可以配置多個(gè)server塊,每個(gè)server塊又可以配置多個(gè)location塊。

全局塊

user指令

(1)user:用于配置運(yùn)行Nginx服務(wù)器的worker進(jìn)程的用戶(hù)和用戶(hù)組。

語(yǔ)法 user user [group]
默認(rèn)值 nobody
位置 全局塊

該屬性也可以在編譯的時(shí)候指定,語(yǔ)法如下./configure --user=user --group=group,如果兩個(gè)地方都進(jìn)行了設(shè)置,最終生效的是配置文件中的配置。

該指令的使用步驟:

(1)設(shè)置一個(gè)用戶(hù)信息"www"

user www;

(2)創(chuàng)建一個(gè)用戶(hù)

useradd www

(3)修改user屬性

user www

(4)創(chuàng)建/root/html/index.html頁(yè)面,添加如下內(nèi)容

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
<p><em>I am WWW</em></p>
</body>
</html>

(5)修改nginx.conf

location / {
	root   /root/html;
	index  index.html index.htm;
}

(6)測(cè)試啟動(dòng)訪問(wèn)

頁(yè)面會(huì)報(bào)403拒絕訪問(wèn)的錯(cuò)誤

(7)分析原因

因?yàn)楫?dāng)前用戶(hù)沒(méi)有訪問(wèn)/root/html目錄的權(quán)限

(8)將文件創(chuàng)建到 /home/www/html/index.html,修改配置

location / {
	root   /home/www/html;
	index  index.html index.htm;
}

(9)再次測(cè)試啟動(dòng)訪問(wèn)

能正常訪問(wèn)。

work process指令

master_process:用來(lái)指定是否開(kāi)啟工作進(jìn)程。

語(yǔ)法 master_process on|off;
默認(rèn)值 master_process on;
位置 全局塊

worker_processes:用于配置Nginx生成工作進(jìn)程的數(shù)量,這個(gè)是Nginx服務(wù)器實(shí)現(xiàn)并發(fā)處理服務(wù)的關(guān)鍵所在。理論上來(lái)說(shuō)workder process的值越大,可以支持的并發(fā)處理量也越多,但事實(shí)上這個(gè)值的設(shè)定是需要受到來(lái)自服務(wù)器自身的限制,建議將該值和服務(wù)器CPU的內(nèi)核數(shù)保存一致。

語(yǔ)法 worker_processes num/auto;
默認(rèn)值 1
位置 全局塊

如果將worker_processes設(shè)置成2,則會(huì)看到如下內(nèi)容:

nginx指令

其他指令

daemon:設(shè)定Nginx是否以守護(hù)進(jìn)程的方式啟動(dòng)。

守護(hù)式進(jìn)程是linux后臺(tái)執(zhí)行的一種服務(wù)進(jìn)程,特點(diǎn)是獨(dú)立于控制終端,不會(huì)隨著終端關(guān)閉而停止。

語(yǔ)法 daemon on|off;
默認(rèn)值 daemon on;
位置 全局塊

pid:用來(lái)配置Nginx當(dāng)前master進(jìn)程的進(jìn)程號(hào)ID存儲(chǔ)的文件路徑。

語(yǔ)法 pid file;
默認(rèn)值 默認(rèn)為:/usr/local/nginx/logs/nginx.pid
位置 全局塊

該屬性可以通過(guò)./configure --pid-path=PATH來(lái)指定

error_log:用來(lái)配置Nginx的錯(cuò)誤日志存放路徑

語(yǔ)法 include file;
默認(rèn)值 無(wú)
位置 any

events塊

(1)accept_mutex:用來(lái)設(shè)置Nginx網(wǎng)絡(luò)連接序列化

語(yǔ)法 error_log file [日志級(jí)別];
默認(rèn)值 error_log logs/error.log error;
位置 全局塊、httpserver、location

該屬性可以通過(guò)./configure --error-log-path=PATH來(lái)指定

其中日志級(jí)別的值有:debug|info|notice|warn|error|crit|alert|emerg,翻譯過(guò)來(lái)為試|信息|通知|警告|錯(cuò)誤|臨界|警報(bào)|緊急,這塊建議大家設(shè)置的時(shí)候不要設(shè)置成info以下的等級(jí),因?yàn)闀?huì)帶來(lái)大量的磁盤(pán)I/O消耗,影響Nginx的性能。

(5)include:用來(lái)引入其他配置文件,使Nginx的配置更加靈活

語(yǔ)法 accept_mutex on|off;
默認(rèn)值 accept_mutex on;
位置 events

這個(gè)配置主要可以用來(lái)解決常說(shuō)的"驚群"問(wèn)題。大致意思是在某一個(gè)時(shí)刻,客戶(hù)端發(fā)來(lái)一個(gè)請(qǐng)求連接,Nginx后臺(tái)是以多進(jìn)程的工作模式,也就是說(shuō)有多個(gè)worker進(jìn)程會(huì)被同時(shí)喚醒,但是最終只會(huì)有一個(gè)進(jìn)程可以獲取到連接,如果每次喚醒的進(jìn)程數(shù)目太多,就會(huì)影響Nginx的整體性能。如果將上述值設(shè)置為on(開(kāi)啟狀態(tài)),將會(huì)對(duì)多個(gè)Nginx進(jìn)程接收連接進(jìn)行序列號(hào),一個(gè)個(gè)來(lái)喚醒接收,就防止了多個(gè)進(jìn)程對(duì)連接的爭(zhēng)搶。

(2)multi_accept:用來(lái)設(shè)置是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接

語(yǔ)法 multi_accept on|off;
默認(rèn)值 multi_accept off;
位置 events

如果multi_accept被禁止了,nginx一個(gè)工作進(jìn)程只能同時(shí)接受一個(gè)新的連接。否則,一個(gè)工作進(jìn)程可以同時(shí)接受所有的新連接

(3)worker_connections:用來(lái)配置單個(gè)worker進(jìn)程最大的連接數(shù)

語(yǔ)法 worker_connections number;
默認(rèn)值 worker_commections 512;
位置 events


這里的連接數(shù)不僅僅包括和前端用戶(hù)建立的連接數(shù),而是包括所有可能的連接數(shù)。另外,number值不能大于操作系統(tǒng)支持打開(kāi)的最大文件句柄數(shù)量。

(4)use:用來(lái)設(shè)置Nginx服務(wù)器選擇哪種事件驅(qū)動(dòng)來(lái)處理網(wǎng)絡(luò)消息。

語(yǔ)法 use method;
默認(rèn)值 根據(jù)操作系統(tǒng)定
位置 events

注意:此處所選擇事件處理模型是Nginx優(yōu)化部分的一個(gè)重要內(nèi)容,method的可選值有select/poll/epoll/kqueue等,之前在準(zhǔn)備centos環(huán)境的時(shí)候,我們強(qiáng)調(diào)過(guò)要使用linux內(nèi)核在2.6以上,就是為了能使用epoll函數(shù)來(lái)優(yōu)化Nginx。

另外這些值的選擇,我們也可以在編譯的時(shí)候使用

--with-select_module、--without-select_module、

--with-poll_module、--without-poll_module來(lái)設(shè)置是否需要將對(duì)應(yīng)的事件驅(qū)動(dòng)模塊編譯到Nginx的內(nèi)核。

events指令配置實(shí)例

打開(kāi)Nginx的配置文件 nginx.conf,添加如下配置

events{
	accept_mutex on;
	multi_accept on;
	worker_commections 1024;
	use epoll;
}

啟動(dòng)測(cè)試

./nginx -t
./nginx -s reload

http塊

定義MIME-Type

我們都知道瀏覽器中可以顯示的內(nèi)容有HTML、XML、GIF等種類(lèi)繁多的文件、媒體等資源,瀏覽器為了區(qū)分這些資源,就需要使用MIME Type。所以說(shuō)MIME Type是網(wǎng)絡(luò)資源的媒體類(lèi)型。Nginx作為web服務(wù)器,也需要能夠識(shí)別前端請(qǐng)求的資源類(lèi)型。

在Nginx的配置文件中,默認(rèn)有兩行配置

include mime.types;
default_type application/octet-stream;

(1)default_type:用來(lái)配置Nginx響應(yīng)前端請(qǐng)求默認(rèn)的MIME類(lèi)型。

語(yǔ)法 default_type mime-type;
默認(rèn)值 default_type text/plain;
位置 httpserver、location

在default_type之前還有一句include mime.types,include之前我們已經(jīng)介紹過(guò),相當(dāng)于把mime.types文件中MIMT類(lèi)型與相關(guān)類(lèi)型文件的文件后綴名的對(duì)應(yīng)關(guān)系加入到當(dāng)前的配置文件中。

舉例來(lái)說(shuō)明:

有些時(shí)候請(qǐng)求某些接口的時(shí)候需要返回指定的文本字符串或者json字符串,如果邏輯非常簡(jiǎn)單或者干脆是固定的字符串,那么可以使用nginx快速實(shí)現(xiàn),這樣就不用編寫(xiě)程序響應(yīng)請(qǐng)求了,可以減少服務(wù)器資源占用并且響應(yīng)性能非???。

如何實(shí)現(xiàn):

location /get_text {
	#這里也可以設(shè)置成text/plain
    default_type text/html;
    return 200 "This is nginx's text";
}
location /get_json{
    default_type application/json;
    return 200 '{"name":"TOM","age":18}';
}

自定義服務(wù)日志

Nginx中日志的類(lèi)型分access.log、error.log。

access.log:用來(lái)記錄用戶(hù)所有的訪問(wèn)請(qǐng)求。

error.log:記錄nginx本身運(yùn)行時(shí)的錯(cuò)誤信息,不會(huì)記錄用戶(hù)的訪問(wèn)請(qǐng)求。

Nginx服務(wù)器支持對(duì)服務(wù)日志的格式、大小、輸出等進(jìn)行設(shè)置,需要使用到兩個(gè)指令,分別是access_log和log_format指令。

(1)access_log:用來(lái)設(shè)置用戶(hù)訪問(wèn)日志的相關(guān)屬性。

語(yǔ)法 access_log path[format[buffer=size]]
默認(rèn)值 access_log logs/access.log combined;
位置 http, server, location

(2)log_format:用來(lái)指定日志的輸出格式。

語(yǔ)法 log_format name [escape=default|json|none] string....;
默認(rèn)值 log_format combined "...";
位置 http

其他配置指令

(1)sendfile:用來(lái)設(shè)置Nginx服務(wù)器是否使用sendfile()傳輸文件,該屬性可以大大提高Nginx處理靜態(tài)資源的性能

語(yǔ)法 sendfile on|off;
默認(rèn)值 sendfile off;
位置 http、server、location

(2)keepalive_timeout:用來(lái)設(shè)置長(zhǎng)連接的超時(shí)時(shí)間。

為什么要使用keepalive?

我們都知道HTTP是一種無(wú)狀態(tài)協(xié)議,客戶(hù)端向服務(wù)端發(fā)送一個(gè)TCP請(qǐng)求,服務(wù)端響應(yīng)完畢后斷開(kāi)連接。

如何客戶(hù)端向服務(wù)端發(fā)送多個(gè)請(qǐng)求,每個(gè)請(qǐng)求都需要重新創(chuàng)建一次連接,效率相對(duì)來(lái)說(shuō)比較多,使用keepalive模式,可以告訴服務(wù)器端在處理完一個(gè)請(qǐng)求后保持這個(gè)TCP連接的打開(kāi)狀態(tài),若接收到來(lái)自這個(gè)客戶(hù)端的其他請(qǐng)求,服務(wù)端就會(huì)利用這個(gè)未被關(guān)閉的連接,而不需要重新創(chuàng)建一個(gè)新連接,提升效率,但是這個(gè)連接也不能一直保持,這樣的話,連接如果過(guò)多,也會(huì)是服務(wù)端的性能下降,這個(gè)時(shí)候就需要我們進(jìn)行設(shè)置其的超時(shí)時(shí)間。

語(yǔ)法 keepalive_timeout time;
默認(rèn)值 keepalive_timeout 75s;
位置 httpserver、location

(3)keepalive_requests:用來(lái)設(shè)置一個(gè)keep-alive連接使用的次數(shù)。

語(yǔ)法 keepalive_requests number;
默認(rèn)值 keepalive_requests 100;
位置 http、serverlocation

server塊和location塊

server塊和location塊都是我們要重點(diǎn)講解和學(xué)習(xí)的內(nèi)容,因?yàn)槲覀兒竺鏁?huì)對(duì)Nginx的功能進(jìn)行詳細(xì)講解,所以這塊內(nèi)容就放到靜態(tài)資源部署的地方給大家詳細(xì)說(shuō)明。

本節(jié)我們主要來(lái)認(rèn)識(shí)下Nginx默認(rèn)給的nginx.conf中的相關(guān)內(nèi)容,以及server塊與location塊在使用的時(shí)候需要注意的一些內(nèi)容。

server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
       
        error_page   500 502 503 504 404  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

將本頁(yè)面鏈接http://409rqu1.cn/news/20210716/154651.html發(fā)送給QQ:2217622915,免費(fèi)獲取上面課程全套視頻、筆記和源碼。



猜你喜歡:

Nginx使用教程:Nginx從入門(mén)到精通

Java中final關(guān)鍵字如何使用?

Java中volatile關(guān)鍵字有什么作用?

JDBC詳細(xì)教程與jdbc連接數(shù)據(jù)庫(kù)方法

黑馬程序員java開(kāi)發(fā)培訓(xùn)課程

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!