我在httpd.conf中通过ProxyPassmatch运行Apache 2.4和PHP-FPM,而不是vhost( 它的价值 ):
ProxyPassMatch ^/(.*\.php)$ unix:/var/run/php-fpm.sock|fcgi://127.0.0.1/home/user/www
我想创build一个子域来运行CMS,但很快我发现PHP文件没有在该子域上处理,可能是由于我不了解如何设置它。
我不确定是否需要使用单独的ProxyPassMatch指令创build一个虚拟主机,否则上面的默认工作将会起作用。
httpd.conf中:
ServerRoot "/usr/local" Listen 192.168.1.2:80 LoadModule authn_file_module libexec/apache24/mod_authn_file.so LoadModule authn_core_module libexec/apache24/mod_authn_core.so LoadModule authz_host_module libexec/apache24/mod_authz_host.so LoadModule authz_groupfile_module libexec/apache24/mod_authz_groupfile.so LoadModule authz_user_module libexec/apache24/mod_authz_user.so LoadModule authz_core_module libexec/apache24/mod_authz_core.so LoadModule access_compat_module libexec/apache24/mod_access_compat.so LoadModule auth_basic_module libexec/apache24/mod_auth_basic.so LoadModule reqtimeout_module libexec/apache24/mod_reqtimeout.so LoadModule filter_module libexec/apache24/mod_filter.so LoadModule deflate_module libexec/apache24/mod_deflate.so LoadModule mime_module libexec/apache24/mod_mime.so LoadModule log_config_module libexec/apache24/mod_log_config.so LoadModule env_module libexec/apache24/mod_env.so LoadModule expires_module libexec/apache24/mod_expires.so LoadModule headers_module libexec/apache24/mod_headers.so LoadModule setenvif_module libexec/apache24/mod_setenvif.so LoadModule proxy_module libexec/apache24/mod_proxy.so LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so LoadModule unixd_module libexec/apache24/mod_unixd.so LoadModule autoindex_module libexec/apache24/mod_autoindex.so LoadModule negotiation_module libexec/apache24/mod_negotiation.so LoadModule dir_module libexec/apache24/mod_dir.so LoadModule actions_module libexec/apache24/mod_actions.so LoadModule alias_module libexec/apache24/mod_alias.so LoadModule rewrite_module libexec/apache24/mod_rewrite.so IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.conf <IfModule unixd_module> User www Group www </IfModule> ServerAdmin [email protected] ServerName 192.168.1.2:80 <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "/home/user/www" <Directory "/home/user/www"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> <IfModule dir_module> DirectoryIndex index.html index.php </IfModule> <Files ".ht*"> Require all denied </Files> ErrorLog "/var/log/apache/error.log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "/var/log/apache/access.log" combined </IfModule> <IfModule alias_module> ScriptAlias /cgi-bin/ "/usr/local/www/apache24/cgi-bin/" </IfModule> <Directory "/usr/local/www/apache24/cgi-bin"> AllowOverride None Options None Require all denied </Directory> <IfModule mime_module> TypesConfig etc/apache24/mime.types AddType application/x-compress .Z </IfModule> EnableMMAP On Include etc/apache24/extra/httpd-mpm.conf Include etc/apache24/extra/httpd-default.conf Include etc/apache24/extra/h5bp.conf Include etc/apache24/Includes/*.conf ProxyPassMatch ^/(.*\.php)$ unix:/var/run/php-fpm.sock|fcgi://127.0.0.1/home/user/www
子域名vhost:
<VirtualHost *:80> DocumentRoot "/home/user/www/xxx" ServerName xxx.domain.com DirectoryIndex index.php <Directory "/home/user/www/xxx"> AllowOverride FileInfo Require all granted </Directory> </VirtualHost>
默认的php-fpm池:
[global] pid = run/php-fpm.pid error_log = log/php/error.log [www] user = user group = user listen = /var/run/php-fpm.sock listen.owner = user listen.group = user listen.mode = 0660 listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 access.log = /var/log/php/access.log access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" chdir = /home/user/www catch_workers_output = yes security.limit_extensions = .php env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp
在Cloudflare中,我设置了一个指向xxx.domain.com的CNAMElogging: 
我在浏览器中得到的是:
"File not found"
并在日志中:
[proxy_fcgi:error] [pid 44810] [client xxx.xx.x.xxx] AH01071: Got error 'Primary script unknown\n'
我将不胜感激提示正确的方向。
谢谢
在每个虚拟主机中,您将需要放置:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/your/documentroot/$1
将这个权利放置在Virtual Hostsconfiguration的顶部,以便它不受后面的任何影响。
每个虚拟主机需要一个不同的端口,所以9000然后9001然后9002等。这些端口必须匹配你在池中使用的端口,例如listen = 127.0.0.1:9001 。 你将需要匹配用户等。
这个wiki提供了更多的信息: http : //wiki.apache.org/httpd/PHP-FPM 。
你说你正在使用Apache 2.4 ,值得注意的是,你不能在Apache 2.4.9之前使用套接字,所以为什么我没有在我的例子中使用它们。
如果可以提供帮助,那么在apache httpd下进行大量托pipe所需要的就是mod_vhost_alias模块,您只需要设置一个通用的虚拟主机,就可以处理所有的场景,就像Apache文档中的解释: mod_vhost_alias
我自己使用它将所有我的生产客户端php从sub.domain.tldredirect到我的php-fpm生产chrooted。
我有一个像/ home / clientname(作为子;-))/ www /
然后用fastcgi:// host:port /%(1/2 / etc取决于您要查找的名称的一部分)/ www /
PS:如果你真的计划在不同的环境下(prod / development / demo / etc)把你的呼叫分割成不同types的php-fpm池,或者在一个令人担忧的头脑中多个客户端,你只需要不同的池/端口关于细分。
我希望我的回答可以帮助操作或其他人,如果为时太晚,操作;-)