很少有不同的php“包装器”(?)。它们之间有什么区别?试图谷歌一些,但似乎无法找到信息。(mod-php 不能用谷歌搜索)。
为什么我可以选择一个而不是另一个?
已经有一个 很大 的 谈论关于相对于一个安全问题cgi.fix_pathinfo与Nginx的(通常是PHP-FPM,快速CGI)使用PHP选项。
结果,默认的 nginx 配置文件曾经说:
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
Run Code Online (Sandbox Code Playgroud)
但是,现在,“官方”Nginx wiki声明无需禁用上述 PHP 选项即可正确处理 PATH_INFO。所以呢?
cgi.fix_pathinfo什么的吗?(官方文档只是说:“有关 PATH_INFO 的更多信息,请参阅 CGI 规范”)PATH_INFO和SCRIPT_FILENAME变量做什么?我试图在每一步都理解这个问题。例如,我不明白为什么使用 php-fpm Unix 套接字可以避免这个问题。
调试 6 小时后 - 我放弃了:|
我们在 LAN 中有一个 nginx+php-fpm+mysql,有近 100 个 wordpress(由不同的设计人员/开发人员创建和使用,他们都在测试 wordpres 设置)
我们长期使用 nginx 没有任何问题。
今天,突然间——nginx开始突然返回“504网关超时”......
我检查了虚拟主机的 nginx 错误日志...
2010/09/06 21:24:24 [error] 12909#0: *349 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *349 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: …Run Code Online (Sandbox Code Playgroud) 最近有人建议我在 PHP 中使用 FastCGI。现在我去了 FastCGI 页面并阅读了它,但我真的不明白它的优点是什么。
我最近一直在研究 Apache 和 Nginx 之间的差异,并且对我应该选择哪个感到困惑。
我做了一些搜索,但两者之间没有明确的比较,我想知道这里是否有人可以就两者之间的差异发表意见。
我目前的知识让我明白 mod_php 比 fastcgi 更快、更安全,但是 Apache 在同时连接和内存消耗方面要差得多。
我的网站使用了大量的长轮询,但有一个非 AJAX 网络基础(即 Apache 的顶部有长轮询)。
我对 Apache 内存问题的原始解决方案是通过 node.js 发送长轮询,然后让 node.js 每 2 秒访问一次 Apache,在这种情况下,Apache 不会有一个开放的连接,而是 node.js 会。我已经意识到这可能还不够好,正在寻找不同的解决方案。我仍然对我最初的想法是否可行很感兴趣。
那么哪个更适合现代网络?Apache 还是 Nginx?
更新:给出的所有建议都是好的和有效的。我已经采用了最初的第二个想法,即使用完整的 Nginx 服务器。我很满意作为专用服务器,我不会受到 fastcgi 的安全问题的困扰,并且由于我的长轮询脚本需要用 PHP 编写,我需要一个可以处理高负载同时连接的服务器,而 Apache 无论如何都无法做到这一点我改变了结构,它仍然会占用大量内存。
我已经标记了 Martin F 的答案,因为他对我的问题给出了如此清晰和完整的答案,我觉得他应该得到这个分数,但是,所有三个答案都很好且有效,并且肯定会考虑为我拥有的另一个网站使用反向代理因为我刚刚发现了 Nginx 可以在代理中做的非常非常酷的事情。
谢谢,
我在一台 RHEL5 服务器上的 PHP 5.2.10 下运行了 nginx 0.7x + PHP-FPM,但试图在第二台服务器上的 PHP 5.3.3 中的捆绑 PHP-FPM 下复制该设置,我有每次有 GET 时都会遇到权限错误的问题。
FPM启动了,确认fastcgi在9000上监听,但是每次做GET的时候,在nginx日志中看到这个错误:
2010/08/12 23:38:53 [crit] 5019#0: *5 stat() "/home/noisepages/www/" failed (13: Permission denied), client: 24.215.173.141, server: dev.noisepages.com, request: "GET / HTTP/1.1", host: "dev.noisepages.com"
Run Code Online (Sandbox Code Playgroud)
Barebones nginx.conf.default 至少可以工作。这是我的 nginx.conf
server {
listen 80;
server_name dev.noisepages.com;
root /home/noisepages/www;
index index.html index.htm index.php;
access_log logs/dev.access.log;
error_log logs/dev.error.log;
location / {
if (-f $request_filename) {
expires 30d;
break;
}
# this sends all non-existing file or directory requests to …Run Code Online (Sandbox Code Playgroud) 请解释使用不同 Nginx WSGI 接口时的优缺点?请详细说明每种配置的区别是什么?哪种配置的扩展性最好?
如果相关,您现在正在运行什么,为什么?
我见过的一些技巧,但请告诉我是否遗漏了任何技巧:
如果在我的配置文件中设置,我不会注意到任何区别
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
或者:
fastcgi_param SCRIPT_FILENAME $request_filename;
Run Code Online (Sandbox Code Playgroud)
他们分别做什么?两者之一比另一个更好吗?
提前致谢。
我正在通过 FastCGI 将最新版本的 PHP 安装到 IIS 7.5 上,所有说明都说 FastCGI 应该通过设置来模拟调用客户端
fastcgi.impersonate = 1
Run Code Online (Sandbox Code Playgroud)
如果我的网站会有这个配置
我为什么要冒充?
我来自 ASP.NET 背景,其中 IUSR 获得只读权限,应用程序池标识获得任何写入权限。授予对 IUSR 的写访问权限通常为 WebDAV 漏洞打开大门。所以我犹豫要不要让 PHP 作为 IUSR 运行。
在下面的几行中,我可能有一个特定于站点的配置文件,其中包含该站点独有的其他fastcgi_params。如果这个文件存在,我想加载它。
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
if (-f /path/www/$host/nginx.conf) {
include /path/www/$host/nginx.conf;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,我得到的错误是:
nginx: [emerg] "include" 指令在这里是不允许的......
我认为与其单独检查,不如让include 来检查我。
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; …Run Code Online (Sandbox Code Playgroud)