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) 有没有办法预加载(而不是自动加载)PHP 项目的所有类/函数?
我正在考虑使用 PHPFastCGI 运行的 Web 应用程序(因此我们可以引导它的一部分并在请求之间重用这一位),并且它使用了 Composer(它的类映射可以用于此目的吗?)。
这是一些背景:
“常规” PHP 应用程序处理单个请求,然后它们就会被杀死。预加载所有类/函数意味着有更长的启动时间,仅自动加载用于请求的类是一个聪明的优化,但它可以进一步改进(它们需要许多缓慢的“读取文件系统”操作),通常通过分组在单个文件中可能用于所有请求的类(这是ClassPreloader解决的问题)。
然而,启动一个应用程序只处理一个请求然后终止它并不是唯一的选择:使用PHP FastCGI可以在请求之间保持应用程序处于活动状态。这允许我们从请求/响应时间中减少启动时间(例如,将来自 DIC 的所有服务实例化一次)。
在分析我的应用程序时,我注意到自动加载总是出现在前 10 个最昂贵的独占函数调用中。在 PHP FastCGI 应用程序中,在启动阶段移动类加载以从请求/响应时间完全删除它可能是有意义的。我正在尝试找出答案(我会做一些基准测试并发布结果)。
有关这种运行 PHP 应用程序的“奇特”方式的更多信息,请参阅:
我已经设置了一个 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) 我有一个客户端应用程序,它通过 AJAX POST 请求 ( request.open("POST", url, flag)) 向我的 Perl CGI 脚本提交一些数据。
如何使用 Perl 检索此数据并返回一些其他数据(AJAX 响应)?
我正在为一位在他的服务器上安装了 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 具备上传文件的能力。
预先感谢您对我的帮助。
我知道这听起来像ServerFault的问题,但我知道开发人员经常在服务器挣扎时受到指责,所以我认为这里的帖子可能对那些仍在网络上使用Perl的人有用.
我们在旧的Apache服务器上出现了已解决过程的严重问题,因此我们决定迁移到Apache 2.新服务器执行得更好,不可否认.然而,测试显示,在负载很重(每分钟约100个用户)的情况下,已停止的进程会在服务器上快速启动,并且使用SSH很明显这些进程正在使用CPU.为了克服这些问题,我们决定采用CGI ::快速这是一个类型的FastCGI的Perl的.有了这个僵尸已经消失,但性能明智的服务器没有更好的应对.
结果让我认为,如果Apache 2无论如何都能有效地回收资源,那么实现CGI :: Fast并不是真的有意义.
你们中有没有人有过不同的结论吗?
我多年来一直在使用mod_perl.我有一些模块可以在早期状态下处理Apache请求,基本上是基于请求标头的自定义响应,它会改变Apache的正常响应,比如自定义响应代码等等.
其他人告诉我,现在有更好的方法可以快速运行Perl应用程序(例如,使用一个持久的解释器,只接受subs作为请求处理程序,类似于mod_perl),但是没有一个能够很好地告诉我权威或经验被证明与mod_perl一样快速(甚至更好,如果更好).
我想对这个主题有一个更有经验的意见,我认为StackOverflow可以成为从这些人那里得到答案的完美场所.
因此,截至2014年,mod_perl的哪些替代品被证明是好的甚至更好(在性能和可靠性方面)以及为什么?与mod_perl相比,你有哪些优点或缺点?
我本地安装了 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) 我最近从 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
如果问题定义有点脱节,我深表歉意。我们已经在许多不同的媒介上攻击了这个问题。
基本描述,我们有一个网站,我们正在尝试提供使用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的参考。
我想/status?full通过 CLI获取 PHP-FPM页面。在一个命令中,或使用 bash 脚本,我需要显示 PHP 进程管理器可以返回但不使用 nginx 或 apache 的最详细的输出。我正在使用位于/var/run/php5.6-fpm.sock
所以我使用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?我 …
fastcgi ×12
perl ×4
apache ×3
php ×3
nginx ×2
ajax ×1
bash ×1
c++ ×1
cgi ×1
command-line ×1
composer-php ×1
fpm ×1
hhvm ×1
iis ×1
laravel ×1
lighttpd ×1
mod-fastcgi ×1
mod-fcgid ×1
mod-perl ×1
mod-perl2 ×1
monitoring ×1
phpmyadmin ×1
plack ×1
python ×1
ssh ×1
ubuntu ×1
ubuntu-18.04 ×1
virtualenv ×1
windows-subsystem-for-linux ×1
wordpress ×1
xampp ×1