配置Web服务器

编辑本页

配置Web服务器

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

但是,当在生产环境中运行应用程序时,您需要使用功能齐全的web服务器。本文描述了在Apache或Nginx中使用Symfony的几种方法。ob娱乐下载

使用Apache时,可以将PHP配置为Apache模块或者使用FastCGIPHP FPM.FastCGI也是使用PHP的首选方式与Nginx

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

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

如果主机托管提供商要求您更改公共/目录到另一个位置(例如:public_html /)确保你重写公共/目录的位置

添加重写规则

最简单的方法是安装apacheob娱乐下载Symfony包执行如下命令:

1
Composer需要symfonyob娱乐下载/apache-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下运行是:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
< VirtualHost *: 80 >ServerNamedomain.tldServerAliaswww.domain.tldDocumentRoot/var/www/project/public/var/www/project/public <目录>AllowOverride所有订单允许,拒绝允许所有< /目录>如果您将资产安装为符号链接,#取消注释以下行#或在编译LESS/Sass/CoffeeScript资产时遇到问题# <目录/var/www/project> . ##选项跟随符号链接# < /目录>ErrorLog/var/log/apache2/project_error.logCustomLog/var/log/apache2/project_access.log相结合< /虚拟主机>

提示

如果您的系统支持APACHE_LOG_DIR变量,你可能想使用$ {APACHE_LOG_DIR} /而不是硬编码/var/log/apache2/

使用以下方法优化配置禁用. htaccess支持和提高web服务器性能:

12 34 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< /目录>如果您将资产安装为符号链接,#取消注释以下行#或在编译LESS/Sass/CoffeeScript资产时遇到问题# <目录/var/www/project> . ##选项跟随符号链接# < /目录>#可选地禁用资产目录的回退资源#将允许Apache返回404错误时,文件而不是将请求传递给Symfonyob娱乐下载/var/www/project/public/bundles <目录>DirectoryIndex禁用FallbackResource禁用< /目录>ErrorLog/var/log/apache2/project_error.logCustomLog/var/log/apache2/project_access.log相结合#设置应用程序中使用的环境变量的值#SetEnv APP_ENV prod#SetEnv APP_SECRET #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

要在Apache上使用PHP-FPM,首先必须确保拥有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.00.19000

在Apache 2.4中使用mod_proxy_fcgi

如果您正在运行Apache 2.4,则可以使用mod_proxy_fcgi将传入的请求传递给PHP-FPM。配置PHP-FPM监听TCP或Unix套接字,启用mod_proxy而且mod_proxy_fcgi,并使用SetHandler将PHP文件请求传递给PHP FPM的指令:

12 34 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或更高版本#使用SetHandler避免了组合使用ProxyPassMatch的问题# mod_rewrite或mod_autoindex< FilesMatch \美元。php >SetHandler代理:fcgi: / / 127.0.0.1:9000#用于Unix套接字,Apache 2.4.10或更高版本# SetHandler代理:unix:/path/to/fpm.sock|fcgi://dummy< / FilesMatch >如果你使用2.4.9以下的Apache版本,你必须考虑更新或使用这个版本# ProxyPassMatch ^ /(. * \。php (/ . *) ?) $ fcgi: / / 127.0.0.1:9000 / var / www /项目/公共/ 1美元如果您在文档根目录下的子路径上运行Sob娱乐下载ymfony应用程序,则#正则表达式必须相应更改:# 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所有需要所有授予< /目录>如果您将资产安装为符号链接,#取消注释以下行#或在编译LESS/Sass/CoffeeScript资产时遇到问题# <目录/var/www/project> . ##选项跟随符号链接# < /目录>ErrorLog/var/log/apache2/project_error.logCustomLog/var/log/apache2/project_access.log相结合< /虚拟主机>

PHP-FPM与Apache 2.2

在Apache 2.2或更低版本上,不能使用mod_proxy_fcgi.你必须使用FastCgiExternalServer指令。因此,你的Apache配置应该是这样的:

12 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 -host 127.0.0.1:9000 -pass-header授权DocumentRoot/var/www/project/public/var/www/project/public <目录>#启用。htaccess重写AllowOverride所有订单允许,拒绝允许所有< /目录>如果您将资产安装为符号链接,#取消注释以下行#或在编译LESS/Sass/CoffeeScript资产时遇到问题# <目录/var/www/project> . ##选项跟随符号链接# < /目录>ErrorLog/var/log/apache2/project_error.logCustomLog/var/log/apache2/project_access.log相结合< /虚拟主机>

如果您更喜欢使用Unix套接字,则必须使用套接字选项:

1
FastCgiExternalServer/usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.4-fpm。sock -pass-header授权

Nginx

最低配置让你的应用程序在Nginx下运行:

12 34 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_filesuri/ index . phpis_argsarg游戏;}#可选禁用资产目录回退到PHP脚本;# nginx将在未找到文件时返回404错误,而不是传递#请求到Symfony(提ob娱乐下载高性能,但Symfony的404页面不显示)# location /bundles {# try_files $uri =404;#}位置~ ^ /索引\。php (/ | $)fastcgi_passunix: / var /运行/ php / php7.4-fpm.sock;fastcgi_split_path_info^(. + \。php)(/ . *)美元包括fastcgi_params;#设置应用程序中使用的环境变量的值# fastcgi_param APP_ENV prod;# fastcgi_param APP_SECRET ;"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_FILENAMErealpath_rootfastcgi_script_namefastcgi_paramDOCUMENT_ROOTrealpath_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 Unit,请查看官方文章如何使用NGINX Uob娱乐下载nit运行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文档

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 6.2支持通过苏禄人
ob娱乐下载Symfony 6.2支持通过Les-Tilleuls.coop