Como fazer o nginx conectar o php-fpm com o 127.0.0.1, não com o ip público do servidor?

0

Eu encontrei o erro 'AVISO: [pool www] child 3715 disse ao stderr: "ERRO: Conexão desaprovada: o endereço IP' x.x.x.x 'foi descartado." ' no log do php-fpm, onde 'x.x.x.x' é o ip público do meu servidor.

Como o "listen.allowed_clients = 127.0.0.1" está definido em php-fpm, o erro é razoável. Mas eu me pergunto por que o nginx está se conectando ao php-fpm com seu ip público, o nginx e o php-fpm estão realmente no mesmo servidor. Existe uma abordagem para mudar o comportamento do nginx aqui?

UPDATE: configurações detalhadas adicionadas.

no nginx.conf,:

user  nginx; 
worker_processes  4; 
error_log  /var/log/nginx/error.log; 
pid        /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;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
    index   index.html index.htm;
    upstream php {
        server 127.0.0.1:9000;
    }
}

no /etc/nginx/conf.d/test.conf:

server {
        listen 443 default_server ssl;
        ssl_certificate /usr/share/nginx/html/xxx.crt;
        ssl_certificate_key /usr/share/nginx/html/xxx/xxx.key;

        ## Your website name goes here.
        server_name x.x.x;
        ## Your only path reference.
        root /usr/share/nginx/html/xxx;
        ## This should be in your http block and if it is, it's not needed here.
        include       /etc/nginx/mime.types;
        index index.php

        location ~ \.php$ {
                #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass php;
        }
}

em fastcgi.conf:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

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;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

status php-fpm:

[root@test-server ~]# netstat -tulnp | grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      4134/php-fpm: maste 

nos logs do php-fpm:

[03-Aug-2015 09:55:02] WARNING: [pool www] child 4109 said into stderr: "ERROR: Connection disallowed: IP address '1.2.3.4' has been dropped."

No meu servidor: nome_do_servidor 'x.x.x' foi realmente resolvido para '1.2.3.4' pelo dns, o qual eu substituo o meu nome_do_servidor e o ip público reais por esses falsos. Se é confuso, desculpe por isso.

TODOS os arquivos de configuração acima não foram alterados por um longo tempo. Tudo estava bem até que eu reiniciei o servidor. Lembrei-me que adicionei uma linha como "1.2.3.4 x.x.x" no meu / etc / hosts, mas remover isso não ajudou.

Atualmente mudei listen.allowed_clients em php-fpm para contornar este problema. Mas estou curioso sobre o comportamento do nginx e do php-fpm.

    
por apporc 03.08.2015 / 11:45

1 resposta

0

Para definir explicitamente o endereço IP de origem da solicitação, use um dos fastcgi_bind / diretivas proxy_bind junto com a diretiva * _pass correspondente.

This directive appeared in version 0.8.22. Makes outgoing connections to a FastCGI server originate from the specified local IP address with an optional port (1.11.2). Parameter value can contain variables (1.3.12). The special value off (1.3.12) cancels the effect of the fastcgi_bind directive inherited from the previous configuration level, which allows the system to auto-assign the local IP address and port.

    
por 21.09.2016 / 19:07

Tags