Centos下Apache/Nginx使用Symlink访问外部目录出现403
错误状况:
- 在Aapche的document root 下创建软链到其他目录时, 无法从浏览器访问, 返回403错误,日志显示错误13: Permission denied
- Nginx配置了location 指向/etc/nginx以外的其他目录,也无法从浏览器访问, 返回403错误,日志显示错误13: Permission denied
主要检查两点
- 软链目标目录的每一级, 都要对所有人开放执行权限, 即对目录 chmod -R 711
- 检查selinux的状态 /usr/sbin/getenforce, 如果是enforcing, 执行 setenforce 0 关闭selinux试试能不能访问, 如果能的话, 就是目录的安全策略问题. 需要对目标目录设置
用nginx的工作进程对应的用户, 去检查是否能访问对应目录, 这个同样适用于正常文件系统设置为root directory时出现13: Permission denied
的情况
# 如果 Permission denied 无法访问, 则在 nginx 里一样无法访问
$ sudo -u milton namei /home/tomcat/html/pronto-demo/index.html
f: /home/tomcat/html/pronto-demo/index.html
d /
d home
d tomcat
html - Permission denied
这样的才可以访问
$ sudo -u milton namei /home/tomcat/html/pronto-demo/index.html
f: /home/tomcat/html/pronto-demo/index.html
d /
d home
d tomcat
html - Permission denied
修改权限
chcon -R -t httpd_sys_content_t FOLDER_NAME/
# 以及(有些情况不需要)
setsebool httpd_read_user_content=1
错误状况:
- Nginx中配置了upstream,通过proxy_pass 访问本机其他端口时,返回403,日志显示错误 (13: Permission denied) while connecting to upstream
检查
- 如果关闭selinux就能访问的话,说明是selinux的问题,需要设置
# P参数代表permanent
setsebool -P httpd_can_network_connect 1
参考