Nginx 在 OpenBSD 中无法找到 /var/www 目录之外的文件

Nginx 在 OpenBSD 中无法找到 /var/www 目录之外的文件

我正在为一个新网站设置一个 nginx 网络服务器,我想将网络服务器的根目录设置为srv,因此我创建了目录并将所有网络服务器文件放在那里,但 nginx 无法在其中找到任何文件。每次访问我都会收到错误 404。但是,当设置为/srv时,它能够找到文件。(或 /var/www 内的任何目录)。我正在运行 OpenBSD。以下是我的文件:root/var/www/html/etc/nginx/nginx.conf

user www;
worker_processes 1;
events {
    worker_connections 800;
}

http {
    index index.html;

    server {
        root /srv/foo;
        listen 80;
        listen [::]:80;
        server_name example.com www.example.com;
        sendfile on;
        tcp_nopush on;
        access_log /var/log/nginx/access.log;

        location / {
            add_header X-uri "$uri" always;
            add_header X-docroot "$document_root" always;
            add_header X-realroot "$realpath_root" always;
            try_files $uri $uri.html $uri/ =404;
        }
    }
}

所有目录和文件都已设置读取权限。此外,我还尝试将文件托管在名为 /usr/srv 的新目录中,但遇到了同样的问题。我添加了标头,希望提供一些调试信息,但在 curl GET 请求中一切看起来都很正常。我确实收到了 realpath_root 标头的错误。以下是日志:

2023/06/25 16:30:01 [crit] 14127#0: *32 realpath() "/srv/foo" failed (2: No such file or directory), client: 127.0.0.1, server: example.com, request: "GET / HTTP/1.1", host: "example.com"

有什么线索可以解释为什么我无法从/var/www子目录以外的任何子目录提供服务?

答案1

在 OpenBSD 上,Nginx 是 chrooted。从OpenBSD 5.6 nginx(8)手册页:

-u

默认情况下,nginx 将chroot(2)到运行守护进程的用户的主目录,通常是“www”,或者到用户nginx.conf。 这-u选项禁用此行为,并将 nginx 返回到原始的“不安全”行为。

您所需的配置会降低安全性。是否有真正理由使用/srv/foo而不是/var/www/foo

相关内容