修改docroot以提高安全性

在使用Apache Web Server进行的标准安装中,Adobe Commerce安装到默认Web根目录: /var/www/html/magento2

magento2/目录包含以下内容:

  • pub/
  • setup/
  • var/

/var/www/html/magento2/pub为该应用程序提供服务。 由于可从浏览器访问,因此文件系统的其余部分易受攻击。
将webroot设置为pub/目录可阻止站点访客从浏览器访问文件系统的敏感区域。

本主题介绍如何更改现有实例上的Apache docroot以从pub/目录提供文件,这种方式更安全。

关于nginx的说明

如果您使用的是nginx以及安装目录中包含的nginx.conf.sample文件,则您可能已经在提供来自pub/目录的文件。

在定义站点的服务器块中使用时,nginx.conf.sample配置将覆盖服务器的docroot设置,以提供来自pub/目录的文件。 例如,请参见以下配置中的最后一行:

# /etc/nginx/sites-available/magento

upstream fastcgi_backend {
   server  unix:/run/php/php7.4-fpm.sock;
}

server {

         listen 80;
         server_name 192.168.33.10;
         set $MAGE_ROOT /var/www/html/magento2ce;
         include /var/www/html/magento2ce/nginx.conf.sample;
}

开始之前

要完成本教程,您需要访问在LAMP栈栈上运行的工作安装:

  • Linux
  • Apache (2.4+)
  • MySQL (5.7及更高版本)
  • PHP (7.4)
  • Elasticsearch(7.x)或OpenSearch (1.2)
  • Adobe Commerce (2.4+)
NOTE
有关详细信息,请参阅先决条件安装指南

1.编辑服务器配置

虚拟主机文件的名称和位置取决于您运行的Apache版本。 此示例显示了Apache v2.4上虚拟主机文件的名称和位置。

  1. 登录到应用程序服务器。

  2. 编辑您的虚拟主机文件:

    code language-bash
    vim /etc/apache2/sites-available/000-default.conf
    
  3. 将指向pub/目录的路径添加到DocumentRoot指令:

    code language-conf
    <VirtualHost *:80>
    
             ServerAdmin webmaster@localhost
             DocumentRoot /var/www/html/magento2ce/pub
    
             ErrorLog ${APACHE_LOG_DIR}/error.log
             CustomLog ${APACHE_LOG_DIR}/access.log combined
    
             <Directory "/var/www/html">
                         AllowOverride all
             </Directory>
     </VirtualHost>
    
  4. 重新启动Apache:

    code language-bash
    systemctl restart apache2
    

2.更新您的基本URL

如果在安装了应用程序(例如http://192.168.33.10/magento2)时,将目录名称附加到服务器的主机名或IP地址以创建基本URL,则需要将其删除。

NOTE
192.168.33.10替换为您的服务器主机名。
  1. 登录到数据库:

    code language-bash
    mysql -u <user> -p
    
  2. 指定安装应用程序时创建的数据库:

    code language-shell
    use <database-name>
    
  3. 更新基本URL:

    code language-shell
    UPDATE core_config_data SET value='http://192.168.33.10' WHERE path='web/unsecure/base_url';
    

3.更新环境文件php

将以下节点附加到env.php文件。

'directories' => [
    'document_root_is_pub' => true
]

有关详细信息,请参阅env.php引用

4.切换模式

应用程序模式(包括productiondeveloper)旨在提高安全性并使开发更容易。 根据名称建议,在扩展或自定义应用程序时,您应该切换到developer模式,在实时环境中运行时应该切换到production模式。

在模式之间切换是验证服务器配置是否正常运行的重要步骤。 您可以使用CLI工具在模式之间切换:

  1. 转到安装目录。

  2. 切换到production模式。

    code language-bash
    bin/magento deploy:mode:set production
    
    code language-bash
    bin/magento cache:flush
    
  3. 刷新浏览器并验证店面是否正确显示。

  4. 切换到developer模式。

    code language-bash
    bin/magento deploy:mode:set developer
    
    code language-bash
    bin/magento cache:flush
    
  5. 刷新浏览器并验证店面是否正确显示。

5.验证店面

在Web浏览器中转到店面以验证一切正常。

  1. 打开Web浏览器,并在地址栏中输入服务器的主机名或IP地址。 例如,http://192.168.33.10

    下图显示了一个店面页面的示例。 如果它显示如下,则表示您的安装成功!

    验证安装成功的店面

    如果页面显示404(未找到)或无法加载图像、CSS和JS等其他资产,请参阅疑难解答部分

  2. 尝试从浏览器访问应用程序目录。 在地址栏中将目录名称附加到服务器的主机名或IP地址:

    如果您看到404或“访问被拒绝”消息,则表示您已成功限制对文件系统的访问。

    访问被拒绝

recommendation-more-help
0f8e7db5-0e9c-4002-a5b8-a0088077d995