更新時間:2021-07-16 來源:黑馬程序員 瀏覽量:
從前面的內(nèi)容學習中,我們知道Nginx的核心配置文件默認是放在/usr/local/nginx/conf/nginx.conf,這一節(jié),我們就來學習下nginx.conf的內(nèi)容和基本配置方法。
讀取Nginx自帶的Nginx配置文件,我們將其中的注釋部分【學習一個技術點就是在Nginx的配置文件中可以使用#來注釋】刪除掉后,就剩下下面內(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; } } }
指令名 指令值; #全局塊,主要設置Nginx服務器整體運行的配置指令 #events塊,主要設置,Nginx服務器與用戶的網(wǎng)絡連接,這一部分對Nginx服務器的性能影響較大 events { 指令名 指令值; } #http塊,是Nginx服務器配置中的重要部分,代理、緩存、日志記錄、第三方模塊配置... http { 指令名 指令值; server { #server塊,是Nginx配置和虛擬主機相關的內(nèi)容 指令名 指令值; location / { #location塊,基于Nginx服務器接收請求字符串與location后面的值進行匹配,對特定請求進行處理 指令名 指令值; } } ... }
簡單小結(jié)下:
nginx.conf配置文件中默認有三大塊:全局塊、events塊、http塊。http塊中可以配置多個server塊,每個server塊又可以配置多個location塊。
全局塊
(1)user:用于配置運行Nginx服務器的worker進程的用戶和用戶組。
語法 | user user [group] |
默認值 | nobody |
位置 | 全局塊 |
該屬性也可以在編譯的時候指定,語法如下./configure --user=user --group=group,如果兩個地方都進行了設置,最終生效的是配置文件中的配置。
該指令的使用步驟:
(1)設置一個用戶信息"www"
user www;
(2)創(chuàng)建一個用戶
useradd www
(3)修改user屬性
user www
(4)創(chuàng)建/root/html/index.html頁面,添加如下內(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)測試啟動訪問
頁面會報403拒絕訪問的錯誤
(7)分析原因
因為當前用戶沒有訪問/root/html目錄的權限
(8)將文件創(chuàng)建到 /home/www/html/index.html,修改配置
location / { root /home/www/html; index index.html index.htm; }
(9)再次測試啟動訪問
能正常訪問。
master_process:用來指定是否開啟工作進程。
語法 | master_process on|off; |
默認值 | master_process on; |
位置 | 全局塊 |
worker_processes:用于配置Nginx生成工作進程的數(shù)量,這個是Nginx服務器實現(xiàn)并發(fā)處理服務的關鍵所在。理論上來說workder process的值越大,可以支持的并發(fā)處理量也越多,但事實上這個值的設定是需要受到來自服務器自身的限制,建議將該值和服務器CPU的內(nèi)核數(shù)保存一致。
語法 | worker_processes num/auto; |
默認值 | 1 |
位置 | 全局塊 |
如果將worker_processes設置成2,則會看到如下內(nèi)容:
其他指令
daemon:設定Nginx是否以守護進程的方式啟動。
守護式進程是linux后臺執(zhí)行的一種服務進程,特點是獨立于控制終端,不會隨著終端關閉而停止。
語法 | daemon on|off; |
默認值 | daemon on; |
位置 | 全局塊 |
pid:用來配置Nginx當前master進程的進程號ID存儲的文件路徑。
語法 | pid file; |
默認值 | 默認為:/usr/local/nginx/logs/nginx.pid |
位置 | 全局塊 |
該屬性可以通過./configure --pid-path=PATH來指定
error_log:用來配置Nginx的錯誤日志存放路徑
語法 | include file; |
默認值 | 無 |
位置 | any |
(1)accept_mutex:用來設置Nginx網(wǎng)絡連接序列化
語法 | error_log file [日志級別]; |
默認值 | error_log logs/error.log error; |
位置 | 全局塊、http、server、location |
該屬性可以通過./configure --error-log-path=PATH來指定
其中日志級別的值有:debug|info|notice|warn|error|crit|alert|emerg,翻譯過來為試|信息|通知|警告|錯誤|臨界|警報|緊急,這塊建議大家設置的時候不要設置成info以下的等級,因為會帶來大量的磁盤I/O消耗,影響Nginx的性能。
(5)include:用來引入其他配置文件,使Nginx的配置更加靈活
語法 | accept_mutex on|off; |
默認值 | accept_mutex on; |
位置 | events |
這個配置主要可以用來解決常說的"驚群"問題。大致意思是在某一個時刻,客戶端發(fā)來一個請求連接,Nginx后臺是以多進程的工作模式,也就是說有多個worker進程會被同時喚醒,但是最終只會有一個進程可以獲取到連接,如果每次喚醒的進程數(shù)目太多,就會影響Nginx的整體性能。如果將上述值設置為on(開啟狀態(tài)),將會對多個Nginx進程接收連接進行序列號,一個個來喚醒接收,就防止了多個進程對連接的爭搶。
(2)multi_accept:用來設置是否允許同時接收多個網(wǎng)絡連接
語法 | multi_accept on|off; |
默認值 | multi_accept off; |
位置 | events |
如果multi_accept被禁止了,nginx一個工作進程只能同時接受一個新的連接。否則,一個工作進程可以同時接受所有的新連接
(3)worker_connections:用來配置單個worker進程最大的連接數(shù)
語法 | worker_connections number; |
默認值 | worker_commections 512; |
位置 | events |
這里的連接數(shù)不僅僅包括和前端用戶建立的連接數(shù),而是包括所有可能的連接數(shù)。另外,number值不能大于操作系統(tǒng)支持打開的最大文件句柄數(shù)量。
(4)use:用來設置Nginx服務器選擇哪種事件驅(qū)動來處理網(wǎng)絡消息。
語法 | use method; |
默認值 | 根據(jù)操作系統(tǒng)定 |
位置 | events |
注意:此處所選擇事件處理模型是Nginx優(yōu)化部分的一個重要內(nèi)容,method的可選值有select/poll/epoll/kqueue等,之前在準備centos環(huán)境的時候,我們強調(diào)過要使用linux內(nèi)核在2.6以上,就是為了能使用epoll函數(shù)來優(yōu)化Nginx。
另外這些值的選擇,我們也可以在編譯的時候使用
--with-select_module、--without-select_module、
--with-poll_module、--without-poll_module來設置是否需要將對應的事件驅(qū)動模塊編譯到Nginx的內(nèi)核。
打開Nginx的配置文件 nginx.conf,添加如下配置
events{ accept_mutex on; multi_accept on; worker_commections 1024; use epoll; }
啟動測試
./nginx -t ./nginx -s reload
定義MIME-Type
我們都知道瀏覽器中可以顯示的內(nèi)容有HTML、XML、GIF等種類繁多的文件、媒體等資源,瀏覽器為了區(qū)分這些資源,就需要使用MIME Type。所以說MIME Type是網(wǎng)絡資源的媒體類型。Nginx作為web服務器,也需要能夠識別前端請求的資源類型。
在Nginx的配置文件中,默認有兩行配置
include mime.types; default_type application/octet-stream;
(1)default_type:用來配置Nginx響應前端請求默認的MIME類型。
語法 | default_type mime-type; |
默認值 | default_type text/plain; |
位置 | http、server、location |
在default_type之前還有一句include mime.types,include之前我們已經(jīng)介紹過,相當于把mime.types文件中MIMT類型與相關類型文件的文件后綴名的對應關系加入到當前的配置文件中。
舉例來說明:
有些時候請求某些接口的時候需要返回指定的文本字符串或者json字符串,如果邏輯非常簡單或者干脆是固定的字符串,那么可以使用nginx快速實現(xiàn),這樣就不用編寫程序響應請求了,可以減少服務器資源占用并且響應性能非???。
如何實現(xiàn):
location /get_text { #這里也可以設置成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}'; }
Nginx中日志的類型分access.log、error.log。
access.log:用來記錄用戶所有的訪問請求。
error.log:記錄nginx本身運行時的錯誤信息,不會記錄用戶的訪問請求。
Nginx服務器支持對服務日志的格式、大小、輸出等進行設置,需要使用到兩個指令,分別是access_log和log_format指令。
(1)access_log:用來設置用戶訪問日志的相關屬性。
語法 | access_log path[format[buffer=size]] |
默認值 | access_log logs/access.log combined; |
位置 | http, server, location |
(2)log_format:用來指定日志的輸出格式。
語法 | log_format name [escape=default|json|none] string....; |
默認值 | log_format combined "..."; |
位置 | http |
其他配置指令
(1)sendfile:用來設置Nginx服務器是否使用sendfile()傳輸文件,該屬性可以大大提高Nginx處理靜態(tài)資源的性能
語法 | sendfile on|off; |
默認值 | sendfile off; |
位置 | http、server、location |
(2)keepalive_timeout:用來設置長連接的超時時間。
為什么要使用keepalive?
我們都知道HTTP是一種無狀態(tài)協(xié)議,客戶端向服務端發(fā)送一個TCP請求,服務端響應完畢后斷開連接。
如何客戶端向服務端發(fā)送多個請求,每個請求都需要重新創(chuàng)建一次連接,效率相對來說比較多,使用keepalive模式,可以告訴服務器端在處理完一個請求后保持這個TCP連接的打開狀態(tài),若接收到來自這個客戶端的其他請求,服務端就會利用這個未被關閉的連接,而不需要重新創(chuàng)建一個新連接,提升效率,但是這個連接也不能一直保持,這樣的話,連接如果過多,也會是服務端的性能下降,這個時候就需要我們進行設置其的超時時間。
語法 | keepalive_timeout time; |
默認值 | keepalive_timeout 75s; |
位置 | http、server、location |
(3)keepalive_requests:用來設置一個keep-alive連接使用的次數(shù)。
語法 | keepalive_requests number; |
默認值 | keepalive_requests 100; |
位置 | http、server、location |
server塊和location塊
server塊和location塊都是我們要重點講解和學習的內(nèi)容,因為我們后面會對Nginx的功能進行詳細講解,所以這塊內(nèi)容就放到靜態(tài)資源部署的地方給大家詳細說明。
本節(jié)我們主要來認識下Nginx默認給的nginx.conf中的相關內(nèi)容,以及server塊與location塊在使用的時候需要注意的一些內(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; } }
將本頁面鏈接http://pantone-color.com.cn/news/20210716/154651.html發(fā)送給QQ:2217622915,免費獲取上面課程全套視頻、筆記和源碼。
猜你喜歡: