配置一个Web服务器
编辑该页面配置一个Web服务器
Symfony应用程序开发的首选方法是使用ob娱乐下载ob娱乐下载Symfony本地Web服务器。
然而,在生产环境中运行应用程序时,您将需要使用一个web服务器平台。本文描述了几种方式使用Symfony Apache或Nginx。ob娱乐下载
当使用Apache,您可以配置PHP作为一个Apache模块或与FastCGI使用PHP FPM。FastCGI也是使用PHP的首选与Nginx。
公共目录
公共目录的所有应用程序的公共和静态文件,包括图像、样式表和JavaScript文件。这也是前端控制器(index . php
)的生活。
公共目录作为文档根在配置您的web服务器。在下面的例子中,公共/
将文档根目录。这个目录是/var/www/project/public/
。
如果你的托管提供商需要你改变公共/
(如目录到另一个位置。public_html /
)确保你覆盖公共/目录的位置。
添加重写规则
最简单的方法是安装apache
ob娱乐下载Symfony包通过执行下面的命令:
1
美元作曲家需要symfony / apob娱乐下载ache-pack
这包安装. htaccess
文件公共/
目录包含重写规则需要Symfony应用程序服务。ob娱乐下载
在生产服务器上,你应该移动. htaccess
规则为主要的Apache配置文件来提高性能。为此,复制. htaccess
内的内容<目录>
Symfony应用程序相关的配置ob娱乐下载公共/
目录(和替换AllowOverride所有
通过AllowOverride没有
):
1 2 3 4 5 6 7 8 9 10
< VirtualHost *: 80 >#……DocumentRoot/var/www/project/public<目录/var/www/project/public >AllowOverride没有一个# . htaccess副本内容< /目录>< /虚拟主机>
Apache使用mod_php / PHP-CGI
的最低配置使您的应用程序运行在Apache的方法是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
< VirtualHost *: 80 >ServerNamedomain.tldServerAliaswww.domain.tldDocumentRoot/var/www/project/public<目录/var/www/project/public >AllowOverride所有订单允许,拒绝允许从所有< /目录>#取消注释以下行如果你安装资产作为符号链接#或遇到问题时编译/ Sass / CoffeeScript资产少# <目录/var/www/project ># FollowSymlinks选项# < /目录>ErrorLog/var/log/apache2/project_error.logCustomLog/var/log/apache2/project_access。日志的总和< /虚拟主机>
提示
如果您的系统支持APACHE_LOG_DIR
变量,您可能想使用$ {APACHE_LOG_DIR} /
而不是硬编码/var/log/apache2/
。
使用下面的优化配置禁用. htaccess
支持和提高web服务器的性能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36
< VirtualHost *: 80 >ServerNamedomain.tldServerAliaswww.domain.tldDocumentRoot/var/www/project/publicDirectoryIndex/ index . php<目录/var/www/project/public >AllowOverride没有一个订单允许,拒绝允许从所有FallbackResource/ index . php< /目录>#取消注释以下行如果你安装资产作为符号链接#或遇到问题时编译/ Sass / CoffeeScript资产少# <目录/var/www/project ># FollowSymlinks选项# < /目录>#选择禁用的后备资源资产目录#这将允许Apache文件时返回一个404错误#没有找到而不是把请求传递给Symfonyob娱乐下载<目录/var/www/project/public/bundles >DirectoryIndex禁用FallbackResource禁用< /目录>ErrorLog/var/log/apache2/project_error.logCustomLog/var/log/apache2/project_access。日志的总和#选择设置环境变量的值在应用程序中使用# SetEnv APP_ENV刺激# SetEnv APP_SECRET < app-secret-id ># SetEnv DATABASE_URL“mysql: / / db_user: db_pass@host: 3306 / db_name”< /虚拟主机>
谨慎
使用FallbackResource
由于一个错误在Apache 2.4.25或更高,这是固定在释放导致根/
挂。
提示
如果您使用的是php-cgi,Apache没有通过HTTP基本PHP默认用户名和密码。为了解决这个限制,您应该使用以下配置代码片段:
1
RewriteRule* -[E = HTTP_AUTHORIZATION: % {HTTP:授权}]
使用mod_php / PHP-CGI Apache 2.4
在Apache 2.4中,为了允许,拒绝
已经取代了要求所有授予
。因此,你需要修改目录
权限设置如下:
1 2 3 4
<目录/var/www/project/public >需要所有授予#……< /目录>
高级的Apache配置选项,阅读官方的Apache文欧宝官网下载app档。
Apache与PHP-FPM
利用PHP-FPM与Apache,首先必须确保FastCGI程序经理php-fpm
二进制和Apache的FastCGI模块安装(例如,在一个基于Debian系统安装libapache2-mod-fastcgi
和php7.4-fpm
包)。
PHP-FPM使用所谓的池处理传入的FastCGI请求。您可以配置任意数量的池在FPM配置。在一个池配置TCP套接字(IP和端口)或Unix域套接字监听。每个池也可以运行在不同的UID和GID:
1 2 3 4 5 6 7 8 9 10
;一个叫www池(www)用户= www-data集团= www-data;使用unix域套接字听= /var/run/php/php7.4-fpm.sock;或监听TCP套接字听=127.0。0.1:9000年
用mod_proxy_fcgi Apache 2.4
如果您正在运行Apache 2.4,您可以使用mod_proxy_fcgi
通过PHP-FPM传入的请求。配置PHP-FPM监听TCP或Unix socket,启用mod_proxy
和mod_proxy_fcgi
在您的Apache配置中,并使用SetHandler
指令通过PHP FPM PHP文件的要求:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
< VirtualHost *: 80 >ServerNamedomain.tldServerAliaswww.domain.tld#取消注释以下行来迫使Apache通过授权#头PHP:所需basic_auth PHP-FPM和FastCGI下## SetEnvIfNoCase ^授权美元“(+)”HTTP_AUTHORIZATION=$1#为Apache 2.4.9或更高#使用结合使用ProxyPassMatch SetHandler避免问题# mod_rewrite或mod_autoindex< FilesMatch \美元。php >SetHandler代理:fcgi: / / 127.0.0.1:9000#为Unix socket, Apache 2.4.10或更高# SetHandler代理:unix: /道路/ / fpm.sock | fcgi: / /假< / FilesMatch >#如果您使用Apache版本低于2.4.9必须考虑更新或使用这个代替# ProxyPassMatch ^ / (. * \。php (/ . *) ?) $ fcgi: / / 127.0.0.1:9000 / var / www /项目/公共/ 1美元#如果你的子路径上运行Symfonyob娱乐下载应用程序文档根#正则表达式必须相应的改变:# ProxyPassMatch ^ / path-to-app / (. * \。php (/ . *) ?) $ fcgi: / / 127.0.0.1:9000 / var / www /项目/公共/ 1美元DocumentRoot/var/www/project/public<目录/var/www/project/public >#启用. htaccess重写AllowOverride所有需要所有授予< /目录>#取消注释以下行如果你安装资产作为符号链接#或遇到问题时编译/ Sass / CoffeeScript资产少# <目录/var/www/project ># FollowSymlinks选项# < /目录>ErrorLog/var/log/apache2/project_error.logCustomLog/var/log/apache2/project_access。日志的总和< /虚拟主机>
PHP-FPM与Apache 2.2
Apache 2.2或更低,您不能使用mod_proxy_fcgi
。你必须使用FastCgiExternalServer指令。因此,Apache配置应该是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25日26日
< VirtualHost *: 80 >ServerNamedomain.tldServerAliaswww.domain.tldAddHandlerphp7-fcgi。php行动php7-fcgi / php7-fcgi别名/ php7-fcgi /usr/lib/cgi-bin/php7-fcgiFastCgiExternalServer/usr/lib/cgi-bin/php7-fcgi主机127.0.0.1:9000 -pass-header授权DocumentRoot/var/www/project/public<目录/var/www/project/public >#启用. htaccess重写AllowOverride所有订单允许,拒绝允许从所有< /目录>#取消注释以下行如果你安装资产作为符号链接#或遇到问题时编译/ Sass / CoffeeScript资产少# <目录/var/www/project ># FollowSymlinks选项# < /目录>ErrorLog/var/log/apache2/project_error.logCustomLog/var/log/apache2/project_access。日志的总和< /虚拟主机>
如果你喜欢使用Unix socket,你必须使用套接字
选项:
1
FastCgiExternalServer/usr/lib/cgi-bin/php7-fcgi插座/var/run/php/php7.4-fpm。袜子-pass-header授权
Nginx
的最低配置让你的应用程序下运行Nginx是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
服务器{server_namedomain.tldwww.domain.tld;根/var/www/project/public;位置/ {#试图直接提供文件,回退到index . phptry_files美元uri/ index . php美元is_args美元arg游戏;}#选择禁用回落到PHP脚本的资产目录;# nginx将返回一个404错误当文件没有找到,而不是通过#请求Symfony(可以ob娱乐下载提高性能,但是Symfony的404页不显示){#位置/包# try_files uri = 404美元;#}位置~ ^ /索引\。php (/ | $){fastcgi_passunix: / var /运行/ php / php7.4-fpm.sock;fastcgi_split_path_info^ (. + \。php)(/ . *)美元;包括fastcgi_params;#选择设置环境变量的值在应用程序中使用# fastcgi_param APP_ENV刺激;# fastcgi_param APP_SECRET < app-secret-id >;# fastcgi_param DATABASE_URL“mysql: / / db_user: db_pass@host: 3306 / db_name”;#当你使用符号链接,链接的文档根#当前版本的应用程序,您应该通过真实的#应用程序路径的路径PHP的符号链接# FPM。#否则,PHP的OPcache可能不正确地检测变化#你的PHP文件(参见https://github.com/zendtech/ZendOptimizerPlus/issues/126#的更多信息)。#警告:当PHP-FPM nginx的驻留在不同的机器上# $ realpath_root并不像你希望解决!在这种情况下尝试使用# $ document_root代替。fastcgi_paramSCRIPT_FILENAME美元realpath_root美元fastcgi_script_name;fastcgi_paramDOCUMENT_ROOT美元realpath_root;#防止uri,包括前端控制器。这将404:# http://domain.tld/index.php/some-path#删除内部指令允许这样的uri内部;}404 #返回所有其他php文件不匹配的前端控制器#这阻止访问其他php文件你不想被访问。位置~ \。php美元{返回404年;}error_log/var/log/nginx/project_error.log;access_log/var/log/nginx/project_access.log;}
提示
如果你使用NGINX单元,看看官方的文章如何使用NGINX单元ob娱乐下载运行Symfony应用程序。
请注意
根据您的PHP-FPM配置,fastcgi_pass
也可以fastcgi_pass 127.0.0.1:9000
。
提示
这个执行只有index . php
在公共目录。所有其他文件结束”。php”将被拒绝。
如果你有其他公共目录中的PHP文件需要执行时,一定要包括他们位置
块以上。
谨慎
在部署到生产环境之后,确保你不能访问index . php
脚本(即。http://example.com/index.php
)。
高级的Nginx配置选项,阅读官方的Nginx的欧宝官网下载app文档。