我们希望在 Apache 服务器上从 mod_php 切换到 fastCGI + PHP-FPM。
我们一切就绪并正在工作,除了一件事:
$_SERVER['REMOTE_ADDR'] 中的值始终是 127.0.0.1,而不是客户端的 IP。有什么方法可以配置服务器将此变量设置为客户端真实IP吗?
我们在 X-Forwarded-For 标头中有客户端真实 IP(从代理传递)
基本上我们需要 Apache 替代 nginx 配置:
fastcgi_param REMOTE_ADDR $http_x_forwarded_for;
Run Code Online (Sandbox Code Playgroud)
我想在 nginx 和 fastcgi_pass 中使用动态主机解析。
当fastcgi_pass $wphost:9000;在 conf 中设置时,nginx 显示错误
[error] 7#7: *1 wordpress.docker could not be resolved (3: Host not found),
但是当我设置fastcgi_pass wordpress.docker:9000;它时 它正在工作,除了在 wordpress 重新启动后 nginx 仍然指向旧 IP 的事实。
server {
listen [::]:80;
include /etc/nginx/ssl/ssl.conf;
server_name app.domain.*;
root /var/www/html;
index index.php index.html index.htm;
resolver 172.17.42.1 valid=60s;
resolver_timeout 3s;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args; ## First attempt to serve request as file, then as directory, then fall back to index.html
} …Run Code Online (Sandbox Code Playgroud) 我在 debian Jessie 上使用 mod_proxy_fcgi 和 apache 2.4,我的 C++ 应用程序使用 libfcgipp 执行 ServerSentEvents。
我的问题是,那个 apache 仍然缓冲我的响应数据。我通过使用 wireshark 确认它没有被 libfcgipp 库缓冲:通过 启动 fcgi 应用程序后spawn-fcgi,数据会尽快发送到 apache 网络服务器。但是在我的浏览器中(我用于测试,稍后会有一个 C++ 客户端)它只在我“杀死”/关闭服务器应用程序中的发送请求后才会显示。
所以我假设我需要禁用 apache 或 mod_proxy_fcgi(或两者)的缓冲。但是我找不到有关如何执行此操作的适当文档。
我在 Windows Server 2008 计算机的 IIS 7.5 上运行 PHP。
目前我fastCgi request timeout在 IIS 中设置为 90 秒。
但max_execution_timeinphp.ini设置为 30。
那样的话会发生什么呢?脚本是否会崩溃,但请求会保留在请求队列中,直到达到 90 秒后完成?
我在 PHP 5.6.20 前面通过 FastCGI (PHP-FPM) 使用 Nginx 1.8.1 作为反向代理,我发现来自 PHP 的所有通知/警告/错误日志也在 Nginx 中记录为错误。有什么办法可以防止此类日志传播到 Nginx 的日志?我希望他们只登录 PHP 的日志文件。
下面是一个例子:
[2016 年 4 月 29 日 22:23:10] 警告:[pool www] child 20 对 stderr 说:“注意:PHP 消息:PHP 警告:phpinfo():依赖系统的时区设置是不安全的。你需要使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种但仍然收到此警告,则很可能是时区标识符拼错了。我们现在选择了时区“UTC”,但请设置 date.timezone 以选择您的时区。在第 2 行的 /opt/web-app/index.php 中”
相同的日志作为错误添加到 Nginx 的日志文件中:
2016/04/29 22:23:10 [error] 6#0: 1 FastCGI sent in stderr: "PHP message: PHP Warning: phpinfo(): 依赖系统的时区设置是不安全的。你是*必需的使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种并且仍然收到此警告,则很可能是您拼错了时区标识符。我们现在选择了时区“UTC”,但请设置 date.timezone 以选择您的时区。在第 2 行的 /opt/web-app/index.php 中”,同时从上游读取响应标头,客户端:172.18.0.1,服务器:,请求:“GET /favicon.ico HTTP/ 1.1", 上游: "fastcgi://172.18.0.2:9000", 主机: "localhost:8080", …
我在 Flask 上开发了一个 REST API 并按照以下说明部署在 IIS 上 https://medium.com/@bilalbayasut/deploying-python-web-app-flask-in-windows-server-iis-using-fastcgi-6c1873ae0ad8
有没有办法通过 WFastCGI 调试托管在 IIS 上的 Flask 应用程序?
目前它只显示 {"message": "Internal Server Error"} 如果有任何错误。(这完全没有帮助)
我怎样才能为此检索错误日志?
请不要标记为重复,提供的链接没有帮助。我使用了 WFastCGI 和 IIS,因此我没有明确运行“烧瓶运行”的东西
Raku众所周知,启动时间非常长。
在我的机器上(旧机器,但我拥有的最现代的机器):
time raku -e 'put "Hello, World!"'
495.67 - 567.02 毫秒
(第一次发射 1.53 秒)
time perl -E 'say "Hello, World!"'
13.63 - 19.51 毫秒
time sh -c 'echo "Hello, World!"'
4.31 - 6.88 毫秒
c:
#include <stdio.h>
int main(void) {
puts("Hello, World!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
time ./hello
5.03 - 7.67 毫利斯
time clang hello.c -o hello(编译)
126.39 - 195.66 毫利斯
Raku确实拥有许多内置的小技巧,这使它变得很重。
然而,有时您需要一个相当简单的脚本,并且您更喜欢Raku它的优雅,但等待的启动时间会带来不满,并且您不会选择Raku下一个简单的脚本。
有什么办法可以帮助它吗?
就像启动Raku一次并保持运行,并使其处理所有Raku脚本,无论有没有模块,无论大小,等等raku …
我目前正在与一些同事合作开发一个小型个人项目,该项目需要 FastCGI 请求,目前这是我们的代码:
#![allow(non_snake_case)]
use std::os::unix::net::{UnixStream};
use std::io::{Read, Write};
fn main() {
// here we create the request body, which should be sent in the FCGI_STDIN record
let data = "foo=bar";
// here we define the constants that FastCGI needs
const FCGI_VERSION_1: u8 = 1;
const FCGI_BEGIN_REQUEST:u8 = 1;
const FCGI_END_REQUEST: u8 = 3;
const FCGI_STDIN: u8 = 5;
const FCGI_STDOUT: u8 = 6;
const FCGI_STDERR: u8 = 7;
const FCGI_RESPONDER: u16 = 1;
const FCGI_PARAMS: u8 = 4;
// …Run Code Online (Sandbox Code Playgroud) 我们有一个支持的现有Perl应用程序mod_perl.但是,我们的新主机(Dreamhost)不支持mod_perl,只支持FastCGI; 因此需要港口.
现有代码不使用任何Apache特定的东西,只是正常的Perl代码以可接受的方式编写mod_perl.
阅读文档和在线教程,似乎添加FastCGI支持涉及将现有代码包装在特定类型的循环中.以下是最常用的骨架代码:
A.使用FCGI
use FCGI;
while (FCGI::accept >= 0)
{
#Run existing code.
}
Run Code Online (Sandbox Code Playgroud)
B.使用CGI :: Fast
use CGI::Fast
while (my $cgi = CGI::Fast->new())
{
#Run existing code.
}
Run Code Online (Sandbox Code Playgroud)
次要问题:
mod_perlPortCigI 移植到FastCGI 时,是否有任何应该知道的最佳实践或问题?谢谢.
我不知道为什么,但是在搜索bug之后6小时,我无法识别它.当包含动态文件路径时,它似乎在框架代码的深处.
当我尝试在不同的地方进行exctly相同的include调用时,不会出现IIS错误.
phpinfo()工作正常,我的应用程序没有.
IIS错误:
HTTP错误500.0 - 内部服务器错误D:\ Program Files(x86)\ PHP\v5.3\php-cgi.exe - FastCGI进程意外退出
模块FastCgiModule通知ExecuteRequestHandler处理程序PHP53_via_FastCGI错误代码0xc0000005
IIS 7.5上的PHP 5.3.9 nts
我已经有很多关于这个错误的文章,没有任何帮助.这很有趣,因为昨天一切都很好.
也许你可以给我一个有用的暗示.
编辑:
我似乎找到了问题的原因:
1.部署到Azure云后,某些进程会将php.ini的完整副本添加到现有php.ini文件的末尾.所以我从php-cgi得到了很多警告.
- >这是由启动任务完成的.我想知道为什么任务现在增强了所有内容而不是像以前一样覆盖.
2.我看到有一个新的PHP版本的Windows 5.3.9(生成日期2012年1月10日16:30:15).您也可以通过MS Web Platform Installer找到它.我目前使用5.3.8(建造日期2011年8月23日12:11:54).我在程序文件和我的WebRole文件夹中都有它.通常,启动任务将我的版本从WebRole文件夹中取出,但新版本不会.当我通过RDP更改路径时,everthings运行良好.
现在我只需要找到一种方法来强制Azure在我的包中使用PHP.