我是FastCGI的新手,并希望使用这个平台来加速我现有的vanilla CGI(perl)程序.
但是在阅读FastCGI/Apache FAQ时,似乎我可以在Apache配置中设置我的脚本(一旦转换为使用单独的初始化/请求部分),如下所示:
1)动态
2)静态"在SetHandler的范围内"
3)静态"在AddHandler的范围内"
4)静态"在Set/AddHandler范围之外"(或者,我认为,这可以称为'外部')
我对这四个选项感到困惑,我假设"动态"的默认值是我应该使用的,但有人可以解释这些的优点/缺点吗?
我正在python上编写一个工具来监控fastcgi应用程序.fastcgi我唯一需要的是加载ping和状态页面(如果失败则返回某种错误).
有很多库(从python-fasctgi绑定到扭曲)似乎能够做到这一点,但是大多数库对于我的目的来说简直太过分了,而且其中许多都会让我产生额外的依赖性,导致一些包装问题.
那么,是否有任何简单的python fastcgi 客户端实现/库,易于安装/打包(转rpm)或小到足以随项目分发.
更新:
感谢agf,我已经能够连接到fastcgi app并发送一些请求.它只不过是标准的php-fpm.但我无法得到任何位置的响应:我正试图从'/ ping',它应该响应200 OK和'pong'在体内.对于我的任何要求,所有我得到的是200 OK响应,空身.
我正在以这种方式提出要求:
def _load_page(self, url):
""" load fastcgi page """
fcgi = fcgi_client.FCGIApp(host = self.fcgi_host, port = self.fcgi_port)
env = {
'SCRIPT_FILENAME': url,
'QUERY_STRING': url,
'REQUEST_METHOD': 'GET',
'SCRIPT_NAME': url,
'REQUEST_URI': url,
'GATEWAY_INTERFACE': 'CGI/1.1',
'SERVER_SOFTWARE': 'ztc',
'REDIRECT_STATUS': '200',
'CONTENT_TYPE': '',
'CONTENT_LENGTH': '0',
'DOCUMENT_URI': url,
'DOCUMENT_ROOT': '/',
#'SERVER_PROTOCOL' : ???
'REMOTE_ADDR': '127.0.0.1',
'REMOTE_PORT': '123',
'SERVER_ADDR': self.fcgi_host,
'SERVER_PORT': str(self.fcgi_port),
'SERVER_NAME': self.fcgi_host
}
ret = fcgi(env)
print ret
Run Code Online (Sandbox Code Playgroud)
我还必须在stdin处理中修改flup客户端:
# Transfer wsgi.input …Run Code Online (Sandbox Code Playgroud) 我一直在搜索这个主题,并且建议似乎是nginx应该在那里提供静态文件和apache + wsgi来处理Django.很多这方面的信息已经有几年了,所以我想知道是否有一种方法可以简化这种情况而不会降低性能,只需要依赖Nginx和fastCGI和/或wsgi.
我是非Heroku部署的新手,所以这就是为什么我可能听起来像我不知道我在说什么.
我找到了http://support.zeus.com/zws/examples/2005/12/16/hello_world_in_perl_and_c,这两个例子正在运行.
现在我为Ada尝试了这个,我从2天后就无法完成它.
fcgi_stdio.ads
with Interfaces.C;
with Interfaces.C.Strings;
package fcgi_stdio is
function FCGI_Accept return Interfaces.C.int;
pragma Import (C, FCGI_Accept, "FCGI_Accept");
procedure FCGI_printf (str : Interfaces.C.Strings.chars_ptr);
pragma Import (C, FCGI_printf, "FCGI_printf");
end fcgi_stdio;
Run Code Online (Sandbox Code Playgroud)
test.adb
with fcgi_stdio;
with Interfaces.C;
with Interfaces.C.Strings;
procedure Test is
begin
while Integer (fcgi_stdio.FCGI_Accept) >= 0 loop
fcgi_stdio.FCGI_printf (Interfaces.C.Strings.New_String ("Content-Type: text/plain" & ASCII.LF & ASCII.LF));
fcgi_stdio.FCGI_printf (Interfaces.C.Strings.New_String ("Hello World from Ada!" & ASCII.LF));
end loop;
end Test;
Run Code Online (Sandbox Code Playgroud)
当我在控制台中运行它时,我收到以下错误:
$ ./test
raised STORAGE_ERROR : stack overflow or erroneous …Run Code Online (Sandbox Code Playgroud) 我有一个WordPress安装启动并运行没有问题.页面上有一个元素不是WP的一部分,而是我们自己的自定义PHP脚本.只是在那里处理表单POST请求并在某种程度上处理它.
要求我们没有以.php结尾的扩展名.我的表单提交的内容如下:
/places/signup.html
Run Code Online (Sandbox Code Playgroud)
在我的nginx配置中,我有这个:
server {
listen 87948; # It's behind a reverse proxy
server_name domain.com www.domain.com;
include /etc/nginx/proxy_params;
index index.php;
root /opt/www/public_html;
location /favicon.ico {
return 404;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
location ~ \.php$ {
add_header Access-Control-Allow-Origin "*";
client_body_buffer_size 4096k;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /opt/www/public_html/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
# LOOK HERE
location ~ /places/signup.html {
root /opt/www/custom_scripts/;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_param …Run Code Online (Sandbox Code Playgroud) 我想通过Nginx使用HHVM.(Ubuntu 12.04.2 LTS,PHP 5.3.10)
我按照这里提到的步骤进行了访问:http:
//www.hhvm.com/blog/1817/fastercgi-with-hhvm
这就是我的Nginx设置的外观:
server {
listen 80;
server_name demo1.dev
server_name_in_redirect off;
root /var/www/demo1;
location / {
index index.php;
try_files $uri $uri/ @handler;
expires 30d;
}
location @handler {
rewrite / /index.php;
}
location ~ .php$ {
fastcgi_keep_conn on;
if (!-e $request_filename) { rewrite / /index.php last; }
expires off;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param PHP_VALUE "error_log=/var/report/PHP.error.log";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1y;
log_not_found off;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个名为hhvm.php的文件,其中包含:
function is_hhvm() { …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过预构建的软件包在Debian 7上安装HHVM.我有另一台具有相同配置的服务器并且它正在工作但是在其中一台服务器中HHVM FastCGI拒绝连接
这是/var/log/nginx/error.log
2014/11/25 23:24:10 [error] 422#0: *39 connect() failed (111: Connection refused) while connecting to upstream, client: 213.128.95.22, server: , request: "GET /api/v2/checkaccess HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "77.75.35.140"
Run Code Online (Sandbox Code Playgroud)
我确信HHVM守护程序正在工作并正在监听9000.端口.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
hhvm 12192 www-data 16u IPv6 792971 0t0 TCP *:9000 (LISTEN)
Run Code Online (Sandbox Code Playgroud)
但我也无法与telnet连接
root@server:/home/itusozlukcom# telnet 127.0.0.1 9000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Run Code Online (Sandbox Code Playgroud)
我确信代码没有问题,因为相同的代码在另一台服务器上工作,在这个服务器中,代码由HHVM CLI工作.
HHVM error.log为空.
可能是什么问题?
排除了琐碎的原因,如缺少写入文件的权限,我正在寻找原因.该文件fcgid.conf仅提供基本设置,我无法验证它尝试打开的端口.我如何授予许可?
提示:我的系统可能阻塞了端口,但我没有发现端口没有提到.在fcgid配置中.
这是Apache错误日志.加载快速CGI脚本时:
[Tue Oct 06 14:16:24.235309 2015] [fcgid:error] [pid 23141:tid 139803208390720] (13)Permission denied: mod_fcgid: couldn't bind unix domain socket /var/run/httpd/mod_fcgid/23141.256
[Tue Oct 06 14:16:24.235351 2015] [fcgid:warn] [pid 23141:tid 139803208390720] (13)Permission denied: mod_fcgid: spawn process /var/www/html/azure/testfcgi.fcgi error
[Tue Oct 06 14:16:25.236606 2015] [fcgid:error] [pid 23141:tid 139803208390720] (13)Permission denied: mod_fcgid: couldn't bind unix domain socket /var/run/httpd/mod_fcgid/23141.257
[Tue Oct 06 14:16:25.236682 2015] [fcgid:warn] [pid 23141:tid 139803208390720] (13)Permission denied: mod_fcgid: spawn process /var/www/html/azure/testfcgi.fcgi error
[Tue Oct 06 14:16:26.237965 2015] [fcgid:error] [pid …Run Code Online (Sandbox Code Playgroud) 我正在按照这些步骤部署Django项目
我的.htaccess是:
AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)
我的.fcgi:
#!/homeX/your_username/python27/bin/python27
import sys, os
# Add a custom Python path.
sys.path.insert(0, "/homeX/your_username/python27")
sys.path.insert(13, "/homeX/your_username/myproject")
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
Run Code Online (Sandbox Code Playgroud)
当我跑来python2.7 mysite.fcgi证明它有效时,它会让我:
无法导入flup.server.fcgi
我该怎么导入flup.server.fcgi?
我使用的是:Django 1.8.7,flup 1.0.3,python 2.7,psycopg2为postgreSQL,并使用一切都下载pip.
我为PHP5.6运行了两个docker容器:
docker run --name php5 \
-v /html1:/var/www/html/site1 \
-d -p 9001:9000 php:5.6-fpm
Run Code Online (Sandbox Code Playgroud)
对于PHP7:
docker run --name php7 \
-v /html2:/var/www/html/site2 \
-d -p 9000:9000 php:7-fpm
Run Code Online (Sandbox Code Playgroud)
我用Nginx运行Docker容器:
docker run --name nginx-cache \
-v /nginx.conf:/etc/nginx/nginx.conf \
-v /nginx/html1:/var/www/html/site1 \
-v /nginx/html2:/var/www/html/site2 \
-v /sites-enabled:/etc/nginx/sites-enabled/ \
--link php5 --link php7 -d -p 9999:80 nginx
Run Code Online (Sandbox Code Playgroud)
与nginx.conf:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
gzip on;
gzip_http_version 1.0;
gzip_proxied any;
gzip_min_length …Run Code Online (Sandbox Code Playgroud)