我应该将我的 /var/www 目录符号链接到我的家吗?

Cra*_*aig 21 lamp webserver sftp

我刚刚安装了带有 LAMP 设置的 Ubuntu Server 10.04。我想在那里托管一个网站,但我不确定哪个是在服务器上获取/编辑我的文件的最佳方式。谷歌搜索提供了很多选择,但我不确定哪个是最好的?

除非有更好的选择,否则我想在另一台 PC(Windows 或 Linux)上创建页面并使用 SFTP 将更改同步到服务器 - 但我是对 ~/ 中的符号链接文件夹执行此操作还是通过更改权限在 /var/www/ 文件夹上?

Mar*_*ppi 21

每个设置都不一样。对我来说,我在每个托管网站的服务器上都有很多用户,对您来说,您可能不需要在系统上创建多个用户。但是,如果您在此服务器上管理多个网站,则此设置将帮助您以比标准 LAMP 设置更容易的方式管理、配置和调试每个域。为了实现这一点,我使用了 Apache 的几个设备来解决权限错误。

首先,这是我使用的文档结构:

/home/[USER]/domains/[DOMAIN]/html
/home/[USER]/domains/[DOMAIN]/logs
Run Code Online (Sandbox Code Playgroud)

每个用户都有自己的带有域文件夹的帐户(我添加到该文件夹​​中,/etc/skel因此每次都会创建它。每个域在domains带有html文件夹的文件夹中都有自己的文件夹(我有我的原因,主要是因为域可以在外部拥有 Web 文件)公共领域)。请随意修改您认为合适的结构,只需记住在整个帖子中进行这些更改。

其次,我托管了很多 PHP 站点,因此我在配置中使用了 suPHP。默认情况下,标准存档包没有启用正确的编译标志,从而导致 suPHP 的安全性较低。我已经制作了我自己的 suPHP 包,我在我的服务器上使用了它,安装说明如下。suPHP 允许您定义应作为什么用户 PHP 脚本执行(其中包括:每个站点的自定义 php.ini 等)。我还为 Apache 启用了 suExec - 进一步消除了对 www-data 用户(我鄙视的用户)拥有任何所有权的需要。

首先确保您的服务器上安装了 Apache 和所有其他服务。确保它们至少在工作。之后,我建议安装suphp-common 和所需的 libapache2-mod-suphp 模块(更多信息:什么是 PPA 以及如何使用它们?)。然后,在这些安装之后,使用激活 suPHP 和 suexeca2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart
Run Code Online (Sandbox Code Playgroud)

接下来是配置文件。我制作了各种工具,每次添加新站点时都会自动生成配置文件;但是,这是我使用的基本模板:

<VirtualHost *:80>
    ServerAdmin [EMAIL]
    ServerName [DOMAIN]
    ServerAlias www.[DOMAIN] [DOMAIN]
    DocumentRoot /home/[USER]/domains/[DOMAIN]/html

    <Directory /home/[USER]/domains/[DOMAIN]>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
    </Directory>

    ErrorLog /home/[USER]/domains/[DOMAIN]/logs/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /home/[USER]/domains/[DOMAIN]/logs/access.log combined

    SuexecUserGroup [USER] [USER]

    suPHP_UserGroup [USER] [USER]
    suPHP_ConfigPath /home/[USER]/etc
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这会为该域、文档根以及域运行的所有其他基本必需品设置日志记录。我将这些文件放在/etc/apache2/sites-available/通常命名的位置[USER]-[DOMAIN]并启用/禁用它们,a2ensite如下所示:

sudo a2ensite [USER]-[DOMAIN]
sudo a2dissite [USER]-[DOMAIN]
Run Code Online (Sandbox Code Playgroud)

每次修改配置文件后,Apache 都需要重新加载

sudo /etc/init.d/apache reload
Run Code Online (Sandbox Code Playgroud)

虽然设置获得的灵活性似乎很多,但在我看来,远远超过设置时间。虽然您只需要一个单用户网络服务器,但将来如果您想要单用户网络服务器以外的任何东西,您将需要执行进一步的操作(或者只是一起放弃安全性)才能这样做。


Aze*_*ale 11

Sftp 很容易安装。只需安装该软件包openssh-server,您就会拥有 sftp。如果您可以从 Internet 获取密码,请确保您的用户拥有正确的密码。(8+ 个字符,不是字典词,有符号和数字)。

对于权限,我通常这样做。
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
然后您应该能够通过连接 sftp(使用您的用户名和密码)来发布页面,然后转到 /var/www 文件夹并将您的文件放在那里。

  • 这是在不破坏文件权限的情况下将文件放入单实例 Web 服务器上正确位置的最简单方法。:) 此外,可以使用 rsync 代替 sftp。两者都在幕后使用 SSH(我建议使用 ssh 密钥而不是密码,但有人已经提到了这一点)。 (2认同)