我在CentOS 5机器上安装了带有PHP-FPM的nginx,但我很难让它为我的任何文件服务 - 无论是否PHP.
Nginx作为www-data:www-data运行,默认的"欢迎使用EPEL上的nginx"站点(由root拥有:具有644权限的root)加载正常.
nginx配置文件有/etc/nginx/sites-enabled/*.conf的include指令,我有一个配置文件example.com.conf,因此:
server {
listen 80;
Virtual Host Name
server_name www.example.com example.com;
location / {
root /home/demo/sites/example.com/public_html;
index index.php index.htm index.html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /home/demo/sites/example.com/public_html$fastcgi_script_name;
include fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
尽管public_html由www-data:www-data拥有2777文件权限,但该网站无法提供任何内容 -
[error] 4167#0: *4 open() "/home/demo/sites/example.com/public_html/index.html" failed (13: Permission denied), client: XX.XXX.XXX.XX, server: www.example.com, request: "GET /index.html HTTP/1.1", host: "www.example.com"
Run Code Online (Sandbox Code Playgroud)
我发现很多其他帖子的用户从nginx获得403s,但我见过的大部分都涉及使用Ruby/Passenger进行更复杂的设置(过去我实际上已成功)或者只是在上游PHP时收到错误-FPM参与其中,所以他们似乎没什么帮助.
我在这做过傻事吗?
我正在尝试使用laravel作为PHP框架,我已经将laravel zip解压缩到~/opt/xampp/htdocs/laravel但是当我去localhost/laravel或者localhost/laravel我收到403错误消息时说:
访问被禁止!
您无权访问请求的对象.它受读保护或服务器无法读取.
我在某处读到了我需要编辑storagelaravel里面的文件夹所以它可以读写,所以我chmod -R 766 laravel/storage仍然没有运气,我从Ubuntu 12.04这样做有没有人遇到过这个?
编辑
我有chmod -R 0+w laravel/storage,现在当我去localhost/laravel我得到一些文件的索引,但当我去localhost/laravel/public/仍然得到403错误,而不是预期的结果
编辑2
我已经设置chmod -R 765 laravel/public,现在当我得到localhost/laravel/public我得到这个消息这让我相信我越来越近了:
警告:require(/opt/lampp/htdocs/learning-laravel/laravel/laravel.php):无法打开流:第34行/opt/lampp/htdocs/learning-laravel/public/index.php中的权限被拒绝
致命错误:require():在/ opt/lampp /中打开所需的'/opt/lampp/htdocs/learning-laravel/laravel/laravel.php'(include_path ='.:/ opt/lampp/lib/php')失败第34行的htdocs/learning-laravel/public/index.php
我使用支持法语和英语的i18n构建了一个angular-5应用程序.然后,我为每种支持的语言部署了一个单独的应用程序版本
- dist
|___ en/
| |__ index.html
|___ fr/
|__ index.html
我还添加了以下nginx配置,以两种语言提供应用程序;
server {
root /var/www/dist;
index index.html index.htm;
server_name host.local;
location ^/(fr|en)/(.*)$ {
try_files $2 $2/ /$1/index.html;
}
}
我想要做的是为两个应用程序提供服务,并允许在英语和法语版本之间切换.
比方说,host.local/en/something
如果我切换到host.local/fr/something我应该得到"某事"页面的法语版本.
使用我共享的nginx配置,每次刷新我的应用程序时刷新页面都会出现404未找到的错误,这也会阻止我独立浏览我的应用程序并在它们之间切换.
我错过了什么?什么是适当的Nginx conf来实现这一目标?
我已经在默认服务器上创建了一个文件夹/var/www/default,一切都按预期进行。在该文件夹内,我使用通用~/WebstormProjects/my-project的ln -s. 它工作了一段时间,最后一次我使用 更新时apt-get,nginx 不再遵循符号链接,这给了我一个 404 错误,甚至没有像以前那样列出符号链接。
尝试使用该disable_symlinks指令,将其设置为off,但没有任何反应。也按照此链接中的步骤操作,但仍然没有任何结果。还把自己添加到www-data用户中,什么也没有。
但是,如果我nginx.conf通过将user指令更改为我自己的用户并重新启动服务器来进行编辑,确实可以工作,但我知道这是一种非常糟糕的做法,并且在将来的某一天它将不允许 PHP-FPM 工作。
那么,我该怎么做才能让 nginx 遵循符号链接,而不更改源目录的所有者呢?顺便说一句,我使用的是 Ubuntu 14.04.3 和通过包管理器安装的 nginx 1.4.6。
我真的第一次在网络(EC2)上加载 Laravel 应用程序。
我有一个运行最新 Laravel 5.6 的 Ubuntu 18.04 实例。我已经被困了几个小时试图解决 403 问题。我遵循了:
这些步骤(创建新组,向其中添加 ubuntu 和 www-data,设置组和所有者为读取、写入和执行)
这些步骤设置文件夹权限
...许多其他尝试/服务器重建...
所以刚才我把root中的所有文件和文件夹都设置为777来测试
$ find /home/ubuntu/projectname -type f -exec chmod 777 {} \;
$ find /home/ubuntu/projectname -type d -exec chmod 777 {} \;
Run Code Online (Sandbox Code Playgroud)
根据下面的建议,我也这样做了:
$ namei -l /home/ubuntu/projectname/public
f: /home/ubuntu/projectname/public
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x ubuntu ubuntu ubuntu
drwxrwxrwx www-data www-data projectname
drwxrwxrwx www-data www-data public
$ sudo chmod -R 777 /home/ubuntu/projectname
$ ls -l
drwxrwxrwx 8 www-data …Run Code Online (Sandbox Code Playgroud) nginx ×4
php ×3
laravel ×2
angular ×1
centos ×1
laravel-5.6 ×1
permissions ×1
symlink ×1
ubuntu ×1
ubuntu-14.04 ×1