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 从不正确的根目录读取站点文件的主要内容,如果未能解决你的问题,请参考以下文章