我用c ++编写了一个程序并用gcc编译它(就像fastcgi.com中的示例一样),但我不知道如何在localhost上运行它.
我搜索的每个地方,我发现mod_fcgi的php配置不适用于c ++.
是否有任何机构配置apache和mod_fcgi来运行c ++ Web应用程序???
PHP支持目前设置为:作为快速CGI运行.
我一直在服务器日志中收到这些错误:
mod_fcgid:在45秒内读取数据超时
脚本头的过早结束:index.php
应该快速修复我想,但我找不到要编辑的文件.这是我可以从Plesk改变的东西.
有谁知道如何增加超时?
根据" mod_fcgi不是mod_fastcgi的替代品 "和" mod_fcgid和多线程FastCGI应用程序的问题 ",mod_fcgid并不是设计为期望FastCGI服务器能够同时处理多个请求,即不期望FastCGI服务器是多线程的.
前者说:
它们都支持已发布的"FastCGI"协议,但它们如何控制它们的FastCGI服务器有很大不同.mod_fcgid可以快速消除FastCGI服务器并启动新服务器.
后者说:
似乎mod_fcgid不知道我的服务器是多线程的,并且能够处理多个请求.
这只是两个引用,其他地方也有一些.
线程不仅仅是节省CPU和内存,而且避免了创建新进程的开销(创建一个线程比创建一个进程更轻),这可以通过硬件或操作系统性能来减轻; 这也是一个逻辑问题,不容易缓解:线程属于同一个进程,不仅是性能,还有逻辑,例如.进程无法共享线程可以共享的内容,因为进程是隔离运行的(模IPC,但不一样).
至少出于这个逻辑原因,可能会引发多线程FastCGI服务器的问题.FastCGI服务器可以保存上下文(在进程之间共享可能很大且成本很高),当它被设计为多线程服务器时,它对于所有请求处理程序是全局的.为每个并发请求分配新进程不允许更多地确保公共上下文.
以上两个报价是否仍然正确(一个是2011年,另一个是2010年)?我在网上搜索了这个主题,但找不到任何相关内容.如果它仍然是真的,那么,它是否总是正确或是否有预期的计划mod_fcgid,要了解多线程FastCGI服务器并接受这些服务器可能被设计为处理多个并发请求?
我们有共享托管服务器,它们使用PHP fastcgi(在IIS上)为多个客户端(共享托管).客户经常使用旧的可利用代码,这会导致其应用程序出现漏洞,最终被黑客用来安装恶意代码.大多数情况下,此代码用于从我们的服务器发送垃圾邮件.
我们无法控制客户代码,因此修补漏洞是不可能的.
但是,我们希望阻止客户端发送垃圾邮件,因为他们会在Y时间内发送超过X封电子邮件.
设置是基于fastcgi的,因此php和webserver之间几乎没有关系.PHP通过localhost上的SMTP发送邮件.邮件服务器允许中继所有localhost连接(显然).
我想到的一件事是在fastcgi环境中设置一个包含标识符的环境变量,并使用php的prepend文件选项为php的邮件程序发送的所有邮件添加标题.之后我们可以使用该邮件标题来识别垃圾邮件的罪魁祸首.
上面的选项在发送电子邮件时仍然不会使用常规telnet(telnet localhost,HELO,MAIL FROM等)来处理垃圾邮件脚本.
我的问题是:我是否提到了处理我们问题的最好也许唯一的选择?或者有更好的解决方案吗?如果是这样,请解释您将如何处理该问题.
我在Linux REHL机器上设置了一个Nginx php服务器.当访问html文件一切顺利,但尝试访问php文件时,文件被下载而不是被执行.
这是我的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 {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Run Code Online (Sandbox Code Playgroud)
......这是服务器块:
server {
listen 80;
server_name {mywebsitename};
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html/{mywebsitename}/;
}
location /ngx_status_2462 {
stub_status on;
access_log off;
allow all;
}
location ~ …Run Code Online (Sandbox Code Playgroud) 我正在尝试覆盖使用fastcgi_pass时传递给基于php的应用程序(特别是Phabricator)的http主机头.
我在使用proxy_pass时发现了很多这样做的例子,但我似乎无法找到如何使用fastcgi_pass执行此操作的示例.具体来说,我希望代理的php应用程序将主机头看作"phabricator.localhost".
(这样做的原因是我想将几个不同的域与Phabricator webapp相关联,但它只允许一个域关联,并且它拒绝任何未创建该域的请求.)
我很擅长用FastCGI配置Nginx,所以我不确定fastcgi的工作原理.任何帮助表示赞赏.
这是我的Nginx服务器配置:
server {
server_name phabricator.localhost www.example.com example.com;
root /opt/phabricator/phabricator/webroot;
location / {
index index.php;
rewrite ^/(.*)$ /index.php?__path__=/$1 last;
}
location = /favicon.ico {
try_files $uri =204;
}
location /index.php {
fastcgi_pass localhost:9000;
fastcgi_index index.php;
#### HERE ARE MY ATTEMPTS #####
#proxy_set_header HOST phabricator.localhost;
#fastcgi_param SERVER_NAME phabricator.localhost;
#fastcgi_pass_header 'Host: phabricator.localhost';
#fastcgi_pass_header 'Host: phabricator.localhost';
#add_header Host phabricator.localhost;
#proxy_set_header Host phabricator.localhost;
#### END ATTEMPTS ####
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD …Run Code Online (Sandbox Code Playgroud) 我一直绞尽脑汁试图解决这个问题,这个问题每隔几个小时在我的生产服务器上随机出现一个Wordpress博客(流量不错:平均每天实时用户2000天,好日子5000+,每分钟浏览量)从300到700+不等.
我使用Newrelic来监控性能,我注意到一件奇怪的事情:
每隔几个小时(随机),PHP-FPM池状态如下所示(昨天采取的真实状态)
pool: www
process manager: static
start time: 02/Jan/2017:05:03:16 -0500
start since: 27290
accepted conn: 1107594
listen queue: 777
max listen queue: 794
listen queue len: 40000
idle processes: 0
active processes: 100
total processes: 100
max active processes: 101
max children reached: 0
slow requests: 0
Run Code Online (Sandbox Code Playgroud)
重新启动PHP-FPM并nginx解决问题,但它会在几个小时内再次发生.任何帮助表示赞赏.请指导我.
服务器设置:
DigitalOcean 48GB Memory
16 Core Processor
480GB SSD Disk
Run Code Online (Sandbox Code Playgroud)
PHP-FPM池设置:
pm = static
pm.max_children = 100
pm.max_requests = 5000
Run Code Online (Sandbox Code Playgroud)
nginx配置:
worker_processes 32;
worker_rlimit_nofile 100000;
events …Run Code Online (Sandbox Code Playgroud) 我有这样的虚拟主机设置
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
phpinfo() 显示我的网站有 php 5.6 版本。好的!
现在我正在尝试使用 Mod_Ruid2 来限制权限。我将以下内容添加到我的虚拟主机
RDocumentChRoot /var /www/html
<Directory "/www/html/">
Require all granted
RMode config
RUidGid admin0 admin0
</Directory>
Run Code Online (Sandbox Code Playgroud)
尝试访问该网站后,我在日志中看到错误
[Sun Oct 13 16:09:02.492117 2019] [proxy:error] [pid 13571] (2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /var/run/php/php5.6-fpm.sock (*) failed
[Sun Oct 13 16:09:02.492194 2019] [proxy_fcgi:error] [pid 13571] [client 192.168.0.110:47622] AH01079: failed to make …Run Code Online (Sandbox Code Playgroud) 我在长时间运行的 PHP 脚本时遇到问题:
<?php
sleep(70); # extend 60s
phpinfo();
Run Code Online (Sandbox Code Playgroud)
每次504 Gateway Time-outNginx 响应 60 秒后都会终止。
当我检查 Nginx 错误时,我可以看到请求超时:
... [error] 1312#1312: *2023 upstream timed out (110: Connection timed out) while reading response header from upstream, ... , upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock", ...
Run Code Online (Sandbox Code Playgroud)
/etc/nginx/conf.d/timeout.conf我浏览了相关问题并尝试增加创建包含以下内容的文件的超时:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
fastcgi_connect_timeout 600;
Run Code Online (Sandbox Code Playgroud)
我还阅读了fastcgi和核心模块的 Nginx 文档,搜索默认设置为 60 秒的任何配置。
我排除了client_*超时,因为它们返回HTTP 408而不是HTTP 504响应。
这是 FastCGI 的 Nginx 服务器配置部分: …
我试图让nginx的代理工作用php-fpm的变种PHP官方图像通过fastcgi。不幸的是,我似乎无法这样做。我确信这个问题只是一些我不知道的简单问题。
我已尽我所能遵循nginx-proxy的说明,并将其归结为一种非常简单的方法来重新创建问题。这是我的docker-compose.yml文件:
version: "3"
services:
proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
- DEFAULT_HOST=test.local
fpm:
image: php:fpm
environment:
- VIRTUAL_HOST=test.local
- VIRTUAL_PROTO=fastcgi
Run Code Online (Sandbox Code Playgroud)
然后我index.php通过运行放入一个简单的文件:
docker container exec -it web_fpm_1 /bin/bash -c 'echo "<?php phpinfo(); ?>" > /var/www/html/index.php'
Run Code Online (Sandbox Code Playgroud)
(它放在web_前面是因为这个项目在一个名为 的目录中web/。)
我还可以修改我的hosts文件,以点test.local来127.0.0.1,这样我就可以测试它。但是,每次尝试浏览都会test.local导致空白页面。
web_proxy_1据我所知,容器的日志没有显示任何异常:
? docker container logs web_proxy_1
WARNING: /etc/nginx/dhparam/dhparam.pem was not found. …Run Code Online (Sandbox Code Playgroud)