Nginx

將 Nginx 文件根目錄從 /usr/share/nginx 更改為 /etc/nginx

  • January 27, 2018

我已經嘗試了很多東西,STFW,RTFM,但我仍然有這個問題。事情是:

我在 AWS 機器上安裝了 Nnginx(其他人安裝了它,不是我),我必須為從其他伺服器(生產機器)拉出的幾個虛擬主機(*.conf 文件)提供服務

我的主要問題是,這個 .conf 文件中的錯誤處理程序路徑是親戚,例如:

html/errores-prxy/handle404.html

如在

location = /handle404.html {
    root html/errores-prxy;
}

問題是該處理程序呼叫的文件根路徑是 /usr/share/nginx,正如我在錯誤日誌中看到的那樣:

2015/04/30 10:33:24 [error] 19542#0: *68 open() "/usr/share/nginx/html/errores-prxy/handle404.html" failed (2: No such file or directory), client: 77.240.116.140, server: www.abengoa.com, request: "GET / HTTP/1.1", upstream: "http://172.26.3.9:80/web/", host: "www.abengoa.es"

在這台 AWS 機器上,Nginx 安裝在 /etc/nginx 中。這些處理程序文件位於 /etc/nginx/html/errores-prxy/handle404.html

所以我的問題是,如何讓 Nginx 在 /etc/nginx 而不是 /usr/share/nginx/ 中查找?

我可以編寫一個腳本來將所有 *.conf 中的相對路徑更改為絕對路徑,但我正在尋找一個更優雅的解決方案,就像更改 Nginx 文件根目錄一樣。

提前謝謝了。

下面是我的 nginx.conf(位於 /etc/nginx/nginx.conf,以防萬一)

使用者 nginx nginx;
worker_processes 2;
錯誤日誌/var/log/nginx/error.log;
pid /var/run/nginx.pid;

事件{
worker_connections 4096;
}

http {
包括/etc/nginx/conf/mime.types;
default_type 應用程序/八位字節流;
發送文件;
gzip打開;
gzip_comp_level 9;
gzip_min_length 0;
gzip_proxied 過期無記憶體無儲存私有身份驗證;
gzip_types text/plain text/css application/x-javascript application/xml application/javascript;
set_real_ip_from 192.168.151.3;
real_ip_header X-Forwarded-For;
proxy_set_header 主機 $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_intercept_errors 開啟;
log_format main '$remote_addr - $remote_user [$time_local]'
'"$request" $status $body_bytes_sent "$http_referer" '
'"$http_user_agent"' ;
access_log /var/log/nginx/access.log main;

client_max_body_size 50m;
client_body_buffer_size 4k;
client_header_buffer_size 2k;
keepalive_timeout 5 5;
client_body_timeout 10;
client_header_timeout 10;
發送超時 10;
proxy_connect_timeout 5;
proxy_send_timeout 20;
proxy_read_timeout 120;
proxy_buffer_size 8k;
proxy_buffers 8 32k;
proxy_busy_buffers_size 32k;
proxy_temp_file_write_size 32k;
server_names_hash_bucket_size 128;
server_names_hash_max_size 1280;
server_name_in_redirect 關閉;
proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=prxy-cache:100m max_size=256m;
proxy_cache_key "$scheme$host$request_uri";
包括/etc/nginx/conf/*.conf;
包括/etc/nginx/conf/sites-enables/*.conf;
}

nginx 文件說明了有關--prefix configure命令的以下內容:

--prefix=path — defines a directory that will keep server files. This same directory will also be used for all relative paths set by configure (except for paths to libraries sources) and in the nginx.conf configuration file. It is set to the /usr/local/nginx directory by default.

因此,所有相對路徑都是針對這個計算的。

要檢查prefix您使用的二進製文件的值,請檢查nginx -V.

在您的情況下,我看到了幾個選項,從最好到最差:

  1. 使用絕對路徑(直接或使用變數為現有路徑添加前綴)。一個簡單的腳本可以很容易地將原始路徑轉換為屬性路徑,甚至可以作為文件刪除的“後掛鉤”由小伙子啟動
  2. 在參考預期位置的計算位置創建符號連結
  3. 手動建構 nginx 二進製文件,根據需要配置該命令

引用自:https://serverfault.com/questions/686719