ide*_*ide 10 httpd php-fpm proxypass fcgi apache-2.2
我正在迁移我的服务器以使用 mod_proxy_fcgi 和 php-fpm 而不是 mod_php。Apache 能够将 .php 请求转发到 fcgi 代理,并且 PHP 可以正确执行。我有这个工作:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使文件不存在,Apache 也会将所有 .php 请求转发给代理。这会导致一些问题。我的 ErrorDocument 规则没有被调用,DirectoryIndex index.php index.html
也没有回退到 index.html。
我能够使用 mod_rewrite 解决这些问题:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ^/((.*\.php)(/.*)?)$
RewriteCond /var/www/html/%2 -f
RewriteRule . fcgi://127.0.0.1:9000/var/www/html/%1 [P]
Run Code Online (Sandbox Code Playgroud)
但是,Apache 文档不推荐 RewriteRule:“这是因为此标志触发了默认工作程序的使用,该工作程序不处理连接池。”
理想情况下,我想我要么想在 FilesMatch 块中使用 ProxyPass(目前不受支持),要么定义一个新的处理程序,通过 fcgi 代理并使用它来处理 .php 请求,类似于 mod_php 所做的。
任何模拟标准 mod_php 设置但实际上通过 fcgi 代理的建议?
一种选择是安装 mod_proxy_handler:https : //gist.github.com/progandy/6ed4eeea60f6277c3e39
或者您可以等待 Apache 2.4.10,它应该包含该模块。
基本上该模块可以让你做到这一点:
#tcp
<FilesMatch \.php$>
SetHandler proxy:fcgi://localhost:9000
</FilesMatch>
#uds
<FilesMatch \.php$>
SetHandler "proxy:unix:/path/to/socket.sock|fcgi://./"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
小智 0
同上OP。
ProxyPassMatch
。
php-fpm
,但这会杀死 javascript 和 css 文件。我的猜测是我必须编写一个自定义的404.php
处理器 - 然后通过该处理器路由所有请求,并将请求的文件作为查询字符串附加。
例如:
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-l
RewriteRule ^.*$ fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/404.php?no_comprende=%{REQUEST_URI} [P]
...
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/$1
...
Run Code Online (Sandbox Code Playgroud)
理论上——并假设它们列出的顺序仍然正常适用:
在到达指令之前,任何 404 的文件都会被捕获
ProxyPassMatch
为了处理无扩展名的 URL,php-fpm
我调整了上面的内容以在我的 VHOST 配置中查找无扩展名的 URL:
...
# Extensionless URL's
RewriteCond %{REQUEST_FILENAME} ^/((.*)(/.*)?)$
RewriteCond %{DOCUMENT_ROOT}/%2.php -f
RewriteRule !.*\.php$ fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/%1.php [P]
# files w/ .php extensions
RewriteCond %{REQUEST_FILENAME} ^/((.*\.php)(/.*)?)$
RewriteCond %{DOCUMENT_ROOT}/%2 -f
RewriteRule . fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/%1 [P]
...
Run Code Online (Sandbox Code Playgroud)
不太漂亮,但它确实完成了工作:-(
归档时间: |
|
查看次数: |
8318 次 |
最近记录: |