当前位置: 首页 > 知识库问答 >
问题:

在ec2上使用多php-fpm服务器实例运行nginx时连接错误

苏建安
2023-03-14

我试图在AmazonEC2上运行php5,使用多个分离的php fpm服务器,通过nginx上的上游块进行负载平衡。我正在用两个t1进行测试。微实例,但当我尝试加载php文件时,浏览器上出现502错误网关。(静态html文件工作正常,但无法使php文件正常工作。)

这是我的nginx错误日志。

2012/07/11 12:28:21[错误]18626#0:*1 recv()在从上游读取响应头时失败(104:由对等方重置连接),客户端:xxx。xxx。xxx。xxx,服务器:www.example。com,请求:“GET/HTTP/1.1”,上游:fastcgi://10.xxx.xxx.xxx:9000主持人:“www.example。com“

有时我也会这样。

2012/07/11 13:25:51[错误]1157#0:*4从上游读取响应标头时,上游连接过早关闭,客户端:xxx。xxx。xxx。xxx,服务器:www.example。com,请求:“GET/HTTP/1.1”,上游:fastcgi://10.xxx.xxx.xxx:9000主持人:“www.example。com“

我花了一些时间从ec2 sequritygroup/iptables打开9000端口,并在nginx和php-fpm上声明本地ip地址,所以我认为这不是问题。(我曾经有连接拒绝错误日志)

有人能帮我吗??下面是我的服务器设置和首选项。

[实例1]

  • t1.microCentOS 6.2.2
  • nginx/1.2.2

[实例2]

  • t1。micro CentOS 6.2。2
  • PHP5.3。14(fpm fcgi)Zend发动机v2。3.0,带加速装置v0。9.6

[nginx.conf]

user  nginx nginx;
worker_processes  1;
worker_rlimit_nofile 1024;
worker_priority -5;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    multi_accept on;
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    server_tokens   off;

    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  0;

    gzip  on;

    upstream apserver {
        ip_hash;
        server ip-10-xxx-xxx-xxx.ap-northeast-1.compute.internal:9000;
    }

    include /etc/nginx/conf.d/*.conf;
}

[example.conf]

server {
    listen       80;
    server_name  www.example.com;

    charset utf-8;
    access_log  /var/log/nginx/www.example.com.access.log  main;
    error_log   /var/log/nginx/www.example.com.error.log  debug;
    root    /var/www;

    location / {
        index   index.php index.html index.html;
        if (-f $request_filename) {
            expires max;
            break;
        }

        if (!-e $request_filename) {
            rewrite ^(.+)/index\.php/(.*)$ $1/index.php?q=$2 last;
        }
    }

        location ~ \.php$ {
        fastcgi_send_timeout  10m;
            fastcgi_read_timeout 10m;
        fastcgi_connect_timeout 10m;
        fastcgi_pass    apserver;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME     $document_root$fastcgi_script_name;
        fastcgi_param   PATH_INFO       $fastcgi_script_name;
        include     /etc/nginx/fastcgi_params;
    }
}

[php fpm.d/www.conf]

[www]
listen = ip-10-xxx-xxx-xxx.ap-northeast-1.compute.internal:9000
listen.backlog = -1
listen.allowed_clients = ip-10-yyy-yyy-yyy.ap-northeast-1.compute.internal

; Tried testing with below and got the same error
;listen = 9000
;listen.allowed_clients = any

listen.owner = prod
listen.group = prod
listen.mode = 0666
user = prod
group = prod

pm = dynamic
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8
pm.max_requests = 500

request_terminate_timeout = 30
request_slowlog_timeout = 2
slowlog = /var/log/php-fpm/www-slow.log

php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_admin_flag[expose_php] = off

共有1个答案

姚树
2023-03-14

我终于明白了!!

我仍然不知道为什么,但通过在我的每个实例上分配弹性ip,并使用私有ip而不是私有DNS地址,解决了我的问题。

所以我的conf文件现在看起来像这样以防万一。

[nginx.conf]

upstream apserver {
    ip_hash;
    server 10.xxx.xxx.xxx:9000;
}

[php fpm.d/www.conf]

[www]
listen = 10.xxx.xxx.xxx:9000
listen.backlog = -1
listen.allowed_clients = 10.yyy.yyy.yyy

谢谢!

 类似资料:
  • 我知道有很多关于502坏网关的帖子,但是我还没有解决这个问题。我正在使用Docker Comment为Nginx和PHP-FPM创建单独的容器。 错误我得到加载PHP文件在浏览器(超文本标记语言文件渲染罚款): 我已经试着使用Unix套接字等工具调整各种配置好几个小时了,但仍然收到502个PHP文件错误。你能看出什么地方不对劲吗? 这是所有必需的文件。。 多克作曲家。yml: docker/ngi

  • null 我们得出的结论是,客户端可以连接到Nginx,但是Nginx在将请求重定向到FPM(可以通过端口7777访问)时没有收到响应,并显示超时错误。我们一直致力于解决Nginx和FPM之间的通信问题,但几个小时后,我们还没有找到解决方案。 注意:这个问题在我们设置的四个虚拟机中重复出现。 Nginx错误日志(注意:主机名和ip已被取消) 文件:/etc/nginx/fastcgi_params

  • 问题内容: 连接到在Amazon EC2集群中运行的Java应用程序时遇到问题。我们绝对允许“ JMX端口”(通常是RMI注册表端口) 和 服务器端口(完成大部分工作)都进入所讨论实例的安全组。Jconsole连接但似乎挂起并且从不显示任何信息。 我们正在使用以下内容运行我们的java: 我们尝试过: Telnet 连接 到端口,但不显示任何信息。 我们可以在ssh上使用remote-X11在实例

  • 我们在连接到运行在AmazonEC2集群中的Java应用程序时遇到了问题。我们明确地允许“JMX端口”(它通常是RMI注册表端口)和服务器端口(它完成了大部分工作)对所讨论的实例的安全组。Jconsole连接但似乎挂起并且从未显示任何信息。 Telnets连接到端口,但不显示任何信息。 我们可以通过ssh使用remote-X11在实例本身上运行,它可以连接并显示信息。因此JRE将其导出到本地。 打

  • 我正在创建一个AWS实例,并尝试在创建时运行Vault服务器。我的问题是创建过程永远不会完成,因为服务器没有在后台运行。这是我的配置: 基本上,我通过下载Vault并运行开发服务器。服务器实际上是运行的(我在终端日志中看到它),但实例创建(由Terraform)永远不会完成: 我试图添加<代码> 如何在创建实例时以后台模式启动服务器? 编辑 我也试过nohup: 但当terraform完成时服务器

  • 我正在尝试运行节点。亚马逊AWS Ec2微实例上的js服务器和Redis服务器。 我已经安装了Redis Server,Redis Server命令运行良好。 我使用“永远”来保持Redis-Server运行。它工作正常。 但当我启动节点服务器时,它无法连接到Redis服务器。 它给出了以下错误- 做一个“永久列表”表明redis服务器运行良好。 我已经验证了当redis-server启动时,它从