标签: fastcgi

使用 Laravel 和 HHVM 重写 NGINX

nginx 新手,在重写时遇到了一些问题。

我有一个链接到子域 test.mydomain.com 的网站。我当前的 nginx 配置:

server {
    listen 80 default_server;

    root /test/public;
    index index.html index.htm index.php;

    server_name localhost;

    access_log /var/log/nginx/localhost.laravel-access.log;
    error_log  /var/log/nginx/locahost.laravel-error.log error;

    charset utf-8;

    location /admin/ {
        alias /test/public/admin/public/;
        try_files $uri $uri/ /admin/index.php?$query_string;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt  { log_not_found off; access_log off; }

    error_page 404 /index.php;      

    include hhvm.conf;  # The HHVM Magic Here

    # Deny .htaccess file access
    location ~ …
Run Code Online (Sandbox Code Playgroud)

fastcgi nginx url-rewriting laravel hhvm

1
推荐指数
1
解决办法
6305
查看次数

PHP - 预加载所有类/函数

有没有办法预加载(而不是自动加载)PHP 项目的所有类/函数?

我正在考虑使用 PHPFastCGI 运行的 Web 应用程序(因此我们可以引导它的一部分并在请求之间重用这一位),并且它使用了 Composer(它的类映射可以用于此目的吗?)。

这是一些背景:

“常规” PHP 应用程序处理单个请求,然后它们就会被杀死。预加载所有类/函数意味着有更长的启动时间,仅自动加载用于请求的类是一个聪明的优化,但它可以进一步改进(它们需要许多缓慢的“读取文件系统”操作),通常通过分组在单个文件中可能用于所有请求的类(这是ClassPreloader解决的问题)。

然而,启动一个应用程序只处理一个请求然后终止它并不是唯一的选择:使用PHP FastCGI可以在请求之间保持应用程序处于活动状态。这允许我们从请求/响应时间中减少启动时间(例如,将来自 DIC 的所有服务实例化一次)。

在分析我的应用程序时,我注意到自动加载总是出现在前 10 个最昂贵的独占函数调用中。在 PHP FastCGI 应用程序中,在启动阶段移动类加载以从请求/响应时间完全删除它可能是有意义的。我正在尝试找出答案(我会做一些基准测试并发布结果)。

有关这种运行 PHP 应用程序的“奇特”方式的更多信息,请参阅:

  • 使用 ReactPHP 使您的应用程序保持活动状态:http ://marcjschmidt.de/blog/2014/02/08/php-high-performance.html
  • Fabien Potencier 谈论它:https : //youtu.be/gpNbmEnRLBU
  • 使用 PHPFastCGI 让 FastCGI(例如 php-fpm)管理 PHP 进程:http ://andrewcarteruk.github.io/slides/break-boundaries-with-fastcgi/
  • 使用 Aerys,一个非阻塞的 HTTP 应用程序:http ://blog.kelunik.com/2015/10/21/getting-started-with-aerys.html
  • 使用 AppServer,一个原生 PHP Web 服务器:http : //www.sitepoint.com/appserver-a-production-ready-php-based-server/

php fastcgi composer-php

1
推荐指数
1
解决办法
1795
查看次数

带有 wfastcgi virtualenv 的 IIS 上的 Flask 应用程序 - 找不到包

我已经设置了一个 virtualenv 来运行一个 Flask 服务器。我已按照步骤设置 wfastcgi 以与 iis 一起使用。它似乎正在工作,因为我能够访问 python 应用程序,但是打印了一个 python 错误堆栈。

读取 WSGI 处理程序时出错:

Traceback (most recent call last):
File "c:\python27\lib\site-packages\wfastcgi.py", line 793, in main
env, handler = read_wsgi_handler(response.physical_path)
File "c:\python27\lib\site-packages\wfastcgi.py", line 635, in read_wsgi_handler
handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
File "c:\python27\lib\site-packages\wfastcgi.py", line 618, in get_wsgi_handler
raise ValueError('"%s" could not be imported%s' % (handler_name, last_tb))
ValueError: "flask_app.application()" could not be imported: Traceback (most recent call last):
File "c:\python27\lib\site-packages\wfastcgi.py", line 602, in get_wsgi_handler
handler = __import__(module_name, fromlist=[name_list[0][0]])
File ".\flask_app.py", line 7, …
Run Code Online (Sandbox Code Playgroud)

python iis fastcgi virtualenv

1
推荐指数
1
解决办法
4483
查看次数

如何在 Perl 中接收和响应 Ajax 请求?

我有一个客户端应用程序,它通过 AJAX POST 请求 ( request.open("POST", url, flag)) 向我的 Perl CGI 脚本提交一些数据。

如何使用 Perl 检索此数据并返回一些其他数据(AJAX 响应)?

ajax perl cgi fastcgi xmlhttprequest

0
推荐指数
1
解决办法
3115
查看次数

如何使用 vim 命令行保存文件

我正在为一位在他的服务器上安装了 WordPress 的客户工作。但它没有上传写入,因为一些设置需要通过命令行更改。

我正在尝试按照 Media Temple(他所在的地方)的说明来启用 PHP 作为 FastCGI 运行,以便使 WordPress 能够将文件上传到服务器。不幸的是,我必须通过命令行来执行此操作,并且我没有命令行经验。说明可在此处找到:

http://wiki.mediatemple.net/w/(dv)_3.5:Run_PHP_as_FastCGI_and_resolve_Apache_permission_errors

我最多可以达到步骤 5/6

vim /var/www/vhosts/example.com/conf/vhost.conf
Run Code Online (Sandbox Code Playgroud)

将以下行添加到文件中:

File:vhost.conf

AddHandler fcgid-script .php
SuexecUserGroup domainuser psacln
<Directory /var/www/vhosts/example.com/httpdocs>
FCGIWrapper /var/www/vhosts/example.com/bin/php-cgi .php
Options +ExecCGI +FollowSymLinks
allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

但我不知道如何保存。

我对命令行非常陌生,所以任何帮助都会很棒。我希望能够尽快让 WordPress 具备上传文件的能力。

预先感谢您对我的帮助。

apache wordpress ssh command-line fastcgi

0
推荐指数
1
解决办法
1297
查看次数

是否值得在Apache 2上使用Perl CGI :: Fast?

我知道这听起来像ServerFault的问题,但我知道开发人员经常在服务器挣扎时受到指责,所以我认为这里的帖子可能对那些仍在网络上使用Perl的人有用.

故事:

我们在旧的Apache服务器上出现了已解决过程的严重问题,因此我们决定迁移到Apache 2.新服务器执行得更好,不可否认.然而,测试显示,在负载很重(每分钟约100个用户)的情况下,已停止的进程会在服务器上快速启动,并且使用SSH很明显这些进程正在使用CPU.为了克服这些问题,我们决定采用CGI ::快速这是一个类型的FastCGIPerl的.有了这个僵尸已经消失,但性能明智的服务器没有更好的应对.

结果让我认为,如果Apache 2无论如何都能有效地回收资源,那么实现CGI :: Fast并不是真的有意义.

你们中有没有人有过不同的结论吗?

apache perl fastcgi

0
推荐指数
1
解决办法
1474
查看次数

截至2014年,什么技术是mod_perl的良好替代品?

我多年来一直在使用mod_perl.我有一些模块可以在早期状态下处理Apache请求,基本上是基于请求标头的自定义响应,它会改变Apache的正常响应,比如自定义响应代码等等.

其他人告诉我,现在有更好的方法可以快速运行Perl应用程序(例如,使用一个持久的解释器,只接受subs作为请求处理程序,类似于mod_perl),但是没有一个能够很好地告诉我权威或经验被证明与mod_perl一样快速(甚至更好,如果更好).

我想对这个主题有一个更有经验的意见,我认为StackOverflow可以成为从这些人那里得到答案的完美场所.

因此,截至2014年,mod_perl的哪些替代品被证明是好的甚至更好(在性能和可靠性方面)以及为什么?与mod_perl相比,你有哪些优点或缺点?

perl fastcgi mod-perl mod-perl2 plack

0
推荐指数
1
解决办法
777
查看次数

XAMPP:Phpmyadmin 不适用于 FastCGI

我本地安装了 XAMPP。由于某些原因(Java-Php-Bridge)我必须使用 FastCGI。所以我使用本指南进行设置:http://www3.umoncton.ca/dashboard/docs/use-php-fcgi.html

这工作正常,但现在我无法访问http://localhost/phpmyadmin/ 错误是:

禁止访问!

新的XAMPP安全概念:

只能从本地网络访问所请求的目录。

可以在文件“httpd-xampp.conf”中配置此设置。

这是我的“httpd-xampp.conf”文件:

#
# XAMPP settings
#

<IfModule env_module>
    SetEnv MIBDIRS "C:/xampp/php/extras/mibs"
    SetEnv MYSQL_HOME "\\xampp\\mysql\\bin"
    SetEnv OPENSSL_CONF "C:/xampp/apache/bin/openssl.cnf"
    SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php"
    SetEnv PHPRC "\\xampp\\php"
    SetEnv TMP "\\xampp\\tmp"
</IfModule>

#
# PHP-Module setup
#
LoadFile "C:/xampp/php/php5ts.dll"
LoadFile "C:/xampp/php/libpq.dll"

#LoadModule php5_module "C:/xampp/php/php5apache2_4.dll"
LoadModule fcgid_module modules/mod_fcgid.so


#<FilesMatch "\.php$">
#    SetHandler application/x-httpd-php
#</FilesMatch>
#<FilesMatch "\.phps$">
#    SetHandler application/x-httpd-php-source
#</FilesMatch>
FcgidInitialEnv PHPRC "c:/xampp/php"
AddHandler fcgid-script .php
FcgidWrapper "c:/xampp/php/php-cgi.exe" .php


#
# PHP-CGI setup
#
#<FilesMatch …
Run Code Online (Sandbox Code Playgroud)

php xampp fastcgi phpmyadmin mod-fastcgi

0
推荐指数
1
解决办法
3086
查看次数

php7.2-fpm 超时 nginx wsl 18.04

我最近从 Ubuntu wsl 16.04 升级到 18.04。

完成后,我恢复了本地开发,很高兴发现(几乎)一切正常。

由于某种原因,我现在在 php-fpm 中遇到此错误

2018/09/19 21:17:26 [error] 3736#3736: *1 upstream timed out (110: Connection timed out) while reading upstream, client: ::1, server: _, request: "GET /register HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"

以下是我的 /etc/nginx/sites-available/default 文件的相关内容。

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;

            # With php7.0-cgi alone:
            fastcgi_pass 127.0.0.1:9000;
            # With php7.0-fpm:
            #fastcgi_pass unix:/run/php/php7.2-fpm.sock;
            fastcgi_read_timeout 300;
    }
Run Code Online (Sandbox Code Playgroud)

以及 /etc/php/7.2/fpm/pool.d/www.conf 中的相关行

listen = 127.0.0.1:9000

我也尝试取消注释 listen.allowed_clients = 127.0.0.1 但仍然相同。

我这里一定缺少什么东西。www.conf 文件在升级过程中被重置为默认值,其中必须有某些内容。任何帮助是极大的赞赏。

ubuntu fastcgi nginx windows-subsystem-for-linux ubuntu-18.04

0
推荐指数
1
解决办法
3746
查看次数

Apache fastcgi:有没有一种方法可以在子例程使用时动态检查ENV值?

如果问题定义有点脱节,我深表歉意。我们已经在许多不同的媒介上攻击了这个问题。

基本描述,我们有一个网站,我们正在尝试提供使用Locale :: TextDomain的翻译

我们有fastcgi脚本,该脚本调用了我们的perl模块本地库。Fastcgi和翻译是棘手的(因为我们正在使用它),因为语言是在脚本启动时设置的,并且会持续存在。

因此,在我们的perl模块库中,此方法有效。

package SR::Locale;
our $LOCALE_NAMESPACE = 'es';
use Locale::TextDomain::UTF8 qw( $LOCALE_NAMESPACE );
our $word = __("football");
Run Code Online (Sandbox Code Playgroud)

但是我们找不到在启动时动态设置变量$ LOCALE_NAMESPACE的方法。我们想基于request_uri或正在执行的脚本的dir路径或类似的东西进行设置。所以我们想做类似的事情,但是我们不能在快速的cgi设置中解决这个问题:

package SR::Locale;
$ENV{REQUEST_URI} =~ m{example.com/(..)/}
our $LOCALE_NAMESPACE = $1;
use Locale::TextDomain::UTF8 qw( $LOCALE_NAMESPACE );
our $word = __("football");
Run Code Online (Sandbox Code Playgroud)

在此示例中(对于fastcgi),$ ENV {REQUEST_URI}在脚本启动时模块中为空白。

任何帮助将非常感激。我无法在perl中找到任何有关翻译和fastcgi的参考。

apache perl fastcgi internationalization mod-fcgid

0
推荐指数
1
解决办法
70
查看次数

如何通过 CLI 或纯 FastCGI 获取 PHP-FPM 状态

我想/status?full通过 CLI获取 PHP-FPM页面。在一个命令中,或使用 bash 脚本,我需要显示 PHP 进程管理器可以返回但不使用 nginx 或 apache 的最详细的输出。我正在使用位于/var/run/php5.6-fpm.sock

php bash monitoring fastcgi fpm

0
推荐指数
1
解决办法
2417
查看次数

为什么getenv("QUERY_STRING")在FastCGI C++程序中返回null?

所以我使用Light HTTPd编写了一个用C++编写的FastCGI应用程序,但是我无法使用它来检索查询字符串getenv("QUERY_STRING").如果我取出查询字符串请求(或添加一个null的检查),一切正常,但有了它,它失败了:

#include <stdlib.h>
#ifdef _WIN32
#include <process.h>
#else
#include <unistd.h>
extern char ** environ;
#endif

#include "fcgio.h"
#include "fcgi_config.h"  // HAVE_IOSTREAM_WITHASSIGN_STREAMBUF
#include "redisclient.h"
Run Code Online (Sandbox Code Playgroud)

....

 while (FCGX_Accept_r(&request) == 0)
 {        
    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)

...

    cout << "Content-type: text/html\r\n"
                "\r\n"
                "<TITLE>^_^</TITLE>\n"
                "<H1>echo-cfpp</H1>\n"
                "<H4>PID: " << pid << "</H4>\n"
                "<H4>Request Number: " << ++count << "</H4>\n";

    // If I make this conditional on getenv("QUERY_STRING") not returning null,
    // then the program behaves reliably.
    cout <<getenv("QUERY_STRING");
 }
Run Code Online (Sandbox Code Playgroud)

我已经验证我在请求中传递了一个查询字符串,那么为什么getenv("QUERY_STRING")返回null?我 …

c++ fastcgi lighttpd

-3
推荐指数
1
解决办法
4879
查看次数