配置一个Web服务器

编辑该页面

配置一个Web服务器

Symfony应用程序开发的首选方法是使用欧宝娱乐app下载地址欧宝娱乐app下载地址Symfony本地Web服务器

然而,在生产环境中运行应用程序时,您将需要使用一个web服务器平台。本文描述了几种方式使用Symfony Apache或Nginx。欧宝娱乐app下载地址

当使用Apache,您可以配置PHP作为一个Apache模块或与FastCGI使用PHP FPM。FastCGI也是使用PHP的首选与Nginx

公共目录的所有应用程序的公共和静态文件,包括图像、样式表和JavaScript文件。这也是前端控制器(index . php)的生活。

公共目录作为文档根在配置您的web服务器。在下面的例子中,公共/将文档根目录。这个目录是/var/www/project/public/

如果你的托管提供商需要你改变公共/(如目录到另一个位置。public_html /)确保你覆盖公共/目录的位置

添加重写规则

最简单的方法是安装apache欧宝娱乐app下载地址Symfony包通过执行下面的命令:

1
美元作曲家需要symfony / ap欧宝娱乐app下载地址ache-pack

这包安装. htaccess文件公共/目录包含重写规则需要Symfony应用程序服务。欧宝娱乐app下载地址

在生产服务器上,你应该移动. htaccess规则为主要的Apache配置文件来提高性能。为此,复制. htaccess内的内容<目录>Symfony应用程序相关的配置欧宝娱乐app下载地址公共/目录(和替换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错误#没有找到而不是把请求传递给Symfony欧宝娱乐app下载地址<目录/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文欧宝体育电话档

Apache与PHP-FPM

利用PHP-FPM与Apache,首先必须确保FastCGI程序经理php-fpm二进制和Apache的FastCGI模块安装(例如,在一个基于Debian系统安装libapache2-mod-fastcgiphp7.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.00.1:9000年

用mod_proxy_fcgi Apache 2.4

如果您正在运行Apache 2.4,您可以使用mod_proxy_fcgi通过PHP-FPM传入的请求。配置PHP-FPM监听TCP或Unix socket,启用mod_proxymod_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美元#如果你的子路径上运行Symfony欧宝娱乐app下载地址应用程序文档根#正则表达式必须相应的改变:# 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(可以欧宝娱乐app下载地址提高性能,但是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单元欧宝娱乐app下载地址运行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的欧宝体育电话文档

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
欧宝娱乐app下载地址Symfony 6.0支持通过SensioLabs