我不是 Perl 世界的人,所以其中一些对我来说是新的。我正在运行 Ubuntu Hardy LTS,并安装了 apache2 和 mod_fcgid 软件包。我想让 MT4 在 fcgid 而不是 mod-cgi 下运行(它似乎可以在普通的 CGI 下运行)。
我似乎无法让一个简单的 Perl 脚本在 fcgid 下运行。我创建了一个简单的“Hello World”应用程序,并包含了上一个问题中的代码来测试 FCGI 是否正在运行。
我将脚本命名为 HelloWorld.fcgi(当前 fcgid 设置为仅处理 .fcgi 文件)。代码:
#!/usr/bin/perl
use FCGI;
print "Content-type: text/html\n\n";
print "Hello world.\n\n";
my $request = FCGI::Request();
if ( $request->IsFastCGI ) {
print "we're running under FastCGI!\n";
} else {
print "plain old boring CGI\n";
}
Run Code Online (Sandbox Code Playgroud)
当从命令行运行时,它会打印“plain old Boring...”当通过对 apache 的 http 请求调用时,我收到 500 内部服务器错误,并且脚本的输出被打印到 Apache 错误日志中:
Content-type: text/html
Hello …Run Code Online (Sandbox Code Playgroud) 我在一个 python 文件 - backend.py 中有一个 Bottle 应用程序。该文件包含以下定义:
variable = {
'field': [f for f in csv.DictReader(open('../data/fields.csv', 'rb'), delimiter=';')]
}
def run_fcgi():
from bottle import FlupFCGIServer
run(port=8080, server=FlupFCGIServer)
if __name__ == "__main__":
run(host='0.0.0.0', port=8087, server='waitress')
Run Code Online (Sandbox Code Playgroud)
当我像这样运行这个应用程序时:
python backend.py
Run Code Online (Sandbox Code Playgroud)
应用程序启动成功。
当我由主管将此应用程序作为 fcgi 应用程序(fcgi.py)运行时:
#!my_path_to_python
if __name__ == '__main__':
import backend
backend.run_fcgi()
Run Code Online (Sandbox Code Playgroud)
我有一个错误:
Traceback (most recent call last):
File "path_to_my_project/fcgi.py", line 9, in <module>
import backend
File "path_to_my_project/backend.py", line 49, in <module>
'msk': [i for i in csv.DictReader(open('../data/fields.csv', 'rb'), delimiter=';')],
IOError: [Errno …Run Code Online (Sandbox Code Playgroud) 我为 Rails 应用程序设置了 nginx,它对我来说工作得很好。现在我想将我的 Wordpress 博客从 移动blog.website.com到website.com/blog,以便网络爬虫将其视为网站的一部分。
我在 Rails 应用程序的public/目录中创建了一个符号链接,并将以下内容添加到我的 nginx 配置中:
# Rails server
server {
root /project/path/current/public;
server_name project.com;
passenger_enabled on;
rails_env production;
client_max_body_size 20m;
if ($http_x_forwarded_proto != 'https') {
return 301 https://$host$request_uri;
}
location /blog {
index index.html index.php;
try_files $uri $uri/ /blog/index.php?q=$uri&$args;
if (!-e $request_filename) {
rewrite ^.+?(/blog/.*.php)$ $1 last;
rewrite ^ /blog/index.php last;
}
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_intercept_errors on;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param …Run Code Online (Sandbox Code Playgroud) 如果后端已经设置了“content-encoding”标头,是否有任何聪明的方法可以欺骗 nginx 停止 gzip?
Nginx 配置为对 php fastcgi 后端的输出进行 gzip 压缩。
这在 99% 的情况下都很有效。
除了极少数情况外,php 会发送一个原始 gzip 压缩文件并附加一个Content-Encoding: gzip标头。
不幸的是,Nginx 会继续尝试第二次对该内容进行 gzip 压缩。
生成双content-encoding: gzip content-encoding: gzip标头和双编码 gzip 正文。
大多数现代浏览器都可以处理这个问题,比如 Firefox、Chrome。
IE8 不能,Safari 移动版不能,旧版 Safari 5 for Windows 不能 - 相反,它们会显示乱码的 gzip 压缩内容,因为它合并了内容编码标头,并且仅对 gzip 压缩正文进行一次解码。
感谢您的任何想法。
我们有nginx/1.9.1
执行此操作时phpinfo(),无法获取以下参数的值。
$_SERVER["REMOTE_PORT"] // no value
$_ENV["REMOTE_PORT"] // no value
Run Code Online (Sandbox Code Playgroud)
尽管我们在FastCGI配置文件中有以下设置
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
Run Code Online (Sandbox Code Playgroud)
有人可以指导错误在哪里吗?
我正在使用 libfcgi (fcgiapp) 库编写 FastCGI 应用程序。问题出在FCGX_Accept_r方法内部,该方法等待传入连接并阻塞线程。正如我所看到的,它没有任何超时,因此程序流无法继续执行,直到请求到达。
我尝试FCGI_FAIL_ACCEPT_ON_INTR在方法中设置标志FCGX_InitRequest以使接受函数中断,但没有成功。
设置 FCGI_FAIL_ACCEPT_ON_INTR 可防止 FCGX_Accept() 在中断后重新启动。
我也尝试过拨打电话FCGX_ShutdownPending,但它似乎拒绝新的传入连接,并且不会停止侦听下一个连接。
阻止库接受任何新请求。信号处理程序安全。
你能告诉我还能做什么来打破FCGX_Accept_r等待吗?
所以我第一次设置 PHP5-FPM,一开始一切都很顺利,我可以看到我的网站启动并运行,直到我做了一些调整
/etc/php5/fpm/pool.d/www.conf
Run Code Online (Sandbox Code Playgroud)
具体在这些方面:
pm.max_children = 100 # The hard-limit total number of processes allowed
pm.start_servers = 20 # When nginx starts, have this many processes waiting for requests
pm.min_spare_servers = 10 # Number spare processes nginx will create
pm.max_spare_servers = 20 # Number spare processes attempted to create
pm.process_idle_timeout = 10s;
Run Code Online (Sandbox Code Playgroud)
当我重新启动 apache 和 php5-fpm 服务时,出现以下错误:
[Wed Nov 25 02:39:43.973654 2015] [fastcgi:error] [pid 5438] (2)No such file or directory: [client 36.72.129.207:60098] FastCGI: failed to connect to server "/usr/lib/cgi-bin/php5-fcgi": connect() …Run Code Online (Sandbox Code Playgroud) Nginx 配置允许分别为每个站点的 fastcgi 服务器设置参数:
location ~ \.(php)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/***";
fastcgi_param PHP_ADMIN_VALUE "session.save_path=/home/***/tmp";
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
Run Code Online (Sandbox Code Playgroud)
在Apache2.4配置中如何做到这一点?我要改进的变体是:
<IfModule mod_fastcgi.c>
AddHandler php7.fcgi .php
Action php7.fcgi /php7.fcgi
Alias /php7.fcgi /usr/lib/cgi-bin/php7.fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7.fcgi -host 127.0.0.1:9000 -pass-header Authorization -idle-timeout 3600
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
Run Code Online (Sandbox Code Playgroud) 我正在使用来自https://hub.docker.com/_/php/ 的php5.6-fpm docker 图像。
当我检查 phpinfo() 中的 php.ini 位置时,它说它是 /usr/local/etc/php,但是当我查看该路径时,那里没有 php.ini。
现在我想更改 max_execution_time php 变量。如何在自定义 docker 映像中执行此操作?
我正在尝试使用带有 php 5.6 和 nginx 的 Synology 来设置网站。该网站是 WordPress 和一个主题。在处理演示导入时,我们有 NGINX 错误 405(不允许)。
这有点令人沮丧,因为我喜欢事情做得很好。
我查看了 php.ini 文件和 nginx.conf 文件。
# Copyright (c) 2000-2016 Synology Inc. All rights reserved.
worker_processes auto;
#worker_cpu_affinity auto;
worker_rlimit_nofile 65535;
include conf.d/main.conf;
events {
use epoll;
multi_accept on;
worker_connections 1024;
include conf.d/events.conf;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log off;
#access_log syslog:server=unix:/dev/log,facility=local7,tag=nginx_access,nohostname main;
error_log syslog:server=unix:/dev/log,facility=local7,tag=nginx_error,nohostname error;
sendfile on;
server_tokens off;
proxy_request_buffering …Run Code Online (Sandbox Code Playgroud)