应用配置
Winter 的所有配置文件都存储在config/
目录。选项通常直接记录在配置文件中,因此建议浏览这些文件以熟悉可用的选项。
网络服务器配置
Winter 具有应应用于您的网络服务器的基本配置。常见的网络服务器及其配置可以在下面找到。
阿帕奇配置
如果您的网络服务器正在运行 Apache,则有一些额外的系统要求:
-
mod_rewrite
应该安装 -
AllowOverride
选项应该打开
在某些情况下,您可能需要在.htaccess
文件:
##
## You may need to uncomment the following line for some hosting environments,
## if you have installed to a subdirectory, enter the name here also.
##
# RewriteBase /
如果您已经安装到子目录,您还应该添加子目录的名称:
RewriteBase /mysubdirectory/
Nginx 配置
在 Nginx 中配置您的站点需要进行一些小的更改。
nano /etc/nginx/sites-available/default
在中使用以下代码server 部分。如果您已将 Winter 安装到子目录中,请替换第一个/
在目录 Winter 的位置指令中安装在:
location / {
# Let Winter CMS handle everything by default.
# The path not resolved by Winter CMS router will return Winter CMS's 404 page.
# Everything that does not match with the whitelist below will fall into this.
rewrite ^/.*$ /index.php last;
}
# Pass the PHP scripts to FastCGI server
location ~ ^/index.php {
# Write your FPM configuration here
}
# This may be needed to allow error codes to be handled correctly through Winter CMS.
# This will also pass any error codes sent from PHP-FPM.
error_page 404 = /index.php;
# Whitelist
## Let Winter handle if static file not exists
location ~ ^/favicon\.ico { try_files $uri /index.php; }
location ~ ^/sitemap\.xml { try_files $uri /index.php; }
location ~ ^/robots\.txt { try_files $uri /index.php; }
location ~ ^/humans\.txt { try_files $uri /index.php; }
# Block access to all dot files and folders except .well-known
location ~ /\.(?!well-known).* { deny all; }
## Let nginx return 404 if static file not exists
location ~ ^/storage/app/uploads/public { try_files $uri 404; }
location ~ ^/storage/app/media { try_files $uri 404; }
location ~ ^/storage/app/resized { try_files $uri 404; }
location ~ ^/storage/temp/public { try_files $uri 404; }
location ~ ^/modules/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/behaviors/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/behaviors/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/widgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/widgets/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/formwidgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/formwidgets/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/reportwidgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/reportwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/behaviors/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/behaviors/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/reportwidgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/reportwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/formwidgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/formwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/widgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/widgets/.*/resources { try_files $uri 404; }
location ~ ^/themes/.*/assets { try_files $uri 404; }
location ~ ^/themes/.*/resources { try_files $uri 404; }
Lighttpd配置
如果您的网络服务器正在运行 Lighttpd,您可以使用以下配置来运行 Winter CMS。使用您喜欢的编辑器打开您的站点配置文件。
nano /etc/lighttpd/conf-enabled/sites.conf
将以下代码粘贴到编辑器中并更改主机地址 和server.document-root 以匹配您的项目。
$HTTP["host"] =~ "domain.example.com" {
server.document-root = "/var/www/example/"
url.rewrite-once = (
"^/(plugins|modules/(system|backend|cms))/(([\w-]+/)+|/|)assets/([\w-]+/)+[-\w^&'@{}[\],$=!#().%+~/ ]+\.(jpg|jpeg|gif|png|svg|swf|avi|mpg|mpeg|mp3|flv|ico|css|js|woff|ttf)(\?.*|)$" => "$0",
"^/(system|themes/[\w-]+)/assets/([\w-]+/)+[-\w^&'@{}[\],$=!#().%+~/ ]+\.(jpg|jpeg|gif|png|svg|swf|avi|mpg|mpeg|mp3|flv|ico|css|js|woff|ttf)(\?.*|)$" => "$0",
"^/storage/app/uploads/public/[\w-]+/.*$" => "$0",
"^/storage/app/media/.*$" => "$0",
"^/storage/app/resized/.*$" => "$0",
"^/storage/temp/public/[\w-]+/.*$" => "$0",
"^/(favicon\.ico)$" => "$0",
"(.*)" => "/index.php$1"
)
}
IIS 配置
如果您的网络服务器正在运行 Internet 信息服务 (IIS),您可以在您的web.config 运行 Winter CMS 的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Winter CMS to handle all non-whitelisted URLs" stopProcessing="true">
<match url="^index.php" negate="true" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="/.well-known/*" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="/storage/app/uploads/public/.*" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="/storage/app/media/.*" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="/storage/app/resized/.*" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="/storage/temp/public/.*" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="/themes/.*/(assets|resources)/.*" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="/plugins/.*/(assets|resources)/.*" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="/modules/.*/(assets|resources)/.*" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
应用配置
调试模式
调试设置位于config/app.php
配置文件与debug
参数,默认情况下启用。
启用后,此设置将在它们与其他调试功能一起出现时显示详细的错误消息。虽然在开发过程中很有用,但在实际生产站点中使用时应始终禁用调试模式。这可以防止向最终用户显示潜在的敏感信息。
调试模式在启用时使用以下功能:
Important: 总是设置
app.debug
设置为false
对于生产环境。
安全模式
安全模式设置位于config/cms.php
配置文件与enableSafeMode
范围。默认值为null
.
如果启用安全模式,出于安全原因,CMS 模板中的 PHP 代码部分将被禁用。如果设置为null
, 安全模式开启时调试模式 被禁用。
CSRF保护
Winter 提供了一种简单的方法来保护您的应用程序免受跨站点请求伪造。首先,一个随机令牌被放置在您的用户会话中。然后当一个使用打开表单标签 令牌被添加到页面并随每个请求一起提交回来。
默认情况下启用 CSRF 保护,您可以使用enableCsrfProtection
中的参数config/cms.php
配置文件。
前沿更新
Winter 平台和一些市场插件将分两个阶段实施变更,以确保平台的整体稳定性和完整性。这意味着他们有一个测试构建 除了默认稳定构建.
您可以通过更改edgeUpdates
中的参数config/cms.php
配置文件。
/*
|--------------------------------------------------------------------------
| Bleeding edge updates
|--------------------------------------------------------------------------
|
| If you are developing with Winter, it is important to have the latest
| code base, set this value to 'true' to tell the platform to download
| and use the development copies of core files and plugins.
|
*/
'edgeUpdates' => false,
NOTE: 对于插件开发人员,我们建议启用测试更新 对于您在市场上列出的插件,通过插件设置页面。
NOTE: 如果使用Composer 管理更新,然后替换您的默认 Winter CMS 要求
composer.json
文件包含以下内容,以便直接从开发分支下载更新。
"winter/storm": "dev-develop as 1.0",
"winter/wn-system-module": "dev-develop",
"winter/wn-backend-module": "dev-develop",
"winter/wn-cms-module": "dev-develop",
"laravel/framework": "~6.0",
使用公用文件夹
为了在生产环境中获得最终的安全性,您可以将 Web 服务器配置为使用public/ 文件夹以确保只能访问公共文件。首先,您需要使用winter:mirror
命令。
php artisan winter:mirror public/
这将创建一个名为public/ 在项目的基本目录中,从这里您应该修改网络服务器配置以使用此新路径作为主目录,也称为wwwroot.
NOTE: 以上命令可能需要系统管理员或sudo 特权。它也应该在每次系统更新后或安装新插件时执行。
使用共享托管服务提供商
如果您与其他用户共享一台服务器,您应该表现得就好像您邻居的站点受到了威胁一样。确保所有带有密码的文件(例如 CMS 配置文件,如config/database.php
) 无法从其他用户帐户读取,即使他们找出您文件的绝对路径。将这些重要文件的权限设置为 600(只对所有者读写,其他任何人都不能读写)是个好主意。
您可以在文件位置设置此保护config/cms.php
在标题为默认权限掩码.
/*
|--------------------------------------------------------------------------
| Default permission mask
|--------------------------------------------------------------------------
|
| Specifies a default file and folder permission for newly created objects.
|
*/
'defaultMask' => ['file' => '644', 'folder' => '755'],
NOTE:不要忘记手动检查文件是否已设置为 644,因为您可能需要进入您的 cPanel 并进行设置。
仅后端模式
Winter CMS 可以配置为仅在安装后端模块的情况下运行,因此允许 Winter CMS 用于独立的应用程序。这对于管理 API 数据或管理无头 CMS 可能很有用。
您可以通过对您的文件进行以下更改来禁用 CMS 模块运行config/cms.php
文件在您的 Winter CMS 安装中。
'backendUri' => '', // Set to an empty string to use the root domain or subdomain.
'loadModules' => ['System', 'Backend'], // Remove 'Cms' to not use the CMS module.
这允许托管 Winter CMS 安装的根域或子域在访问浏览器中的 URL 时立即加载后端。
进行这些更改后,您可以删除modules/cms
从您的项目中删除文件夹,因为不再需要它们。
如果您安装了 Winter CMS通过作曲家,你可以删除winter/wn-cms-module
线在require
块内composer.json
文件位于 Winter CMS 安装的根文件夹中,这将阻止 Composer 安装或更新 CMS 模块。
NOTE: 某些插件可能会引用 CMS 模块中的类。如果是这种情况,您将需要在您的安装中保留 CMS 模块文件。
可信主机
Winter CMS 提供对受信任主机的支持,这是一种安全功能,可指定您的站点在接收请求时将接受和响应的域。使用此功能将防止恶意用户从用户那里钓鱼数据或劫持对您网站的请求。
默认情况下,此功能被禁用,因为这种保护通常应在服务器配置级别应用,但可以通过trustedHosts
内的配置值config/app.php
.通过将此值设置为true
,您的站点将被设置为仅接受对中提供的 URL 的请求url
同一个文件中的配置值。或者,如果您的站点在多个域上可用,您可以指定一个域数组,您将在这些域中接受来自这些域的请求。
'trustedHosts' => true,
'trustedHosts' => [
'example.com', // Matches just example.com
'www.example.com', // Matches just www.example.com
'^(.+\.)?example\.com$', // Matches example.com and all subdomains
'https://example.com', // Matches just example.com
],
可信代理
对于通过代理主机运行的站点,例如 CloudFlare 或 Amazon Elastic Load Balancing,可以将 Winter CMS 配置为信任来自代理的请求。在安全 HTTPS 连接的情况下可能需要这样做,因为某些代理会在将(不安全的)请求发送到您的主机服务器之前终止其端的 SSL 连接。
如果您的站点强制使用 SSL 连接(即您启用了cms.backendForceSecure
配置)没有可信代理,用户的请求可能会被拒绝,甚至被迫进入重定向循环。
要启用受信任的代理,您可以设置trustedProxies
和trustedProxyHeaders
配置值在config/app.php
.
这trustedProxies
value 指定将从中接受代理连接的 IP 地址,可以是逗号分隔的字符串,也可以是数组。您也可以使用'*'
允许所有代理请求。
// To trust all proxies:
'trustedProxies' => '*',
// To trust two IP addresses as proxies
'trustedProxies' => '192.168.1.1, 192.168.1.2',
'trustedProxies' => ['192.168.1.1', '192.168.1.2'],
这trustedProxyHeaders
value 指定从代理转发时允许哪些标头定义请求。默认情况下,您通常会允许所有标头,但您可以根据您的特定需求对其进行微调。
// To trust all headers
'trustedProxyHeaders' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,
// To trust only the hostname
'trustedProxyHeaders' => Illuminate\Http\Request::HEADER_X_FORWARDED_HOST,
// To trust the hostname, IP and port
'trustedProxyHeaders' => Illuminate\Http\Request::HEADER_X_FORWARDED_FOR
| Illuminate\Http\Request::HEADER_X_FORWARDED_HOST
| Illuminate\Http\Request::HEADER_X_FORWARDED_PORT
NOTE: Amazon Elastic Load Balancing 用户必须使用
HEADER_X_FORWARDED_AWS_ELB
接受正确标题的选项。'trustedProxyHeaders' => Illuminate\Http\Request::HEADER_X_FORWARDED_AWS_ELB
环境配置
定义基础环境
根据应用程序运行的环境使用不同的配置值通常很有帮助。您可以通过设置APP_ENV
默认情况下设置为的环境变量production.有两种常见的方法可以更改此值:
-
放
APP_ENV
直接与您的网络服务器相关联。例如,在 Apache 中,可以将这一行添加到
.htaccess
或者httpd.config
文件:SetEnv APP_ENV "dev"
-
创建一个.env 根目录下的文件,内容如下:
APP_ENV=dev
在以上两个示例中,环境都设置为新值dev
.现在可以在路径中创建配置文件config/dev 并将覆盖应用程序的基本配置。
例如,使用不同的 MySQL 数据库dev
仅环境,创建一个名为config/dev/database.php 使用此内容:
<?php
return [
'connections' => [
'mysql' => [
'host' => 'localhost',
'port' => '',
'database' => 'database',
'username' => 'root',
'password' => ''
]
]
];
领域驱动环境
Winter 支持使用由特定主机名检测到的环境。您可以将这些主机名放在环境配置文件中,例如,config/environment.php.
当通过以下方式访问应用程序时,使用下面的文件内容global.website.tld 环境将设置为global
其他人也一样。
<?php
return [
'hosts' => [
'global.website.tld' => 'global',
'local.website.tld' => 'local',
]
];
转换为 DotEnv 配置
作为替代基础环境配置 您可以在环境中放置通用值而不是使用配置文件。然后使用访问配置DotEnv 句法。跑过winter:env
将通用配置值移动到环境的命令:
php artisan winter:env
这将创建一个.env 项目根目录下的文件,修改配置文件即可使用env
辅助功能。第一个参数包含在环境中找到的键名,第二个参数包含一个可选的默认值。
'debug' => env('APP_DEBUG', true),
你的.env
文件不应提交给您的应用程序的源代码管理,因为使用您的应用程序的每个开发人员或服务器可能需要不同的环境配置。
同样重要的是,您的.env
生产中的公众无法访问该文件。为此,您应该考虑使用公共文件夹.