Nginx 从不正确的根目录读取站点文件

Posted

技术标签:

【中文标题】Nginx 从不正确的根目录读取站点文件【英文标题】:Nginx reading site files from incorrect root 【发布时间】:2018-06-04 15:23:18 【问题描述】:

自从我在启用站点/默认配置中通过 SSL 设置 HTTPS 以来,nginx 正在从 /usr/share/www/html 而不是 /var/www/html 读取。我的任何文件中都没有对/usr/.../html 的引用(当我使用grep -r 时),所以我不知道为什么会发生这种情况。

server 
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name MY_WEBSITE.TLD; # Before you ask, yes
    return 302 https://$server_name$request_uri;
    root /var/www/html;


server 
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;

    index index.html index.htm index.nginx-debian.html index.php;

    location / 
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    

    location ~ \.php$ 
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    

    location ~ /\.ht 
        deny all;
    

显然我已经定义了根。为什么它不起作用?

【问题讨论】:

您是否尝试过在 SSL 配置部分定义根? 哪个是ssl配置部分?你的意思是第二个服务器块?如果是这样,是的,我有。 是的,我就是这个意思。这个安装有多少个站点?您可以在“http”部分设置 root ... 这样做吗?我运行了一个小 nGinx,但没有用它做太多的服务器配置......对不起。 只有一个域。我尝试在 http 部分设置它...但现在我得到一个 403 禁止错误... 两个容器/部分都需要 server_name 吗? 【参考方案1】:

您的配置描述了 2 个独立的服务器 - 而不是一台服务器上的 2 个端口。您可以将它们包含在 sites-available/ 的单个文件中显然很方便,但从技术上讲,它们是不同的独立服务器,您可以将每个 server 块拆分为不同的 sites-available/ 配置文件。

考虑到这一点,请检查您为每台服务器准备的内容。您在端口 80 上有一台服务器,它指定了 root。那里都很好。

您在端口 443 上有另一个服务器。这是一个完全独立的服务器,而不是另一个端口上的同一台服务器。它没有指定 root,因此 nginx 将回退到某个默认根位置,由编译时开关或发行版特定变量确定,as described in this SO question。

【讨论】:

但是当我指定一个root时,它仍然使用usr/.../html。编辑:我指定为第二个 (SSL) server 块中的第五行。 @ColonelHedgehog 关键是在哪里你指定了root吗?这样做之后你是否重新启动了 nginx? 好的,刷新后,它似乎使用了正确的根目录。但是......现在它下载我的 php 文件而不是查看它们。所以看起来我已经将一个问题换成了另一个问题。 @ColonelHedgehog @ColonelHedgehog 是的,这是一个新问题。我的猜测是你的location / 覆盖了location ~ \.php$。你真的需要两者吗?尝试将您的try_files $uri $uri/ =404; 移动到您的location ~ \.php$,然后删除location / @ColonelHedgehog 1. 不要在同一 server 中指定 root 2x。 2. 在一个 server 块中包含 2x default_server 看起来也很奇怪,现在尝试将它们都删除。 3.你的fastcgi_param中的/scripts是什么?通常这类似于$document_root$fastcgi_script_name;。 4. 我认为您需要server_name - 您在使用什么,并检查日志,真正的错误是什么?【参考方案2】:

Aaaa 这一切都导致我为 php7.0-fpm 指定了错误的目录。因为当然可以!感谢@Don't Panic 和@Keven_Kinsey 帮助我。终于可以正常加载了。

【讨论】:

以上是关于Nginx 从不正确的根目录读取站点文件的主要内容,如果未能解决你的问题,请参考以下文章

nginx站点目录及文件URL访问控制

403 禁止 - Nginx - 使用正确的凭据

nginx服务器多虚拟主机配置

Nginx+Php中限制站点目录防止跨站的配置方案记录

nginx+php使用open_basedir限制站点目录防止跨站

如何将 manifest.json 的 start_url 设置为站点的根目录?