【问题标题】:After setting up server blocks, Nginx is not serving my domain name设置服务器块后,Nginx 不为我的域名提供服务
【发布时间】:2021-04-04 12:02:50
【问题描述】:

我正在将我的 MERN 应用程序部署到 Digital Ocean droplet(Ubuntu 20.04 服务器)。

我按照以下教程中的步骤安装 Nginx。 [我已经完成了前面的所有步骤]

https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04

当我访问http://134.122.112.22 时,正如预期的那样,我看到了 Nginx 登录页面。

但是,设置服务器块后,当我访问http://sundaray.io 时,我收到以下错误。

sundaray.io是我的域名。

当我运行命令 /var/log/nginx/error.log 时,我看到以下内容:

我该如何解决这个错误?

EDIT-1

服务器块 为了创建服务器块,我按顺序执行了以下命令:

  1. mkdir -p /var/www/sundaray.io/html
  2. nano /etc/nginx/sites-available/sundaray.io 然后,我粘贴了以下配置块。
server {
        listen 80;
        listen [::]:80;

        root /var/www/sundaray.io/html;
        index index.html index.htm index.nginx-debian.html;

        server_name sundaray.io www.sundaray.io;

        location / {
                try_files $uri $uri/ =404;
        }
}

错误 执行命令cat /var/log/nginx/error.log 给了我以下结果:

EDIT-2

执行chown -R nginx:nginx /var/www/sundaray.io/html 抛出以下错误:

EDIT-3

执行ps -elf |grep nginx得到以下结果:

EDIT-4 当我执行命令ls /var/www/sundaray.io/html 时,得到以下结果:

【问题讨论】:

  • /var/log/nginx/error.log 不是命令,它是一个包含服务器所有错误的文本文件。您可以使用 less、tail 或 cat 命令查看此文件的内容。为了调试,您应该提供 nginx 配置文件。
  • 运行命令cat /var/log/nginx/error.log
  • 共享服务器块详细信息
  • @HarshManvar 我在问题edit-1中添加了详细信息。
  • @HKS Nginx 无法获得您的文件系统权限。更改文件系统权限'chmod 777 /var/www/sundaray.io/html'

标签: nginx webserver web-deployment digital-ocean nginx-reverse-proxy


【解决方案1】:

1。 chmod 777 绝不是个好主意。

NGINX 在运行用户下运行。如何查看runuser:

ps -elf |grep nginx。通常它将是nginx。而不是777(对所有人开放)做chmod -R 755 /path/to/folder和chown -R nginx:nginx /path/to/folder

但是同意。对于故障排除,可以使用它。但回到你的问题。

2。目录列表已禁用。

错误是告诉你 nginx 无法列出目录内容。这是默认行为。确定

root /var/www/sundaray.io/html;

这条路径存在并且

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

找到这些文件之一!

没有这些文件,NGINX 无法加载/ 上的默认索引文件。在/var/www/sundaray.io/html 里放点东西

printf "<html>\n<body>\n<h1>Hello from NGINX</h1>\n</body>\n</html>" > /var/www/sundaray.io/html/index.html && chown nginx:nginx /var/www/sundaray.io/html/index.html。这应该会为您生成一个 index.html。

如果您只想在没有任何文件的情况下测试您的服务器配置:

location / {
  return 200 "Hello on $host$uri\n";
}

【讨论】:

  • 这里有很多东西要消化。 [我以前从未部署到数字海滴]。所以,如果我理解正确,现在我必须执行这两个命令:chmod -R 755 /var/www/sundaray.io/html 和chown -R nginx:nginx /var/www/sundaray.io/html。我说的对吗?
  • yes - 如果 nginx 是您的 nginx 工作进程的运行用户。那是默认行为。这样做,您必须在配置的 webroot 中至少有一个 index.html 文件。 printf "<html>\n<body>\n<h1>Hello from NGINX</h1>\n</body>\n</html>" > /var/www/sundaray.io/html/index.html && chown nginx:nginx /var/www/sundaray.io/html/index.html 会做到的
  • 在 DO 中运行 NGINX 与在本地 Linux VM 上运行 NGINX 没有什么不同。所以如果你想先在本地测试它会很好。
  • 执行chown -R nginx:nginx /var/www/sundaray.io/html命令时出错。请参阅问题中的 EDIT-2。
  • @hks 尝试:chown -R root:root /var/www/sundayray.io/html
猜你喜欢
  • 1970-01-01
  • 2017-05-22
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 2011-02-10
  • 2011-11-11
相关资源
最近更新 更多