Перенаправление лака и Nginx 8080 -> 80 - PullRequest
0 голосов
/ 03 февраля 2012

Я пытаюсь использовать Varnish в качестве прокси-сервера для обратного кэширования для моей установки nginx на Ubuntu 10.10, я настроил Varnish на порт 8080 для тестирования и nginx работает нормально на порту 80.

Мой nginx.conf:

user {user} {group};
worker_processes  16;

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

events {
    worker_connections  1024;
    multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    client_max_body_size 4M;
    client_body_buffer_size 128k;
    access_log  /var/log/nginx/access.log;

    gzip        on;
    gzip_proxied any;
    gzip_comp_level 2;
    gzip_disable "MSIE [1-6].(?!.*SV1)";
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml$

    sendfile        on;
    tcp_nopush     off;

    keepalive_timeout  30;
    tcp_nodelay        on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

.conf файл моего сайта:

server {
     listen  80;
     server_name www.mylesgray.com dev.mylesgray.com;

     access_log /var/www/mylesgray.com/logs/access.log;
     error_log /var/www/mylesgray.com/logs/error.log;

     location / {
        root /var/www/mylesgray.com/public;
        index index index.php;
        try_files $uri/ $uri index.php?q=$uri&$args;
        port_in_redirect off;
     }

     location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
        access_log        off;
        expires           30d;
        root /var/www/mylesgray.com/public;
     }

     location ~ .php$ {
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_pass   backend;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/mylesgray.com/public/$fastcgi_script_name;
        include fastcgi_params;
        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_intercept_errors        on;
        fastcgi_ignore_client_abort     off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

    location ~ /.ht {
        deny  all;
    }

    location ~ /.git {
        deny  all;
    }

#    include /var/www/mylesgray.com/public/nginx.conf;
}

upstream backend {
    server 127.0.0.1:9000;
}

Мой лак conf:

backend default {
     .host = "localhost";
     .port = "80";
}

acl purge {
        "localhost";
}

sub vcl_recv {
        if (req.request == "PURGE") {
                if (!client.ip ~ purge) {
                        error 405 "Not allowed.";
                }
                return(lookup);
        }

        if (req.url ~ "^/$") {
               unset req.http.cookie;
         }
}

sub vcl_hit {
        if (req.request == "PURGE") {
                set obj.ttl = 0s;
                error 200 "Purged.";
        }
}

sub vcl_miss {
        if (req.request == "PURGE") {
                error 404 "Not in cache.";
        }

        if (!(req.url ~ "wp-(login|admin)")) {
                        unset req.http.cookie;
        }

        if (req.url ~ "^/[^?]+.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?$
                unset req.http.cookie;
                set req.url = regsub(req.url, "\?.$", "");
        }

        if (req.url ~ "^/$") {
                unset req.http.cookie;
        }
}

sub vcl_fetch {
        if (req.url ~ "^/$") {
                unset beresp.http.set-cookie;
        }

        if (!(req.url ~ "wp-(login|admin)")) {
                unset beresp.http.set-cookie;
        }
}

Так что со всем этим, когда вы идете на мой сайт через порт8080: http://www.mylesgray.com:8080 он просто перенаправляет на старый: http://www.mylesgray.com Вместо этого он должен сделать следующее: если я получу доступ к порту 80, я получу только файлы обслуживания nginx, и если яaccess 8080 У меня должны быть nginx + файлы для подачи лака.

Я делаю это, чтобы проверить преимущества лака по сравнению с обычным nginx.

Любая помощь очень ценится!

Ответы [ 3 ]

2 голосов
/ 03 февраля 2012

Моим лучшим предположением был бы какой-то плагин SEO, который думает: «о запросе на порт 8080? Этого не должно быть, я буду добр и перепишу на порт 80»:Возможно, вы захотите нормализовать заголовки вашего хоста, убрав номера портов:

set req.http.Host = regsub(req.http.Host, ":[0-9]+", "");

При необходимости посмотрите еще несколько примеров на этих примерах конфигурации для Varnish

1 голос
/ 19 июня 2013

Хорошая хитрость состоит в том, чтобы оба сервера (nginx и varnish) были на одном и том же порту, но с разными IP, скажем

nginx: localhost: 80 лак: 1.2.3.4:80

проверить это: http://danielmiessler.com/blog/handling-redirects-with-varnish-and-nginx

0 голосов
/ 25 февраля 2013

Вам нужно будет зайти в общие настройки своего WP и изменить yourdoma.in на yourdoma.in:8080.Я столкнулся с той же проблемой.

В противном случае WordPress будет только когда-либо прослушивать порт 80.

Вот объяснение от davide73 на форуме wp :

В WordPress есть ошибка;Вы не можете использовать его для TCP-порта не 80.

Это потому, что они используют $ _SERVER ['HTTP_HOST'] вместо $ _SERVER ['HTTP_HOST']. ":". $ _ SERVER ['HTTP_PORT']

...