Назад | Перейти на главную страницу

php5-cgi дает 502 с лаком, но без

сводка проблемы:

php5-fastcgi работает с nginx, но не работает с nginx + varnish (502 Bad Gateway)

есть ли у кого-нибудь предложение, что я могу изменить, чтобы лак работал?

детали проблемы:

Это моя конфигурация:

(прослушивание 80) nginx (запрос 8181) ==> (прослушивание 8181) varnish ==> (прослушивание 9090) php5-fastcgi

/etc/nginx/conf.d/mydomain.com

server {
  listen 80;
  server_name mydomain.com;
  index index.html index.htm index.php;
  keepalive_timeout  30;
  root /var/www/assets;
  location = /favicon.ico {
    log_not_found off;
    access_log off;
  }
  location ~\.php$ {
    root /var/www/api;
    add_header Access-Control-Allow-Origin *;
    fastcgi_pass 127.0.0.1:8181;
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
  location ~ ^/(api|wp) {
    root /var/www/api;
    try_files $uri $uri/ /index.php?q=$uri&$args;
  }
}

/ и т.д. / по умолчанию / лак

START=yes
NFILES=131072
MEMLOCK=82000
DAEMON_OPTS="-a :8181 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256M"

/etc/varnish/default.vlc

backend default {
    .host = "127.0.0.1";
    .port = "9090";
}
sub vcl_recv {
    set req.backend = default;
    if (!(req.url ~ "wp-(login|admin)")) {
            unset req.http.cookie;
    }
    return(lookup);
}
sub vcl_miss {
    return(fetch);
}
sub vcl_hit {
    return(deliver);
}
sub vcl_fetch {
    if (!(req.url ~ "wp-(login|admin)")) {
            unset beresp.http.set-cookie;
    }
    set beresp.ttl = 24h;
    set beresp.http.X-Cacheable = "YES";
    unset beresp.http.Vary;
    return(deliver);
}
sub vcl_deliver {
    return(deliver);
}

/ usr / bin / php5-fastcgi-p

#!/bin/bash
FASTCGI_USER=user
FASTCGI_GROUP=www-data
PORT=9090
ADDRESS=127.0.0.1
PIDFILE=/var/run/php5-fastcgi.pid
CHILDREN=4
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -a $ADDRESS -p $PORT -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5

(на Ubuntu 10.04 lucid lynx)

Эта настройка в настоящее время не работает (502 Bad Gateway).

Я также получаю пару сообщений в журнале varnishlog, когда делаю свои запросы

 0 CLI          - Wr 200 19 PONG 1380029665 1.0
 11 SessionOpen  c 127.0.0.1 42489 :8181
 11 Debug        c herding
 11 SessionClose c no request
 11 StatSess     c 127.0.0.1 42489 0 1 0 0 0 0 0 0
 0 CLI          - Rd ping
 0 CLI          - Wr 200 19 PONG 1380029668 1.0
 0 CLI          - Rd ping

поэтому я попробовал другую конфигурацию, в которой nginx использует лак, и он работает как шармы.

(слушайте 80) nginx ==> (слушайте 9090) php5-fastcgi

Обычно люди предполагают, что это ошибка spawn-fcgi, но я думаю, что это скорее в конфигурации varnish

(Я работаю над Ubuntu 10.04, поэтому возможность использования php-fpm недоступна.)

вот что я получаю с netstat-nlp

tcp        0      0 0.0.0.0:8181            0.0.0.0:*               LISTEN      20886/varnishd  
tcp        0      0 127.0.0.1:9090          0.0.0.0:*               LISTEN      20989/php5-cgi  
tcp        0      0 127.0.0.1:6082          0.0.0.0:*               LISTEN      20885/varnishd  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1478/nginx.conf 
tcp6       0      0 :::8181                 :::*                    LISTEN      20886/varnishd  

Varnish понимает HTTP, но чтобы подключиться к вашему быстрому CGI-демону PHP, он должен знать стандарт CGI. Вы не можете подключить Varnish к вашему PHP-демону. Должен быть веб-сервер, с которым Varnish может разговаривать и который подключается к PHP. Возможно, настройка Varnish-Nginx-Php имеет больше смысла.

Если вы ищете ускорение Php, используйте кеширование в самом Php и объедините его с хранилищами ключей и значений на основе RAM, такими как Memcached или Redis, или другими базами данных без SQL.