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

Перенаправление цикла nginx на реализацию ssl varnish

Я пытаюсь применить лак на моем веб-сайте с поддержкой SSL. Но я получаю перенаправление цикла. Вот как я иду

лак слушает 80 порт;

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

и бэкэнд

backend default {
.host = "127.0.0.1";
.port = "8080";
.connect_timeout = 16s;
.first_byte_timeout = 96s;
.between_bytes_timeout = 8s;

}

nginx работает на 8080. конфигурация nginx

upstream backend {   
  ip_hash;
  server 127.0.0.1:80; # IP goes here.
}

server {   
    listen        443 ssl;
    server_name   example.com www.example.com;
    root       /var/www/test/public;
    index           index.php;


    ssl_certificate      /var/www/ascacacaa1341.crt;
    ssl_certificate_key  /var/www/www.example.com.key;

    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  10m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        try_files   $uri $uri/ /index.php?$query_string;
        proxy_pass http://backend;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;          
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_set_header X-Secure on;
 }
 location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include        fastcgi_params;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/test/public$fastcgi_script_name;
        }
     location /var/www/test/public {
         autoindex on;
         autoindex_exact_size off;
        }  
    # We don't need .ht files with nginx.
        location ~ /\.htaccess {
            deny all;
        }

        # Set header expirations on per-project basis
         location ~* \.(?:ico|css|js|jpe?g|JPG|png|svg|woff)$ {
            expires 365d;
        }
}

server {

    listen 8080;       
    server_name  example.com www.example.com;
    return https://$server_name$request_uri;


}





tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      30700/nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      30479/varnishd
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      30700/nginx
tcp        0      0 127.0.0.1:6082          0.0.0.0:*               LISTEN      30475/varnishd
tcp6       0      0 :::80                   :::*                    LISTEN      30479/varnishd

curl response curl -I -k https://www.domain.com

HTTP/1.1 302 Moved Temporarily
Server: nginx/1.6.2
Date: Mon, 03 Nov 2014 10:38:31 GMT
Content-Type: text/html
Content-Length: 160
Connection: keep-alive
Location: https://www.domain.com/
X-Varnish: 623340 361289
Age: 280
Via: 1.1 varnish-v4

Это хорошо работает для ssl. перенаправление прокси не работает. Я перенаправляюсь на порт 80, где слушает лак. Но все же я получаю перенаправление цикла. от осмотра я нахожу net :: ERR_TOO_MANY_REDIRECTS. ошибка. Любой, кто может здесь помочь. На этом же сервере у меня больше доменов и поддоменов. Но я не буду применять лак только на ssl-домене.

Проблема в том:

server_name  www.example.com example.com

...    

location / {
   rewrite ^ https://$server_name$request_uri permanent;
}

Вы отвечаете на домен www.example.com и example.com запросы на порт 8080 и перенаправление на www.example.com так как server_name всегда будет соответствовать первому server_name значение, пока вы готовы отвечать на запросы https для example.com.

Поэтому измените этот блок сервера на:

server {
    listen 8080;
    server_name example.com www.example.com;
    return https://$server_name$request_uri;
}

Кстати, перестаньте использовать rewrite / regex, когда вам это не нужно.