詳解nginx伺服器的nginx.conf 中 root目錄設定問題

energy_百分百發表於2020-10-24

文章主要介紹了詳解nginx.conf 中 root 目錄設定問題,文中透過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在配置 nginx.conf 總會遇到一些問題,下面列舉一些常見的問題並說明如何解決

1、相對路徑的問題

例如配置檔案中 location 設定

location ~ .php${
 root html
 }

ocation 中root所指向的html是一個相對路徑,相對的是這個配置檔案的路徑,假設此配置檔案的位置是/etc/nginx/conf.d,那麼這個html的絕對路徑就是/etc/nginx/conf.d/html。因此為避免出現不必要的麻煩,在配置root路徑的過程中最好用絕對路徑。

2、路徑的繼承問題

2.1 第一種情況

假如server 中宣告:

root /usr/share;

 location 中宣告:

location /{
 root /usr/html/www
 }

時會優先使用 location 中的路徑

2.2 第二種情況

假如 location 中未對root路徑進行宣告:

location /app {
 
}

預設使用 location 外的 root 宣告的路徑

3、首頁的設定問題

假如我們在宣告server 中宣告:

index index.html index.php

那麼我們此時請求 / 就會在內部重定向到 url/index.php 或者 url/index.html
然後再由相關的location 進行匹配 之後再進行解析

nginx.conf檔案的詳解

官網對各個模組引數配置的解釋說明網址: Nginx中文文件

##程式碼塊中的events、http、server、location、upstream等都是塊配置項##
##塊配置項可以巢狀。內層塊直接繼承外層快,例如:server塊裡的任意配置都是基於http塊裡的已有配置的##
 
##Nginx worker程式執行的使用者及使用者組 
#語法:user username[groupname]  預設:user nobody nobody
#user用於設定master程式啟動後,fork出的worker程式執行在那個使用者和使用者組下。當按照"user username;"設定時,使用者組名與使用者名稱相同。
#若使用者在configure命令執行時,使用了引數--user=usergroup 和 --group=groupname,此時nginx.conf將使用引數中指定的使用者和使用者組。
#user nobody;
 
##Nginx worker程式個數:其數量直接影響效能。
#每個worker程式都是單執行緒的程式,他們會呼叫各個模組以實現多種多樣的功能。如果這些模組不會出現阻塞式的呼叫,那麼,有多少CPU核心就應該配置多少個程式,反之,有可能出現阻塞式呼叫,那麼,需要配置稍多一些的worker程式。
worker_processes 1;
 
##ssl硬體加速。
#使用者可以用OpneSSL提供的命令來檢視是否有ssl硬體加速裝置:openssl engine -t
#ssl_engine device;
 
##守護程式(daemon)。是脫離終端在後臺允許的程式。它脫離終端是為了避免程式執行過程中的資訊在任何終端上顯示。這樣一來,程式也不會被任何終端所產生的資訊所打斷。##
##關閉守護程式的模式,之所以提供這種模式,是為了放便跟蹤除錯nginx,畢竟用gdb除錯程式時最繁瑣的就是如何繼續跟進fork出的子程式了。##
##如果用off關閉了master_proccess方式,就不會fork出worker子程式來處理請求,而是用master程式自身來處理請求
#daemon off;  #檢視是否以守護程式的方式執行Nginx 預設是on 
#master_process off; #是否以master/worker方式工作 預設是on
 
##error日誌的設定#
#語法: error_log /path/file level;
#預設: error_log / log/error.log error;
#當path/file 的值為 /dev/null時,這樣就不會輸出任何日誌了,這也是關閉error日誌的唯一手段;
#leve的取值範圍是debug、info、notice、warn、error、crit、alert、emerg從左至右級別依次增大。
#當level的級別為error時,error、crit、alert、emerg級別的日誌就都會輸出。大於等於該級別會輸出,小於該級別的不會輸出。
#如果設定的日誌級別是debug,則會輸出所有的日誌,這一資料量會很大,需要預先確保/path/file所在的磁碟有足夠的磁碟空間。級別設定到debug,必須在configure時加入 --with-debug配置項。
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
 
##pid檔案(master程式ID的pid檔案存放路徑)的路徑
#pid    logs/nginx.pid;
 
 
events {
 #僅對指定的客戶端輸出debug級別的日誌: 語法:debug_connection[IP|CIDR]
 #這個設定項實際上屬於事件類配置,因此必須放在events{……}中才會生效。它的值可以是IP地址或者是CIRD地址。
 #debug_connection 10.224.66.14; #或是debug_connection 10.224.57.0/24
 #這樣,僅僅以上IP地址的請求才會輸出debug級別的日誌,其他請求仍然沿用error_log中配置的日誌級別。
 #注意:在使用debug_connection前,需確保在執行configure時已經加入了--with-debug引數,否則不會生效。
 worker_connections 1024;
}
 
##核心轉儲(coredump):在Linux系統中,當程式發生錯誤或收到訊號而終止時,系統會將程式執行時的記憶體內容(核心映像)寫入一個檔案(core檔案),以作為除錯只用,這就是所謂的核心轉儲(coredump).
 
http {
##嵌入其他配置檔案 語法:include /path/file
#引數既可以是絕對路徑也可以是相對路徑(相對於Nginx的配置目錄,即nginx.conf所在的目錄)
  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監聽的埠
#語法:listen address:port [ default(deprecated in 0.8.21) | default_server | [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred | bind | ssl ] ]
#default_server: 如果沒有設定這個引數,那麼將會以在nginx.conf中找到的第一個server塊作為預設server塊
 listen    8080;
 
#主機名稱:其後可以跟多個主機名稱,開始處理一個HTTP請求時,nginx會取出header頭中的Host,與每個server中的server_name進行匹配,以此決定到底由那一個server來處理這個請求。有可能一個Host與多個server塊中的server_name都匹配,這時會根據匹配優先順序來選擇實際處理的server塊。server_name與Host的匹配優先順序見文末。
 server_name localhost;
 
    #charset koi8-r;
 
    #access_log logs/host.access.log main;
 
    #location / {
    #  root  html;
    #  index index.html index.htm;
    #}
 
##location 語法: location [=|~|~*|^~] /uri/ { ... }
# location的使用例項見文末。
#注意:location時有順序的,當一個請求有可能匹配多個location時,實際上這個請求會被第一個location處理。
 location / {
 proxy_pass http://192.168.1.60;
    }
 
    #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;
  #  }
  #}
 
}

到此這篇關於詳解nginx.conf 中 root 目錄設定問題的文章就介紹到這了,更多相關nginx.conf root 目錄內容請搜尋相關文章。

相關文章