我在 AWS 上创建了一个 CentOS 7 EC2 实例,并安装了 nginx 作为我的 Web 服务器。然而,与 Apache 不同的是,它没有创建 /var/www 文件夹,而是创建了 /usr/share/nginx/html。
我更愿意将我的网站文件上传到 /var/www。虽然我对 Linux 终端有一些经验(我主要是 Windows 开发人员),但我想知道为 PHP 网站(Yii2 Framework)创建 /var/www 文件夹的正确方法是什么。
我确实使用了 mkdir,但 Filezilla 在上传文件和创建子目录时出现权限被拒绝错误。我可以对目录进行 chown,但我不确定这是否安全或正确的做法。我要设置该文件夹什么权限?
编辑
也许这个问题有点令人困惑......
Filezilla 配置正确,我可以上传到其他目录。这是一个文件/文件夹权限问题,我需要在 mkdir 之前添加 sudo 前缀来创建 /var/www 文件夹或其中的任何文件夹,而 Filezilla 不这样做。
问题不在于如何重新配置 nginx 文件夹,而是在为 nginx 创建 /var/www 文件夹时应该记住什么(安全性)。我应该授予什么权限,这样我就不需要 sudo mkdir。我假设最好不要将所有权(chown)授予根或其他东西。
只是想确定一下,因为这将是一个生产服务器。
答案1
在安装了 Apache 的典型系统上,/var/www
确实如您所期望的那样存在,但它是由 root 用户拥有:
~$ ls -ld /var/www
drwxr-xr-x 3 root root 4096 Aug 7 2016 /var/www
如果您希望网站的内容由 root 以外的用户拥有,则需要创建一个由您希望管理网站文件的用户拥有的目录(作为 root),或者创建一个符号链接/var/www/html
指向 ngnix 已经为你创建的文档根目录。不管怎样,该目录可能是还由 root 用户拥有。您可以将chown
其分配给要管理网站内容的角色用户,创建一个指向该角色用户拥有的不同目录的虚拟主机(使用 Apache 的说法),或者找到类似的解决方案。
如果文档根目录由 root 用户拥有,则只有 root 用户可以更改其内容,这意味着您必须以 root 身份进行身份验证才能上传新文件。更换所有者或从不同的位置提供服务可能是最好的选择。
用 ngnix 的话说,虚拟主机也称为服务器块;您可以找到/etc/ngnix/sites-available/
可以链接到的示例(通常)/etc/ngnix/sites-enabled
。使用服务器块时的关键是使用server_name
(ngnix) 或ServerName
(Apache) 指令来指示要在 HTTP 请求标头中查找的主机名。示例 ngnix 服务器块文件可能类似于:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
该root
指令指定在文件系统上的何处查找要提供的实际文件。如果您有一个 user websiteadmin
,您可以将其指定为/home/websiteadmin/var/www/html
或您喜欢的任何目录。