Nginx配置終極版學習指南(可能全網(wǎng)最詳細)
1、安裝nginx,獲取原本配置
Centos系統(tǒng)安裝nginx:
yum install nginx
Nginx 的默認配置文件通常位于 /etc/nginx/nginx.conf
root目錄一般在 /usr/share/nginx/html


2、解析nginx.conf原本配置
編輯/etc/nginx/nginx.conf文件:
這個文件總共117行(其中注釋占一大半之多)
2.1 原本配置(117行)
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#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;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
2.2 精簡配置(22行)
我們把其中的注釋都刪掉,除掉了注釋之后的nginx代碼(只有22行):
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;
}
}
}
2.3 詳細解釋(22行)
注解版本:
#工作進程數(shù)量
worker_processes 1;
# 事件區(qū)塊開始
events {
#單個進程最大連接數(shù)(最大連接數(shù)=連接數(shù)*進程數(shù))
#根據(jù)硬件調(diào)整,和前面工作進程配合起來用,盡量大,但是別把cpu跑到100%就行。每個進程允許的最多連接數(shù),理論上每臺nginx服務器的最大連接數(shù)為。
worker_connections 1024;
}
#設定http服務器,利用它的反向代理功能提供負載均衡支持
http {
#include:導入外部文件mime.types,將所有types提取為文件,然后導入到nginx配置文件中
include mime.types;
#默認文件類型
default_type application/octet-stream;
#開啟高效文件傳輸模式,sendfile指令指定nginx是否調(diào)用sendfile函數(shù)來輸出文件,對于普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網(wǎng)絡I/O處理速度,降低系統(tǒng)的負載。注意:如果圖片顯示不正常把這個改成off。
#sendfile指令指定 nginx 是否調(diào)用sendfile 函數(shù)(zero copy 方式)來輸出文件,對于普通應用,必須設為on。如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網(wǎng)絡IO處理速度,降低系統(tǒng)uptime。
sendfile on;
#長連接超時時間,單位是秒
keepalive_timeout 65;
# 第一個Server區(qū)塊開始,表示一個獨立的虛擬主機站點
server {
# 提供服務的端口,默認80
listen 80;
# 提供服務的域名主機名
server_name localhost;
#對 "/" 啟用反向代理,第一個location區(qū)塊開始
location / {
root html; #服務默認啟動目錄
index index.html index.htm; # 默認的首頁文件,多個用空格分開
}
# 錯誤頁面路由
error_page 500 502 503 504 /50x.html; # 出現(xiàn)對應的http狀態(tài)碼時,使用50x.html回應客戶
location = /50x.html { # location區(qū)塊開始,訪問50x.html
root html; # 指定對應的站點目錄為html
}
}
}
3、深入理解
nginx.conf分為三個部分:
- 第一部分:全局塊
- 第二部分:events塊
- 第三部分:http塊
對應圖解:

3.1、全局塊
作用:
從配置文件開始到 events 塊之間的內(nèi)容,主要會設置一些影響nginx 服務器整體運行的配置指令,主要包括配 置運行 Nginx
服務器的用戶(組)、允許生成的 worker process 數(shù),進程 PID 存放路徑、日志存放路徑和類型以 及配置文件的引入等。
比如上面第一行配置的
worker_processes 1;
這是 Nginx 服務器并發(fā)處理服務的關鍵配置,worker_processes 值越大,可以支持的并發(fā)處理量也越多,但是 會受到硬件、軟件等設備的制約。
3.2、events塊
作用:
events 塊涉及的指令主要影響 Nginx 服務器與用戶的網(wǎng)絡連接,常用的設置包括是否開啟對多 work process 下的網(wǎng)絡連接進行序列化,是否 允許同時接收多個網(wǎng)絡連接,選取哪種事件驅(qū)動模型來處理連接請求,每個 word process 可以同時支持的最大連接數(shù)等。
worker_connections 1024;
上述例子就表示每個 work process 支持的最大連接數(shù)為 1024。
這部分的配置對 Nginx 的性能影響較大,在實際中應該靈活配置。
3.3、http塊
作用:
這算是 Nginx 服務器配置中最頻繁的部分,代理、緩存和日志定義等絕大多數(shù)功能和第三方模塊的配置都在這里。
需要注意的是:http 塊也可以包括 http全局塊、server 塊。
- http全局塊
http全局塊配置的指令包括文件引入、MIME-TYPE 定義、日志自定義、連接超時時間、單鏈接請求數(shù)上限等。
- server 塊
這塊和虛擬主機有密切關系,虛擬主機從用戶角度看,和一獨立的硬件主機是完全一樣的,該技術的產(chǎn)生是為了 節(jié)省互聯(lián)網(wǎng)服務器硬件成本。
每個 http 塊可以包括多個 server 塊,而每個 server 塊就相當于一個虛擬主機。 而每個 server 塊也分為全局
server 塊,以及可以同時包含多個 locaton 塊。
- 全局 server 塊
最常見的配置是本虛擬機主機的監(jiān)聽配置和本虛擬主機的名稱或IP配置。
- location 塊
一個 server 塊可以配置多個 location 塊。
這塊的主要作用是基于 Nginx 服務器接收到的請求字符串(例如 server_name/uri-string),對虛擬主機名稱 (也可以是IP 別名)之外的字符串(例如 前面的 /uri-string)進行匹配,對特定的請求進行處理。地址定向、數(shù)據(jù)緩 存和應答控制等功能,還有許多第三方模塊的配置也在這里進行。

4、最簡單的上線配置
最簡單的上線配置只需要去修改兩個地方即可:

默認簡單的配置:指定server_name和root,nginx代理的ip是xxx,然后我放在服務器的文件在html文件夾即可。nginx便會在用戶訪問這個ip時,自動的將html文件夾中的index.html返回到瀏覽器來展示頁面。
5、nginx優(yōu)化:
5.1、錯誤頁面重定向
當用戶刷新頁面時,Nginx會先檢查當前URL是否存在,如果不存在,就會嘗試訪問html文件夾里面的index.html,從而可以正常顯示頁面。

5.2、反向代理:
主流解決跨域的方式就是反向代理

理解:
這段代碼的意思:大致就是如果遇到以.php請求開頭的接口,那么就去訪問這個ip地址(http://127.0.0.1)的后臺端口。
例如我們通過axios去訪問/police/getList這個后臺接口時,nginx會將這個請求轉(zhuǎn)發(fā)到ip端口為http://192.168.1.182:8852的后臺中,后臺將結(jié)果返回給nginx,nginx再把結(jié)果給到瀏覽器,實現(xiàn)反向代理。
定義多個端口的反向代理:copy上面的,直接修改代理頭和proxy_pass即可
5.3、開啟gzip
作用:
開啟gzip對于前端來說還是比較重要的,瀏覽器加載的包大概能節(jié)約一半的空間。例如首頁需要加載a.js文件,該文件為900kb,在開啟gzip之后,瀏覽器會去加載a.js經(jīng)過gzip之后的文件a.js.gz,大概只有450kb,能夠很好的提升瀏覽速度。
**如何配置:** gzip on; # 默認off,是否開啟gzip gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; # 上面兩個開啟基本就能跑起了,下面的愿意折騰就了解一下 gzip_static on; gzip_proxied any; gzip_vary on; gzip_comp_level 6; gzip_buffers 16 8k; # gzip_min_length 1k; gzip_http_version 1.1;
具體位置:

5.4、維護頁面:
作用:
在系統(tǒng)進行維護升級時,用戶打開我們的網(wǎng)站看到的維護頁面。
如何配置:
# 系統(tǒng)臨時維護請打開下面這行注釋,并重啟nginx,維護完畢后請注釋下年這行,并重啟nginx # rewrite ^(.*)$ /maintainace.html break;
具體位置:

5.5、一個ip上線多個網(wǎng)站:
作用:
只有一個ip。利用nginx上線多個網(wǎng)站。例如訪問127.0.0.1:8080訪問我們的個人博客網(wǎng)站,訪問127.0.0.1:8081訪問我們的直播網(wǎng)站。
如何配置:
直接復制server塊即可,一個server塊就代表了一個網(wǎng)站,需要改端口和文件的路徑等內(nèi)容。
# 項目一
server {
listen 8080;
root /data/www/hexo;
index index.html;
location / {
try_files $uri $uri/ /index.html; # 路由模式history的修改
}
}
# 項目二
server {
listen 8081;
root /data/www/geov;
index index.html;
location / {}
}
5.6、動靜分離
作用:
在Web開發(fā)中,通常來說,動態(tài)資源其實就是指那些后臺資源,而靜態(tài)資源就是指HTML,JavaScript,CSS,img等文件。
一般來說,都需要將動態(tài)資源和靜態(tài)資源分開,將靜態(tài)資源部署在Nginx上,當一個請求來的時候,如果是靜態(tài)資源的請求,就直接到nginx配置的靜態(tài)資源目錄下面獲取資源,如果是動態(tài)資源的請求,nginx利用反向代理的原理,把請求轉(zhuǎn)發(fā)給后臺應用去處理,從而實現(xiàn)動靜分離。
在使用前后端分離之后,可以很大程度的提升靜態(tài)資源的訪問速度,同時在開過程中也可以讓前后端開發(fā)并行可以有效的提高開發(fā)時間,也可以有些的減少聯(lián)調(diào)時間 。
解析:
實際上我們在代理前端的html和接口時就已經(jīng)做到了動靜分離。我們打包后的dist包實際上就是純靜態(tài)的資源,所以直接訪問nginx靜態(tài)資源服務器,就不需要經(jīng)過后臺的tomcat。訪問接口時,就需要nginx先去訪問后臺服務器,拿到結(jié)果再給到瀏覽器。

圖解:

如何配置(其實是優(yōu)化,因為一般配置會有動靜分離):
假設有比較大的圖片等需要放置到服務器上,然后通過nginx來轉(zhuǎn)發(fā)。或者是有一個純前端的開源項目(如pdf.js),也需要放在服務器上。如果放在本地代碼包,打包出來體積會很大。
location /image/ {
root /var/filecenter/;
}
location /static/ {
root /var/filecenter/;
}
location /car/ {
root /var/filecenter/;
}
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root /Users/dalaoyang/Downloads/static;
}
具體位置:

5.7、其他優(yōu)化
這里只講了一些nginx基礎的知識和一些基礎的優(yōu)化,基本上夠用了。但是如果你需要追求更高的性能,那么可以添加其他的優(yōu)化,只需要根據(jù)一些搜索到的文章內(nèi)容copy過來就行了,nginx主要還是配置多一些,但是理解了整體結(jié)構(gòu)和脈絡的話,其實就還是蠻簡單的。這里就不做過多的講解了。
6、nginx基礎命令(安裝,啟動,重啟,關閉)
安裝nginx:
yum install nginx
看是否有nginx進程:
netstat -anput | grep nginx
查看服務器端口占用情況:
netstat -ntlp
nginx啟動:
nginx
nginx重啟:
nginx -s reload
關閉nginx:
nginx -s stop : 快速停止nginx nginx -s quit :完整有序的停止nginx
查看默認的nginx配置文件路徑:
nginx -t
注:如果有nginx.conf配置的更改,需要重啟nginx配置才會生效。如果只是更改dist包/html,則可以不重啟nginx。
#查看nginx狀態(tài) systemctl status nginx #停止nginx服務 service nginx stop #開啟nginx服務 service nginx start
總結(jié)
到此這篇關于Nginx配置的文章就介紹到這了,更多相關Nginx配置指南內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Nginx與Tomcat實現(xiàn)動靜態(tài)分離和負載均衡
本篇文章主要介紹了Nginx與Tomcat實現(xiàn)動靜態(tài)分離和負載均衡,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-10-10
ubuntu中如何使用nginx監(jiān)聽80端口進行轉(zhuǎn)發(fā)
這篇文章主要介紹了ubuntu中如何使用nginx監(jiān)聽80端口進行轉(zhuǎn)發(fā)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
nginx添加http_ssl_module并且配置域名指定端口的操作方法
這篇文章主要介紹了nginx添加http_ssl_module并且配置域名指定端口的操作方法,文末附帶linux下防火墻和開放端口,需要的朋友可以參考下2023-11-11

