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