为什么当 nginx 尝试访问 FreeBSD 服务器上的静态文件时会引发 404?

为什么当 nginx 尝试访问 FreeBSD 服务器上的静态文件时会引发 404?

我在运行 FreeBSD 10.2 的服务器上安装了 nginx 1.8.1。我试图从子目录/usr/local/www/(在 FreeBSD 上是默认目录)提供文件,但出于某种原因,对我尝试访问的文件的请求总是导致 404。

该文件具体为/usr/local/www/example.com/pubic_html/index.html,其/usr/local/www所有权递归属于www:www,即 nginx 工作进程的用户和组,其权限递归设置为755

我的server区块位于/usr/local/etc/nginx/sites-available/example.com

server {
    listen 80 default;
    server_name example.com www.example.com;

    root /usr/local/www/example.com/public_html;

    location /app {
        proxy_pass http://localhost:8080;
    }

    location / {
        try_files $uri =404;
    }
}

说实话,我对此感到困惑。我在 Linux 上使用 Nginx 或 Apache 时从未遇到过这个问题,在 FreeBSD 上使用 Apache 时也从未遇到过这个问题。我该如何让 nginx 提供这个静态文件?

编辑:虽然 静态 文件 请求 不会 导致 任何 被 记录 到 我 的nginx-error.log, 但 它 会 导致 正常 404 命中 记录nginx-access.log.

答案1

好的,事情是这样的:FreeBSD 中 Web 服务器的默认配置不使用sites-available目录内的文件。您必须将文件的内容放入其中/usr/local/etc/nginx/nginx.conf,或者添加此行,/usr/local/etc/nginx/nginx.conf以便它读取sites-available目录内的文件:

# virtual hosting
include /usr/local/etc/nginx/sites-available/*.conf;

相同的行为也适用于 FreeBSD 上的 Apache。(可能也适用于其他 Web 服务器,但我只对这两个有经验。)

答案2

您有其他 Nginx 配置文件吗?
我猜您listen <ip>在其他地方有指令,所以您也应该在配置中使用listen <ip> default_server或。listen <ip>:80 default_serverexample.com

相关内容