Varnish FetchError không có kết nối phụ trợ Lỗi lỗi


11

Véc ni:

    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1340829925 1.0
   12 SessionOpen  c 79.124.74.11 3063 :80
   12 SessionClose c EOF
   12 StatSess     c 79.124.74.11 3063 0 1 0 0 0 0 0 0
    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1340829928 1.0
    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1340829931 1.0
   12 SessionOpen  c 108.62.115.226 46211 :80
   12 ReqStart     c 108.62.115.226 46211 467185881
   12 RxRequest    c GET
   12 RxURL        c /
   12 RxProtocol   c HTTP/1.0
   12 RxHeader     c User-Agent: Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)
   12 RxHeader     c Host: www.mysite.com
   12 VCL_call     c recv lookup
   12 VCL_call     c hash
   12 Hash         c /
   12 Hash         c www.mysite.com
   12 VCL_return   c hash
   12 VCL_call     c miss fetch
   12 FetchError   c no backend connection
   12 VCL_call     c error deliver
   12 VCL_call     c deliver deliver
   12 TxProtocol   c HTTP/1.1
   12 TxStatus     c 503
   12 TxResponse   c Service Unavailable
   12 TxHeader     c Server: Varnish
   12 TxHeader     c Content-Type: text/html; charset=utf-8
   12 TxHeader     c Retry-After: 5
   12 TxHeader     c Content-Length: 418
   12 TxHeader     c Accept-Ranges: bytes
   12 TxHeader     c Date: Wed, 27 Jun 2012 20:45:31 GMT
   12 TxHeader     c X-Varnish: 467185881
   12 TxHeader     c Age: 1
   12 TxHeader     c Via: 1.1 varnish
   12 TxHeader     c Connection: close
   12 Length       c 418
   12 ReqEnd       c 467185881 1340829931.192433119 1340829931.891024113 0.000051022 0.698516846 0.000074035
   12 SessionClose c error
   12 StatSess     c 108.62.115.226 46211 1 1 1 0 0 0 256 418
    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1340829934 1.0
    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1340829937 1.0

netstat -tlnp
 Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      3086/nginx      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1915/varnishd   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1279/sshd       
tcp        0      0 127.0.0.2:25            0.0.0.0:*               LISTEN      3195/sendmail: MTA:
tcp        0      0 127.0.0.2:6082          0.0.0.0:*               LISTEN      1914/varnishd   
tcp        0      0 127.0.0.2:9000          0.0.0.0:*               LISTEN      1317/php-fpm.conf)
tcp        0      0 127.0.0.2:3306          0.0.0.0:*               LISTEN      1192/mysqld     
tcp        0      0 127.0.0.2:587           0.0.0.0:*               LISTEN      3195/sendmail: MTA:
tcp        0      0 127.0.0.2:11211         0.0.0.0:*               LISTEN      3072/memcached  
tcp6       0      0 :::8080                 :::*                    LISTEN      3086/nginx      
tcp6       0      0 :::80                   :::*                    LISTEN      1915/varnishd   
tcp6       0      0 :::22                   :::*                    LISTEN      1279/sshd  

/ etc / nginx / kích hoạt trang web / mặc định

server {
    listen   8080; ## listen for ipv4; this line is default and implied
    listen   [::]:8080 default ipv6only=on; ## listen for ipv6

    root /usr/share/nginx/www;
    index index.html index.htm index.php;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to index.html
        try_files $uri $uri/ /index.html;
    }

    location /doc {
        root /usr/share;
        autoindex on;
        allow 127.0.0.2;
        deny all;
    }

    location /images {
        root /usr/share;
        autoindex off;
    }

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page 500 502 503 504 /50x.html;
    #location = /50x.html {
    #   root /usr/share/nginx/www;
    #}

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #   proxy_pass http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass 127.0.0.2:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #   deny all;
    #}
}

/etc/nginx/sites-enables/www.mysite.com.vhost

server {
       listen 8080;
       server_name www.mysite.com mysite.com.net;
       root /var/www/www.mysite.com/web;
       if ($http_host != "www.mysite.com") {
                 rewrite ^ http://www.mysite.com$request_uri permanent;
       }
       index index.php index.html;
       location = /favicon.ico {
                log_not_found off;
                access_log off;
       }
       location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
       }
       # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
       location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
       }
       location / {
                try_files $uri $uri/ /index.php?$args;
       }
       # Add trailing slash to */wp-admin requests.
       rewrite /wp-admin$ $scheme://$host$uri/ permanent;
       location ~*  \.(jpg|jpeg|png|gif|css|js|ico)$ {
                expires max;
                log_not_found off;
       }
       location ~ \.php$ {
                try_files $uri =404;
                include /etc/nginx/fastcgi_params;
                fastcgi_pass 127.0.0.2:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       }

include /var/www/www.mysite.com/web/nginx.conf;
       location ~ /nginx.conf {
                deny all;
                access_log off;
                log_not_found off;
       }

}

/etc/varnish/default.vcl

# This is a basic VCL configuration file for varnish.  See the vcl(7)
# man page for details on VCL syntax and semantics.
# 
# Default backend definition.  Set this to point to your content
# server.
# 
backend default {
    .host = "127.0.0.2";
    .port = "8080";
    # .connect_timeout = 600s;
    #.first_byte_timeout = 600s;
    # .between_bytes_timeout = 600s;
    # .max_connections = 800;

Lưu ý: bỏ qua bốn tùy chọn cuối cùng tại default.vcl không có sự khác biệt.


mèo / etc / default / véc ni

# Configuration file for varnish
#
# /etc/init.d/varnish expects the variables $DAEMON_OPTS, $NFILES and $MEMLOCK
# to be set from this shell script fragment.
#

# Should we start varnishd at boot?  Set to "yes" to enable.
START=yes

# Maximum number of open files (for ulimit -n)
NFILES=131072

# Maximum locked memory size (for ulimit -l)
# Used for locking the shared memory log in memory.  If you increase log size,
# you need to increase this number as well
MEMLOCK=82000

# Default varnish instance name is the local nodename.  Can be overridden with
# the -n switch, to have more instances on a single server.
INSTANCE=$(uname -n)

# This file contains 4 alternatives, please use only one.

## Alternative 1, Minimal configuration, no VCL
#
# Listen on port 6081, administration on localhost:6082, and forward to
# content server on localhost:8080.  Use a 1GB fixed-size cache file.
#
# DAEMON_OPTS="-a :6081 \
#              -T localhost:6082 \
#        -b localhost:8080 \
#        -u varnish -g varnish \
#            -S /etc/varnish/secret \
#        -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"


## Alternative 2, Configuration with VCL
#
# Listen on port 6081, administration on localhost:6082, and forward to
# one content server selected by the vcl file, based on the request.  Use a 1GB
# fixed-size cache file.
#
DAEMON_OPTS="-a :80 \
             -T 127.0.0.2:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"

Nếu bạn cần bất kỳ thông tin khác cho tôi biết. Tôi hoàn toàn không biết vấn đề là gì.


tiêu đề curl cho tôi điều này:

curl -v -I -H "Testing: Test header so you see this works" http://www.mysite.com:8080
* About to connect() to www.mysite.com port 8080 (#0)
*   Trying 176.31.158.78... connected
* Connected to www.mysite.com (176.31.158.78) port 8080 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
> Host: www.mysite.com:8080
> Accept: */*
> Testing: Test header so you see this works
> 
< HTTP/1.1 301 Moved Permanently
HTTP/1.1 301 Moved Permanently
< Server: nginx/1.0.5
Server: nginx/1.0.5
< Date: Thu, 28 Jun 2012 11:01:23 GMT
Date: Thu, 28 Jun 2012 11:01:23 GMT
< Content-Type: text/html
Content-Type: text/html
< Content-Length: 184
Content-Length: 184
< Connection: keep-alive
Connection: keep-alive
< Location: http://www.mysite.com/
Location: http://www.mysite.com/

< 
* Connection #0 to host www.mysite.com left intact
* Closing connection #0

2
Hãy thử cho phép bỏ phiếu phụ trợ. var Vec-cache.org/trac/wiki/BackendPolling Liệu nginx có trả lại nội dung của bạn nếu bạn nhấn trực tiếp vào cổng 8080 với curl hoặc wget không?
Pax

Lần cuối cùng tôi nhìn thấy điều này , vấn đề là SELinux. Để kiểm tra, hãy thử tắt nó đi echo 0 >/selinux/enforce. Nếu bạn xác nhận rằng đó là sự cố, bạn có thể đặt ngoại lệ audit2allow.
cyberx86

Có gì trên nginx error_log? có thể là một lỗi 503? và trong mysite.com.vhost của bạn hãy thử xóa các dòng 5, 6 và 7 và sau đó thử lại để truy cập.
Skamasle

Nó có hoạt động với malloc thay vì tập tin không? Bạn cũng có thể cần đóng} trong tệp vcl của mình.
Grizly

Tôi đã đăng câu trả lời ngay cả khi bài đăng của bạn rất cũ, vì tôi cũng có lỗi tương tự và đã tìm kiếm một lúc trước khi tôi nhận ra điều này là do chuyển hướng từ www sang www
Kojo

Câu trả lời:


1

Tôi đã có một vấn đề tương tự khi thử kiểm tra Varnish cục bộ với các phụ trợ khác nhau. Sử dụng 127.0.0.1:8080hoạt động tốt nhưng thay đổi cổng để 8081cho tôi 503, mặc dù phần phụ trợ đó hoạt động hoàn hảo cho tôi bên ngoài Varnish.

Sự cố xảy ra là do SELinux không cho phép kết nối. Tôi phát hiện ra điều đó bằng cách theo dõi nhật ký kiểm toán và kích thích 503 từ Varnish:

$ sudo tail -f /var/log/audit/audit.log type=AVC msg=audit(1539253067.438:1379): avc: denied { name_connect } for pid=10154 comm="varnishd" dest=8081 scontext=system_u:system_r:varnishd_t:s0 tcontext=system_u:object_r:transproxy_port_t:s0 tclass=tcp_socket

Để xem các cổng được cho phép bởi SELinux từ Varnish, bạn có thể sử dụng lệnh này:

$ sudo semanage port -l | grep http_cache_port_t http_cache_port_t tcp 8080, 8118, 8123, 10001-10010

Để khắc phục sự cố, bạn có thể sử dụng một cổng khác, ví dụ: 8118hoặc yêu cầu SELinux cho phép kết nối 8081từ Varnish.

Lệnh để thêm cổng là - -acờ là thêm cổng:

semanage port -a -t http_cache_port_t -p tcp 8081

Nếu bạn nhận được một thông báo cho bạn biết rằng cổng đã được xác định thì bạn cần sửa đổi thay vì thêm cổng:

ValueError: Port tcp/8081 already defined

Lệnh hoán đổi -acờ cho -m- 'sửa đổi':

semanage port -m -t http_cache_port_t -p tcp 8081


0

Bạn nên thử đăng nhập với người dùng véc ni và kiểm tra kết nối vào phụ trợ Nginx (127.0.0.2:8080) bằng curl hoặc wget để đảm bảo nó hoạt động như mong đợi.

Như cyberx86 đã nói trên các bình luận, đó có thể là vấn đề SELinux (hoặc bất kỳ mô-đun bảo mật nào khác như apparmor, grsec, v.v.) không cho phép kết nối giữa các dịch vụ và bạn cũng nên kiểm tra nhật ký kiểm toán để đảm bảo rằng nó không xảy ra trong máy chủ của bạn .

Nếu phụ trợ của bạn không hoạt động chính xác (lỗi khi thực hiện Nginx), bạn sẽ gặp loại sự cố này, hãy thử truy cập trực tiếp vào phụ trợ và kiểm tra nhật ký để đảm bảo mọi thứ đều chạy như mong đợi (Pax cũng nói với bạn về nhận xét đó) .


0

Varnish đang nhận dữ liệu trả trước và nên nghe cổng 80. Dữ liệu từ Varnish là proxy cho Nginx, nghe cổng 8080.

Cấu hình Nginx

server {
    listen 800;
    server_name www.example.com
}

Cấu hình Varnish - sudo nano / etc / default / véc ni

DAEMON_OPTS="-a :80 \               #note on port 80 here
         -T localhost:6082 \
         -f /etc/varnish/default.vcl \
         -S /etc/varnish/secret \
         -s malloc,256m"

Sau đó, đây là cấu hình proxy Varnish tới cổng 8080 (Nginx) - sudo nano /etc/varnish/default.vcl

backend default {
.host = "127.0.0.1";
.port = "8080";
}

0

Tôi đã có cùng một lỗi trong cấu hình nhiều trang web và việc chuyển hướng tên miền www sang www không thành vấn đề . Đây là cách tôi cấu hình nó (các phần có liên quan).

Trong của bạn .vcl, vàosub vcl_recv

vcl 4.0;

sub vcl_recv {
    #THIS IS THE IMPORTANT POINT
    #redirect non www to www domains ip no subdomain defined
    if (req.http.host ~ "^([-0-9a-zA-Z]+)\.([a-zA-Z]+)$") {
       return (synth (750, ""));
    }

    # Normalize the header, remove the port
    set req.http.host = regsub(req.http.host, ":[0-9]+", "");

    #OFTEN SHIPS WITH THIS OTHER ONE, COMMENT IT OTHERWISE IT WILL FAIL
    #set req.http.Host = regsub(req.http.Host, "^www\.", "");

    # For the sake of example, a couple of custom backends, 
    # note www is specified in the req.http.host
    if (req.http.host ~ "foo.example.tld") {
         set req.backend_hint = example;
    }
     elseif (req.http.host ~ "www.other.com") {
         set req.backend_hint = other;
    }

Sau đó sub vcl_synth, thêm vào:

sub vcl_synth {
    if (resp.status == 750) {
        #redirect non www to www
        set resp.status = 301;
        set resp.http.Location = "http://www." + req.http.host + req.url;
        return(deliver);
    }

Vì vậy, việc chuyển hướng đó sẽ được Varnish xử lý trước khi yêu cầu phụ trợ , tránh các vòng lặp hoặc không có kết nối phụ trợ ...

Cuối cùng, trong vhost trang web của bạn, không cần thiết phải có hai khối máy chủ nữa, bạn có thể nhận xét hoặc xóa cái không có www

#server {
#        listen 1.2.3.4:8080;
#        server_name example.tld;
#        return 301 http://www.example.tld;
#}

server {
        listen 1.2.3.4:8080;
        server_name www.example.tld;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.