我有一个 nginx 服务器块,如下所示:
server {
listen 80;
server_name localhost;
location /exogeny/ {
root /var/www/exogeny/www/;
index index.html index.htm;
}
}
这个想法是,所有不同的网站都有子目录
/var/www
每个网站都有其子目录,其中包含 ssl 证书等控制文件
/var/www/websitename
为该网站提供的文件进入
/var/www/websitename/www
换句话说,该目录是所提供文件的根目录。
但是,当我这样做时:curl http://localhost/exogeny/index.html
我在日志中收到此错误:
/var/www/exogeny/www/exogeny/intro.html" failed (2: No such file or directory)
它将位置附加到根目录。为什么? 如果无论如何都要使用该位置,为什么还要麻烦使用根指令?
文件在这里:
ls -l /var/www/exogeny/www/intro.html
-rw-r--r-- 1 root root 6028 Aug 22 01:33 /var/www/exogeny/www/intro.html
有没有办法让它完全使用根而不附加位置?这是一个微妙的点,没有使用过其他网络服务器的人可能不会注意到很奇怪,但确实如此。
或者我是这里的混蛋,只是配置了错误?
默认情况下,我相信我们在 var/ww/html 目录中启用了服务器块。 因此,首先确保单个站点在您的服务器中正常工作。
那么如果我们需要额外的目录来服务多个站点。
正如您所提到的,您可以为 /var/www 内的每个站点创建目录结构 但我更喜欢 /var/www/{站点域}/html 中的实际网页内容
比如
sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/html
如果您不是 root 用户 bcz,请确保将它们分配给用户,稍后您不需要使用“sudo”来创建或更新这些目录中的内容。
sudo chown -R $USER:$USER /var/www/example1.com/html
sudo chown -R $USER:$USER /var/www/example2.com/html
sudo chmod -R 755 /var/www
现在您可以为每个站点创建示例页面。
nano /var/www/example1.com/html/index.html
nano /var/www/example2.com/html/index.html
现在让我们创建服务器块文件。只是尝试复制默认文件并编辑它。添加第一个 server1 块的示例作为示例。
server {
listen 80;
listen [::]:80;
root /var/www/example1.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example1.com www.example1.com;
location / {
try_files $uri $uri/ =404;
}
}
现在我们有了服务器块文件,我们需要启用它们。我们可以通过创建从这些文件到启用站点的目录的符号链接来做到这一点,Nginx 在启动过程中读取该目录。
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
现在你可以尝试重新启动 nginx。 现在应该可以工作了。 祝你好运。