将 Nginx 文档根目录从 /usr/share/nginx 更改为 /etc/nginx

将 Nginx 文档根目录从 /usr/share/nginx 更改为 /etc/nginx

我尝试了很多方法,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;
工作进程2;
错误日志/var/log/nginx/error.log;
pid /var/run/nginx.pid;

事件 {
                工人连接4096;
}

http {
                包括/etc/nginx/conf/mime.types;
                默认类型应用程序/八位字节流;
                发送文件;
                开启 gzip;
                gzip_comp_level 9;
                gzip_最小长度 0;
                gzip_proxied 已过期无缓存无存储私人认证;
                gzip_types 文本/纯文本/css 应用程序/x-javascript 应用程序/xml 应用程序/javascript;
                设置真实ip为192.168.151.3;
                real_ip_header X-Forwarded-For;
                proxy_set_header 主机 $host;
                proxy_set_header X-真实IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_intercept_errors 开启;
                log_format 主要'$remote_addr-$remote_user[$time_local]'
                        '“$request”$status $body_bytes_sent“$http_referer”'
                        '"$http_user_agent"' ;
                访问日志 /var/log/nginx/access.log 主要;

                客户端最大主体大小50米;
                客户端主体缓冲区大小4k;
                客户端头缓冲区大小为2k;
                keepalive_timeout 5 5;
                客户端主体超时10;
                客户端_头_超时10;
                发送超时10;
                代理连接超时5;
                代理发送超时20;
                代理读取超时 120;
                代理缓冲区大小8k;
                代理缓冲区 8 32k;
                代理忙缓冲区大小32k;
                代理临时文件写入大小32k;
                服务器名称哈希桶大小128;
                服务器名称哈希最大大小1280;
                服务器名称_in_redirect 关闭;
                proxy_cache_path /etc/nginx/cache级别=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;
}

答案1

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 二进制文件,并根据需要配置该命令

相关内容