我一直在我的网站上运行我的大部分PHP应用程序,在fastcgi后端,由NGINX提供服务.我有一个新的应用程序,似乎很好地与Apache集成; 例如,它严重依赖于动态编写的.htaccess文件.我正在努力修改它以与NGINX本地工作,但还没有准备好.与此同时,我将把NGINX代理连接到该路径直接连接到Apache,并让Apache处理它.
但是,我的内存限制为VPS,我宁愿不为NGINX(带有自己的APC缓存)运行一组PHP-CGI进程,而为Apache运行另一组PHP(使用更多内存用于其 APC缓存).有没有人有幸在两者之间分享PHP?
mod_ fcgid似乎不支持使用已经运行的服务器,所以我尝试了mod_ fastcgi.这似乎最初起作用,但吸收了相当多的内存(承诺 - 它正在增长,而不仅仅是静态).更糟糕的是,我无法在我的apache配置中使用DirectoryIndex行来使用mod_fastcgi!
我补充道
AddHandler php5-fastcgi .php
FastCgiExternalServer /var/www -host 127.0.0.1:9000
到我的Apache配置,并处理所有.php页面,但像http://example.com/foo/这样的路径不服务器/foo/index.php!如果我删除FastCgiExternalServer,它确实找到index.php,但当然只是将其显示为文本.
我假设它是因为DirectoryIndex是在FastCgiExternalServer之后处理的,但我不知道如何更改它.
FastCGI能与PHP一起使用吗?似乎有些运行Ruby on Rails的人在使用FastCGI时遇到了问题,但是用PHP可以解决这个问题吗?
我在Debian Lenny机器上有2个不同的Web服务器.一个运行FastCGI(TRAC),另一个Web服务器运行PHP和一些CGI脚本.所以我目前启用了2个Apache2模块(cgi和fcgi)以及相应的2个vhosts设置.我对这两个模块同时运行没有其他特别的兴趣.
所以我想保持只运行Apache fastcgi模块,因为它看起来更有效率.
您能否确认以下评估是对还是正确?
1-我将无法做什么/更改TRAC站点(已经运行fcgi)
2-我必须调整其他Web服务器vhost以使用fastcgi脚本的处理程序设置
3-我将只需要更改perl模块从"使用CGI"到"使用CGI :: Fast"
4-我将能够保留perl现有CGI脚本的其余部分
而不需要其他更改5-我不需要使用CGI :: Apache但CGI: :Web服务器脚本中的FastCGI(i/o当前CGI模块)
我希望我的观点很明确,因为它对我来说有点陌生......
谢谢
编辑:
thx为Naveed和J-16的提示,
这是我做的,如果它可以帮助其他人让它工作:
哼,用CPAN安装CGI :: Fast,然后它运行得更好..
在Debian上已经安装了libperl
perl -MCPAN -e shell
cpan> install CGI::Fast
Run Code Online (Sandbox Code Playgroud)将文件名从*.cgi更改为*.fcgi,
编辑:修改文件上传代码,因为初始脚本不再起作用(仍然不明白为什么),所以我不得不用这样一个替换while循环:
open(FILE,">$upload_dir/$file_name")
while ($bytes_count = read($file_query,$buffer,2096)) {
$size += $bytes_count;
print FILE $buffer;
}
close(FILE);
Run Code Online (Sandbox Code Playgroud)完成.
世界还不完美,但终于有效了.
我正在将我的django项目部署到一个轻便的服务器上.当我试图访问网站root时,一切都很好,但如果我添加/ admin /或/ blog /我得到:
Page not found (404)
Request Method: GET
Request URL: http://x.x.x.x/mysite.fcgi/mysite.fcgi/admin/
Run Code Online (Sandbox Code Playgroud)
和,
Page not found (404)
Request Method: GET
Request URL: http://x.x.x.x/mysite.fcgi/mysite.fcgi/blog/
Run Code Online (Sandbox Code Playgroud)
我已经阅读了一些关于此的帖子,似乎可以通过向settings.py添加FORCE_SCRIPT_NAME =""来解决.但是,这对我没有用.
urls.py:
urlpatterns = patterns('',
(r'^$', index),
(r'^blog/$', blog_view),
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
)
Run Code Online (Sandbox Code Playgroud)
lighttpd.conf:
$HTTP["host"] == "x.x.x.x" {
server.document-root = "/home/lighttpd/sedin/web"
fastcgi.server = (
"/mysite.fcgi" => (
"main" => (
# Use host / port instead of socket for TCP fastcgi
#"host" => "127.0.0.1",
#"port" => 3033,
"socket" => "/home/lighttpd/sedin/sedin.sock",
"check-local" => …Run Code Online (Sandbox Code Playgroud) 我按照这里的指示:使用FastCGI在IIS 7上托管PHP应用程序来配置Windows 2008,PHP与IIS 7和FastCGI,我遇到了问题.PHP版本是5.3.8.我在IIS上设置了Handler Mappings,并创建了一个测试页面,但页面除了500错误外没有返回任何内容.我确保PHP工作,从命令行我输入时得到响应:
php -version.
Run Code Online (Sandbox Code Playgroud)
也就是说,我已经为php页面启用了失败的请求跟踪规则,当我浏览错误日志时,我看到的内容如下:
<EventData>
<Data Name="ContextId">{00000000-0000-0000-0200-0080010000F6}</Data>
<Data Name="ModuleName">FastCgiModule</Data>
<Data Name="Data1">FASTCGI_RESPONSE_ERROR</Data>
<Data Name="Data2">PHP Warning: phpinfo() [<a href='function.phpinfo'>function.phpinfo</a>]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for '-4.0/DST' instead in C:\inetpub\wwwroot\phpinfo.php on line 1
</Data> …Run Code Online (Sandbox Code Playgroud) 这个问题可能有点长而且具体,但我一直试图找到以下问题的确定答案,大约一个月了,我还没有找到决定性的信息.一个特定的问题很难概括,如果我遇到类似的问题,即使特定的服务器配置与我的不同,它也会提供信息.
我的服务器是运行cPanel(WHM)的VPS,PHP模式是SuPHP.该服务器拥有768MB的RAM,并托管了大约12个网站.有些是非常耗费内存的,而其他几乎根本不使用任何内存或CPU.
我最近为我的一个客户安装了一个Magento商店,并且一直在尝试不同的设置以实现性能提升.在我安装xCache并将PHP配置为以FCGID或DSO运行之前没有任何帮助(因为xCache不能与SuPHP一起使用).这种配置将性能提高了2/3(意味着页面加载速度提高了约3倍).
唯一的挫折是,几分钟后,服务器内存不足,我不得不重置它.所以现在我回到SuPHP,事情很好.
即使我禁用了xCache并且只保留了FCGID或DSO模式而不是SuPHP,服务器也会在大约30分钟内耗尽内存.因此,罪魁祸首似乎是PHP运行,而不是SuPHP.
我还注意到,当我从不同的WHM定义的用户打开一个新的前端URL时,我的内存使用率上升了,但是当我从同一个WHM用户帐户打开多个URL时,用法似乎保持相当稳定.
到那时为止:
此外,我正在考虑更新我的其他一些服务器以使用xCache.您会为以下服务器推荐什么配置设置和PHP模式(SuPHP,DSO或FCGI)和xCache?
我正在尝试使用NginX 0.8.52托管Git repo,fcgiwrap包装git-http-backend.此设置类似于此处找到的设置.但是,我经常收到以下错误(注意结尾的错误):
HGs-MacBook-Pro:git_dev hg$ GIT_CURL_VERBOSE=1 git push production master
* Couldn't find host git.myserver.org in the .netrc file; using defaults
* About to connect() to git.myserver.org port 443 (#0)
* Trying 111.222.333.444...
* Connected to git.myserver.org (111.222.333.444) port 443 (#0)
* Connected to git.myserver.org (111.222.333.444) port 443 (#0)
* SSL connection using DHE-RSA-AES256-SHA
* Server certificate:
* subject: C=GB; ST=Berkshire; L=Newbury; O=My Company Ltd
* start date: 2012-11-27 09:56:30 GMT
* expire date: 2012-12-27 09:56:30 GMT
* …Run Code Online (Sandbox Code Playgroud) 我正在查看一些示例代码,并且无法确定以下行正在执行的操作:
fcgi_streambuf cin_fcgi_streambuf(request.in);
fcgi_streambuf cout_fcgi_streambuf(request.out);
fcgi_streambuf cerr_fcgi_streambuf(request.err);
Run Code Online (Sandbox Code Playgroud)
我不是来自ac背景所以语法看起来有点奇怪 - 每一行都在初始化一个新对象时调用一个函数,但我希望至少有一个赋值.例如:
fcgi_streambuf = cin_fcgi_streambuf(request.in);
fcgi_streambuf = cout_fcgi_streambuf(request.out);
fcgi_streambuf = cerr_fcgi_streambuf(request.err);
Run Code Online (Sandbox Code Playgroud)
完整的示例代码可以在这里找到:http://chriswu.me/blog/writing-hello-world-in-fcgi-with-c-plus-plus/
使用在Lua支持下编译的nginx,我们如何对FastCGI处理程序进行某种子请求,就像nginx的fastcgi_pass指令一样?
我想做的是这样的:
location = / {
access_by_lua '
res = ngx_fastcgi.pass("backend")
';
}
Run Code Online (Sandbox Code Playgroud)
(显然,这是行不通的。)
我在HttpLuaModule上浇注,我看到提到了ngx_fastcgi和ngx.location.capture,这显然使
对配置了磁盘文件目录或其他任何Nginx C模块(例如... ngx_fastcgi,...)的其他位置的非阻塞内部请求
但是随后跟随的链接ngx_fastcgi将我带到HttpFastcgiModule,它仅说明nginx指令,而不说明Lua可编写脚本的命令。是否ngx.location.capture使用正确的功能?(顺便说一下,这些请求将是到达localhost另一个端口,例如9000或9001。)
如何在nginx中使用Lua将请求转发或进行子请求到FastCGI端点?
我正在使用Windows 10家庭单一语言64位操作系统笔记本电脑上。
我已经在笔记本电脑上安装了最新版本的XAMPP。
这已经安装了PHP 7.2.8和Apache / 2.4.34(Win32)OpenSSL / 1.1.0h PHP / 7.2.8在我的笔记本电脑上。
我从PHP手册页遇到以下句子:
PHP可以在所有主要操作系统上使用,包括Linux,许多Unix变体(包括HP-UX,Solaris和OpenBSD),Microsoft Windows,macOS,RISC OS以及可能的其他操作系统。PHP还支持当今的大多数Web服务器。这包括Apache,IIS和其他许多工具。这包括可以利用FastCGI PHP二进制文件的任何Web服务器 ,例如lighttpd和nginx。
从上面的文本中,我没有获得术语“ PHP二进制”的确切含义。这个特殊的术语在PHP手册的许多地方经常使用,但是没有给出“ PHP二进制”的实际含义。
我用谷歌搜索了它的含义,然后就知道了“预定义常数” PHP_BINARY。
因此,我尝试执行以下代码,以期消除对常用术语“ PHP二进制”的实际含义的怀疑,并在Web浏览器中检查输出:
<?php
echo PHP_BINARY;
?>
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,我得到以下输出:
C:\xampp\apache\bin\httpd.exe
Run Code Online (Sandbox Code Playgroud)
我很惊讶地看到此输出,因为在输出中我得到了Apache文件httpd.exe的完整地址。我原本希望获得有关PHP的信息,但是却获得了Apache文件的地址。为什么这样?
因此,最终的含义是我仍然不明白常用术语“ PHP二进制”的实际含义是什么?
我仍然不知道非常常用的术语“ PHP二进制”到底意味着什么?
有人,请清除我对常用术语“ PHP二进制”的怀疑一种易于理解,简单明了的语言来。
我在等你的帮助。