问题概要:

问题概要:

问题概要:

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

/etc/默认/清漆

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/默认.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 错误网关)。

当我发出请求时,我也会在 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 绕过 varnish,并且它像魔法一样工作。

(在 80 上监听)nginx ==> (在 9090 上监听)php5-fastcgi

通常人们认为这是 spawn-fcgi 的错误,但我认为这是 varnish 的配置问题

(我正在使用 Ubuntu 10.04,因此使用 php-fpm 的选项不可用。)

这是我得到的网络状态监测

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  

答案1

Varnish 理解 HTTP,但要连接到您的 PHP 快速 CGI 守护程序,它必须了解 CGI 标准。您无法将 Varnish 连接到您的 PHP 守护程序。必须有一个可以与 Varnish 通信并连接到 PHP 的 Web 服务器。也许设置 Varnish-Nginx-Php 更有意义。

如果您正在寻找 Php 加速,请使用 Php 本身的缓存并将其与基于 RAM 的键值存储(如 Memcached 或 Redis 或其他 No-SQL 数据库)相结合。

相关内容