虚拟机centos6下nginx自定义目录访问报403的解决记录

3 篇文章 0 订阅
2 篇文章 0 订阅

前言

笔者在mac上装VMWARE,再装了minimal-ceotos6.10,网络设置好后(宿主机和虚拟机互相能ping通且虚拟机能上网),在教程指导下装nginx,在宿主机通过虚拟机的ip访问,正常,但新增虚拟主机(指定到非原给定的目录),访问报403。经过层层试验,最终发现是SELinux默认开启了导致。记录下解决过程中的尝试。

正文

1. 新建虚拟主机

  • 域名为demo.com, 访问目录为/services/demo
1.1 服务端配置
# 创建自定义访问目录
mkdir -p /services/demo
vim /services/demo/index.html
# 输入Hello Nginx,wq保存退出

# 复制原虚拟主机配置文件
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/demo.conf
vim /etc/nginx/conf.d/demo.conf

# 修改    
server_name  demo.com;	# 改

location / {
    root   /services/demo;	# 改
    index  index.html index.htm;
}

# 保存退出后,重启nginx或重新加载配置文件
service nginx restart	# 重启服务
nginx -s reload		# 重新加载配置文件


# 查看虚拟机ip,看eth的inet addr,如此处是192.168.211.128
ifconfig

# 输出
eth0      Link encap:Ethernet  HWaddr 00:0C:29:9B:C2:CA  
          inet addr:192.168.211.128  Bcast:192.168.211.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe9b:c2ca/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:566 errors:0 dropped:0 overruns:0 frame:0
          TX packets:312 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:65758 (64.2 KiB)  TX bytes:62635 (61.1 KiB)
1.2 客户端配置域名解析
  • mac下的配置,windows同理,找到hosts文件即可。
vim /etc/hosts

# 添加域名解析 demo.com	192.168.211.128
# 这个ip是虚拟机的ip
1.3 访问
  1. 浏览器直接输入ip,访问正常
  2. 输入刚配置的demo.com,报403。开始排查原因

2 防火墙问题?

应该不是,刚做好的虚拟机,没做任何特殊配置,直接输入ip能正常访问的,证明端口是通。其实没想明白当前情况是否一定与防火墙无关,但不管了,先关再说。(后面证实我遇到的情况是与防火墙无关的)。

service iptables status
# 输出一堆规则,有点难懂,先不管
service iptables stop

关了后再访问,情况依旧。

  • 后来想明白,一个排除是防火墙问题的方法,看nginx访问日志,错误日志。按理来说,防火墙是先于nginx的,如果响应为403的请求,在nginx错误日志有记录,那么肯定与防火墙无关了。查看方法如下

    tail -f /var/log/nginx/error.log
    
    # 我的输出显示是
    /services/demo/index.html" is forbidden (13: Permission denied),......
    

这里note一下:应该首先想起看错误日志,错误提示之类的。再结合自己的猜测,防火墙?文件权限?虚拟主机配置错误? 因为猜测可以有无限种,但错误日志能快速过滤大部分。

3 虚拟主机配置问题或自定义目录的权限?

  1. nginx -t测试过配置文件无语法错误,且我是复制原虚拟主机配置,只改了两个小地方的。应该不是。

  2. 文件目录权限,不管那么多,直接777,先弄通再考虑最优设置。

    chmod -R 777 /services
    

    再次访问,依然403。有点蒙了。

  3. 怀疑自己,可能是虚拟主机没配好,可能是文件用户与http请求访问用户的问题(当时对这块知识比较模糊)。运用初中学的知识,控制变量法。目前我有一套能成功访问例子(虚拟主机配置文件和具体访问目),一套不成功的。做一下尝试

    1. 好的虚拟主机配置,指向坏的目录。fail
    2. 坏的虚拟主机,指向好的目录。success。

    很明显,是自定义目录问题。

  4. 但,已经最外层目录到具体文件都设为777了,按理是不存在文件无法读,执行的问题的。因为流程是这样的,首先

    vim /etc/nginx/nginx.conf`
    # 内容有
    user  nginx;
    

即意思是,客户端发http请求到了服务端的nginx层, 是通过linux系统中的nginx用户去读写执行对应文件的,(这个nginx用户是安装nginx是自动添加的)。可以将上面的user改为root,但我认为无必要,改为777意味着非同组用户都有读写执行权限,我自定义的目录文件确实是root用户拥有的,但改为777,任何用户都有rwx权限。

4 最终解决

实在没思路了,上网搜nginx 403,一堆解决方案。我的是因为SELinux开启了,导致无权限访问。SELinux这东西是安全相关的,但貌似因为学习难度大,很多运维都把它关了~,而虚拟机装的centos6默认是开启的…

# 查看selinux状态
/usr/sbin/sestatus

vi /etc/selinux/config
# 注释下面这个
# SELINUX=enforcing
# 添加这个
SELINUX=disabled

# 重启
reboot

5 注意事项

  • nginx修改配置后记得nginx -s reload重新加载配置文件,无需重新启动,一般也不需要nginx -t测试,因为reload有问题,会报错的。

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值