摘要:如對(duì)于請(qǐng)求,依次嘗試按照配置所表示的文件。這里是目錄,會(huì)繼續(xù)按照配置查找如等文件。在沒有更為精確的匹配符合的情況下,會(huì)進(jìn)入這一配置中,實(shí)際上相當(dāng)于缺省配置。
nginx.conf以下備忘 Nginx 中基礎(chǔ)配置的含義。
在 /etc/nginx 中可以找到 nginx.conf 配置文件,其配置及注釋如下:
# 運(yùn)行 Nginx worker 進(jìn)程的用戶群組為 nginx user nginx; # 工作進(jìn)程的數(shù)量,一般與 CPU 的核數(shù)相關(guān) worker_processes 1; # 錯(cuò)誤日志的目錄。最后一項(xiàng)為錯(cuò)誤日志的級(jí)別 error_log /var/log/nginx/error.log warn; # 保存主進(jìn)程的進(jìn)程 id 的位置 pid /var/run/nginx.pid; # 設(shè)置一個(gè)工作進(jìn)程可以連接的數(shù)量 events { worker_connections 1024; } http { # ... }
有關(guān)錯(cuò)誤日志的級(jí)別可以參考:「Nginx error_log 錯(cuò)誤日志級(jí)別」。
http 模塊在 nginx.conf 中包含一個(gè)重要模塊,其配置及注釋如下:
# --- nginx.conf ---- # 其他配置 http { # 這個(gè)文件告訴瀏覽器文件所屬的類型 include /etc/nginx/mime.types; # 設(shè)置了默認(rèn)的類型(默認(rèn)為二進(jìn)制) default_type application/octet-stream; # 設(shè)置日志記錄的一種格式,main 為名字 log_format main "$remote_addr - $remote_user [$time_local] "$request" " "$status $body_bytes_sent "$http_referer" " ""$http_user_agent" "$http_x_forwarded_for""; # 設(shè)置訪問日志的位置 access_log /var/log/nginx/access.log main; # 是否使用這種方法傳輸數(shù)據(jù) sendfile on; #tcp_nopush on; # keepalive 長(zhǎng)連接延時(shí) keepalive_timeout 65; #gzip on; # 包含的額外配置位置 include /etc/nginx/conf.d/*.conf; }
該段配置中有一些比較重要的部分:
mime.types該文件為 /etc/nginx/mine.types,表示針對(duì)不同文件類型會(huì)返回給瀏覽器的 Content-Type 頭部信息,以下是該文件的部分內(nèi)容:
types { text/html html htm shtml; text/css css; text/xml xml; image/gif gif; image/jpeg jpeg jpg; application/javascript js; application/atom+xml atom; application/rss+xml rss; # 其他內(nèi)容 }
有關(guān)這一部分的詳細(xì)信息可以查看:「Nginx -- mime.types」和「HTTP Content-Type」。
log_format該項(xiàng)配置了日志記錄的格式,具體可以參考:「使用 log_format 為 Nginx 服務(wù)器設(shè)置更詳細(xì)的日志格式」。
server 模塊由于在 nginx.conf 中存在下面這條配置,使得所有在該目錄下,文件名以 .conf 結(jié)尾的文件都會(huì)被當(dāng)作配置文件引入:
include /etc/nginx/conf.d/*.conf;
而在 /etc/nginx/conf.d/ 目錄下,提供了一個(gè) default.conf 文件,以下是該文件部分內(nèi)容及注釋:
# 每一個(gè) server 定義了一個(gè)虛擬主機(jī) server { # 端口號(hào) listen 80; # 訪問的主機(jī)名 server_name localhost; #charset koi8-r; # 這里可以覆蓋 http 中的配置 #access_log /var/log/nginx/log/host.access.log main; # 其他配置 }
在 server 模塊中,location 是非常重要的配置項(xiàng),我們可以使用它完成很多需求。
簡(jiǎn)單的請(qǐng)求匹配我更傾向于把它稱為路由匹配,即根據(jù)請(qǐng)求的類型轉(zhuǎn)發(fā)到相應(yīng)的代碼中進(jìn)行處理,和路由器根據(jù)路由表轉(zhuǎn)發(fā)數(shù)據(jù)包的過程很是相似。
server { # 其他配置 server_name my.app.dev; location / { # 匹配時(shí)轉(zhuǎn)發(fā)到的目錄 root /usr/share/nginx/html; # 如以 my.app.dev 訪問,則嘗試訪問 # my.app.dev/index.html # 或 # my.app.dev/index.htm index index.html index.htm; } # 其他配置 }
這是一個(gè)簡(jiǎn)單的配置,所有以 my.app.dev 發(fā)起到該主機(jī)的請(qǐng)求都會(huì)與這一配置匹配。如請(qǐng)求 my.app.dev/a.html 則相當(dāng)于訪問 /usr/share/nginx/html/a.html 文件(注意配置域名解析到該服務(wù)器),該路徑為 root 配置內(nèi)容。
正則匹配當(dāng)然也可以使用正則表達(dá)式定義:
location ~* .(jpg|jpeg|gif|png)$ { root /usr/share/nginx/static/images; }
該配置表示對(duì)圖片類的靜態(tài)資源的轉(zhuǎn)發(fā),其中 .(jpg|jpeg|gif|png)$ 為正則內(nèi)容;
~* 表示請(qǐng)求不區(qū)分大小寫,關(guān)于此類規(guī)則可以參考:「Nginx location 匹配規(guī)則」。
反向代理我們還可以進(jìn)行反向代理配置:
location /api { # 代理轉(zhuǎn)發(fā) proxy_pass http://api.app.dev; # 保留請(qǐng)求方的真實(shí) IP proxy_set_header X-Real-IP $remote_addr; # 追加代理 IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for }
在使用代理后,如果想讓代理后的服務(wù)器得到的請(qǐng)求地址仍是真實(shí)的客戶,而不是代理服務(wù)器,則需要增加上述配置的下面兩行。有關(guān)這二者的區(qū)別和更為詳細(xì)的信息可以分別參考:「X-Forwarded-For 和 X-Real-IP 的區(qū)別?」和「怎樣正確設(shè)置 remote_addr 和 x_forwarded_for」。
FastCGI對(duì)于某些需要借助額外處理過程的文件,Nginx 需要將請(qǐng)求轉(zhuǎn)發(fā)給實(shí)現(xiàn)了 CGI 或 FastCGI 的進(jìn)程進(jìn)行處理。在 PHP 中即為 php-fpm:
location ~ .php$ { # 注意,Nginx 和 FastCGI 通信具有兩種形式,TCP 和 UNIX Socket 方式 # 默認(rèn)為 socket 方式 # fastcgi_pass unix:/run/php/php7.0-fpm.sock; # 或使用 TCP 方式 fastcgi_pass 127.0.0.1:9000; # 默認(rèn)索引文件 fastcgi_index index.php; # 額外的參數(shù):請(qǐng)求的腳本文件位置 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 引入額外的 FastCGI 配置 include fastcgi_params; }
其中:fastcgi_pass 表示將該類請(qǐng)求轉(zhuǎn)發(fā)到哪個(gè)進(jìn)程,這里配置為 127.0.0.1:9000 是因?yàn)?php-fpm 默認(rèn)監(jiān)聽 9000 端口。
這里的 $document_root 和 $fastcgi_script_name 分別表示 root 配置指定的位置及腳本名稱。二者連起來即為腳本文件的請(qǐng)求路徑。詳細(xì)信息可以參考「Nginx 內(nèi)置預(yù)定義變量」和「fastcgi_param 詳解 - CSDN」。
include fastcgi_params 為引入 /etc/nginx/fastcgi_params 文件。
地址重寫又稱為偽靜態(tài),可以通過以下方式配置:
location / { index index.php; try_files $uri $uri/ /index.php?$query_string; }
在 try_files 后附帶三個(gè)參數(shù)(可以配置多個(gè),中間用空格分隔),對(duì)于一個(gè)請(qǐng)求,會(huì)依次嘗試這三者。如對(duì)于請(qǐng)求 my.app.dev/comments/1,依次嘗試:
my.app.dev/comments/1 按照 root 配置所表示的文件;
my.app.dev/comments/1/。這里是目錄,會(huì)繼續(xù)按照 index 配置查找如 index.html 等文件;
my.app.dev/index.php。注意,雖然轉(zhuǎn)發(fā)到這個(gè)文件,但請(qǐng)求的 url 仍是 my.app.dev/comments/1,一般在 index.php 中會(huì)有請(qǐng)求解析模塊專門進(jìn)行匹配。
匹配順序一般地址重寫都是動(dòng)態(tài)語(yǔ)言的需求,所以地址重寫配置往往和 FastCGI 配置一同出現(xiàn)。
同路由表的匹配規(guī)則類似,請(qǐng)求的匹配大體上也遵循最長(zhǎng)匹配,具體規(guī)則如下(引用自:Nginx location 匹配規(guī)則):
默認(rèn)匹配= 前綴的指令嚴(yán)格匹配這個(gè)查詢。如果找到,停止搜索;
所有剩下的常規(guī)字符串,最長(zhǎng)的匹配。如果這個(gè)匹配使用^?前綴,搜索停止;
正則表達(dá)式,在配置文件中定義的順序;
如果第 3 條規(guī)則產(chǎn)生匹配的話,結(jié)果被使用。否則,使用第2條規(guī)則的結(jié)果。
在配置了 location / {...} 后,由于所有請(qǐng)求都屬于這一格式。在沒有更為精確的匹配符合的情況下,會(huì)進(jìn)入這一配置中,實(shí)際上相當(dāng)于缺省配置。
當(dāng)然,我們也可以用以下方式配置一個(gè)默認(rèn)(缺省)的 server:
server { listen 80 default_server; root /default/root; #root return 444; }
使用 default_server 標(biāo)注其為默認(rèn) server。這里也可以把 root /default/root 改為 root return 444,表示當(dāng)必須使用默認(rèn) server 時(shí),直接返回 444 HTTP 狀態(tài)碼。而又由于沒有這一狀態(tài)碼,瀏覽器中會(huì)直接顯示 網(wǎng)頁(yè)無(wú)法正常工作。
404 錯(cuò)誤問題當(dāng)訪問已正確配置的地址卻出現(xiàn) 403 錯(cuò)誤時(shí),有可能是 SELinux 導(dǎo)致的。
先執(zhí)行以下命令:
getenforce
如果出現(xiàn) Enforcing 結(jié)果,則需要改變安全上下文:
chcon -Rt httpd_sys_content_t /your/web/dir
詳細(xì)內(nèi)容可以參考 「查看 SELinux 狀態(tài)及關(guān)閉 SELinux」 和 「Chcon 命令」。
查看 SELinux 狀態(tài)及關(guān)閉 SELinux
Chcon 命令
Nginx error_log 錯(cuò)誤日志級(jí)別
Nginx -- mime.types
HTTP Content-Type
使用 log_format 為 Nginx 服務(wù)器設(shè)置更詳細(xì)的日志格式 - 博客園
nginx location 匹配規(guī)則
X-Forwarded-For 和 X-Real-IP 的區(qū)別? - segmentfault
怎樣正確設(shè)置 remote_addr 和 x_forwarded_for - CSDN
Nginx 內(nèi)置預(yù)定義變量
fastcgi_param 詳解 - CSDN
NGINX:Web 服務(wù)器 - 寧皓網(wǎng)
Ubuntu 16.04LTS LNMP環(huán)境配置 - 博客園
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/39531.html
摘要:最近開發(fā)時(shí),遇到需要使用同一域名承載多個(gè)前端項(xiàng)目的場(chǎng)景,具體需求如下訪問新版本前端項(xiàng)目訪問后端接口服務(wù)訪問默認(rèn)前端項(xiàng)目配置內(nèi)容注意的配置。此時(shí),可以通過對(duì)新版前端文件中的進(jìn)行配置,以規(guī)避這一問題注該方法僅適用于構(gòu)建的項(xiàng)目參考鏈接 最近開發(fā)時(shí),遇到需要使用同一域名承載多個(gè)前端項(xiàng)目的場(chǎng)景,具體需求如下: /v2 訪問新版本前端項(xiàng)目 /api 訪問后端 Spring Boot 接口服...
摘要:主機(jī)選擇登錄主機(jī)操作系統(tǒng)升級(jí)操作系統(tǒng)升級(jí)軟件升級(jí)刪除升級(jí)包設(shè)置主機(jī)時(shí)區(qū)設(shè)置主機(jī)名更新主機(jī)名綁定域名創(chuàng)建新的主機(jī)用戶安裝至此可以嘗試打開下網(wǎng)站看看配置修改為主機(jī)登錄用戶名進(jìn)程數(shù)增加設(shè)置上傳文件大小檢測(cè)配置信息 主機(jī)選擇 Ubuntu 14.04 LTS 登錄主機(jī) ssh root@xx.xx.xx.xx 操作系統(tǒng)升級(jí) apt-get update 操作系統(tǒng)升級(jí)apt-get upgrad...
摘要:主機(jī)選擇登錄主機(jī)操作系統(tǒng)升級(jí)操作系統(tǒng)升級(jí)軟件升級(jí)刪除升級(jí)包設(shè)置主機(jī)時(shí)區(qū)設(shè)置主機(jī)名更新主機(jī)名綁定域名創(chuàng)建新的主機(jī)用戶安裝至此可以嘗試打開下網(wǎng)站看看配置修改為主機(jī)登錄用戶名進(jìn)程數(shù)增加設(shè)置上傳文件大小檢測(cè)配置信息 主機(jī)選擇 Ubuntu 14.04 LTS 登錄主機(jī) ssh root@xx.xx.xx.xx 操作系統(tǒng)升級(jí) apt-get update 操作系統(tǒng)升級(jí)apt-get upgrad...
閱讀 4060·2021-11-24 10:46
閱讀 1880·2021-11-16 11:44
閱讀 2370·2021-09-22 16:02
閱讀 1473·2019-08-30 15:55
閱讀 1187·2019-08-30 12:46
閱讀 647·2019-08-28 18:31
閱讀 2857·2019-08-26 18:38
閱讀 1152·2019-08-23 16:51