Nginx 显示欢迎页面/403 错误而不是主页

Posted

技术标签:

【中文标题】Nginx 显示欢迎页面/403 错误而不是主页【英文标题】:Nginx Showing Welcome Page/403 Error instead of homepage 【发布时间】:2019-11-13 09:28:26 【问题描述】:

我正在使用 CentOs 6.8

在开发模式下使用 CloudFlare DNS

nginx 显示欢迎页面,从

/usr/share/nginx/html

但不是来自:

/home/nginx/domains/XYZDomain.com/public/

在目录中:

/etc/nginx/conf.d

2 个配置文件:

default.conf virtual.conf

default.conf 文件输出

# Main Local

server 
        listen 80;
        server_name localhost;
        root   /usr/share/nginx/html;
        index index.php index.html index.htm;


        location / 
                try_files $uri $uri/ =404;
        

        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html 
                root /usr/share/nginx/html;
        

        #
        location ~ \.php$ 
                include fastcgi_params;
                #fastcgi_pass 127.0.0.1:9000;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        

        location ~ /\. 
                deny all;
                access_log off;
                log_not_found off;
        
        location = /favicon.ico 
                log_not_found off;
                access_log off;
        
        location = /robots.txt 
                allow all;
                log_not_found off;
                access_log off;
        


virtual.conf 文件输出:

server 

            listen   80;
            #server_name  www.XYZDomain.com;
            # Now Changed to below withouth wwww.
            server_name  XYZDomain.com;
            rewrite ^/(.*) http://XYZDomain.com/$1 permanent;

            location / 

                        root   /home/nginx/domains/XYZDomain.com/public/;
                        index  index.html;

                        


/etc/nginx/nginx.conf 输出中的 nginx.conf 文件

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events 
    worker_connections  1024;



http 
    include       /etc/nginx/mime.types;
    #default_type  application/octet-stream;
    #changed to text/html
    default_type text/html;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

所有具有权限的目录。

ls -la /home/nginx/domains/XYZDomain.com

drwxr-s--- 6 root root 4096 Jul  1 12:54 .
drwxr-xr-x 3 root root 4096 Jul  2 14:44 ..
drwxr-s--- 2 root root 4096 Jun 30 15:58 backup
drwxr-s--- 2 root root 4096 Jun 30 15:58 log
drwxr-s--- 2 root root 4096 Jun 30 15:58 private
drwxr-sr-x 2 root root 4096 Jul  2 15:01 public

我试过修改default.php和virtual.conf文件

任何人都可以帮助我这有什么问题吗?我真的很困惑,为此浪费了一整天。

【问题讨论】:

您是否缺少“XYZDomain.com”的server?您似乎将“www.XYZDomain.com”重定向到“XYZDomain.com”,如果指向该主机将由default.conf 中的server 块处理。 @RichardSmith 我在virtual.conf 中将server_name www.XYZDomain.com 更改为server_name XYZDomain.com。尽管如此,它仍然在做同样的事情。对不起,我是新手,我会尽我所能。 default_type application/octet-stream; 更改为 default_type text/html; 仍然相同.. 一个好的调试步骤是禁用default.conf 并再次点击它。查看您是否获得了预期的页面或其他内容,这将让您知道它是否至少在拾取您的 virtual.conf 文件。我相信你已经知道这一点,但既然你提到你是新手,请务必在进行配置更改后重新加载 nginx。 @patrick3853 ***.com/questions/19285355/… 这帮助我将 nginx.conf 中的用户更改为 root 虽然,我想这可能是有害的? 【参考方案1】:

一种方法是将用户更改为root 但它是有害的。

第二是 将所有域文件转移到

/var/www/html/XYZDomain.com/public 代替 /home/nginx/domains/XYZDomain.com/public/

并更改了virtual.conf(在conf.d目录中)文件来自 root /home/nginx/domains/XYZDomain.com/public; root /var/www/html/XYZDomain.com/public

需要注意的是:

    检查多余的无用空格

    从网络上复制的代码可能会导致问题

    始终运行nginx -T 以检查错误

    在测试前总是重启 Nginx service nginx restart

    运行 tail -f /var/log/nginx/error.log 以检查最新的错误日志

    确保您的 Web 目录具有访问权限

    切换 SELinux,可能会导致问题。

【讨论】:

【参考方案2】:

看起来这是一个权限问题。 Nginx 以nginx 用户身份运行,但文件归root 所有,没有全局读取权限,这意味着nginx 用户看不到它们。

首先,不要以 root 身份运行 ngninx! 这非常糟糕。如果有人破坏了您的网站,他们可能拥有服务器的 root 访问权限。

有几种方法可以解决这个问题。最简单的方法是将文件的所有者更改为nginx

chown -R nginx:nginx /home/nginx/domains/XYZDomain.com

当然,您必须记住为您创建的任何新文件执行此操作

您也可以仅将文件的组更改为nginx,并使其组可读:

chgrp -R nginx /home/nginx/domains/XYZDomain.com
chmod -R g+r /home/nginx/domains/XYZDomain.com

第二种方式安全一点,因为nginx没有写权限,只能读取文件。但是,如果您有需要动态创建或编辑文件的脚本,这可能会导致其他问题。

还有很多关于权限和 Web 服务器的内容,其中涉及很多安全隐患,这里就不多说了。如果您有兴趣,可以在 ***.com 上找到大量信息。

【讨论】:

我总是得到 403 Forbidden nginx/1.16.0 在将用户更改为 nginx 我对所有目录:```sudo chown -R nginx:nginx /home/nginx/*sudo chown -R 0755 /home/nginx/*sudo chown -R nginx:nginx /home/nginx/domains/XYZDomain.com/*sudo chown -R 0755 /home/nginx/domains/XYZDomain.com/*sudo chown -R nginx:nginx /home/nginx/domains/XYZDomain.com/public/*sudo chown -R 0755 /home/nginx/domains/XYZDomain.com/public/*加上你说的... 尾随 > tail -f /var/log/nginx/error.log 2019/07/03 10:25:12 [error] 26313#26313: *3 "/home/nginx/domains/XYZDomain.com/public/index.html" is forbidden (13: Permission denied), client: 142.111.2xx.1xx, server: www.XYZDomain.com, request: "GET / HTTP/1.1", host: "XYZDomain.com" 检查 /etc/passwd --x-- nginx:x:498:498:nginx user:/var/cache/nginx:/sbin/nologin --x -- 这里有什么问题吗? 是的,您混淆了chownchmod。您运行的chown 0755 尝试将所有者设置为用户ID 0755,这可能不存在。如果您想更改权限(不同于所有权),请使用 chmod @Python 老实说,看起来你的权限都被提升了。我想/home/nginxnginx 用户的主目录,在这种情况下nginx 通常是所有这些文件的所有者。我猜您将domains/* 目录创建为root,这就是root 成为所有者的原因。尝试运行 just chown -R nginx:nginx /home/nginx,然后再试一次。 这是一个很好的解决方案。事实上,我更喜欢将我的根目录放在/var/www 而不是/home,因为/home 目录中的权限更严格。您当然可以做更多事情,但对于一个简单的网站,您不需要做任何其他事情。【参考方案3】:

Nginx 403 error: directory index of [folder] is forbidden

/etc/nginx/nginx.conf 中更改用户 从 nginxroot

帮助...

它有害吗?还是安全风险?现在这是一个问题......

感谢 *** 和感谢社区

【讨论】:

以上是关于Nginx 显示欢迎页面/403 错误而不是主页的主要内容,如果未能解决你的问题,请参考以下文章

php请求nginx服务器返回403

解决nginx的403错误

如何使授权属性返回自定义 403 错误页面而不是重定向到登录页面

请问Laravel5.3在Nginx1.8.1中只能显示首页,其它所有页面都显示403 Forbidden是啥原因?

为啥我的 mvc 项目重定向到默认的 403 错误页面,而不是我重定向到的页面,而不是在本地的 IIS 上?

nginx默认访问目录时显示403错误