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 -- 这里有什么问题吗?
是的,您混淆了chown
和chmod
。您运行的chown 0755
尝试将所有者设置为用户ID 0755,这可能不存在。如果您想更改权限(不同于所有权),请使用 chmod
@Python 老实说,看起来你的权限都被提升了。我想/home/nginx
是nginx
用户的主目录,在这种情况下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
中更改用户
从
nginx
到 root
帮助...
它有害吗?还是安全风险?现在这是一个问题......
感谢 *** 和感谢社区
爱
【讨论】:
以上是关于Nginx 显示欢迎页面/403 错误而不是主页的主要内容,如果未能解决你的问题,请参考以下文章
如何使授权属性返回自定义 403 错误页面而不是重定向到登录页面
请问Laravel5.3在Nginx1.8.1中只能显示首页,其它所有页面都显示403 Forbidden是啥原因?