NGINX SSL перенаправляет слишком часто

Я борюсь с NGINX и настраиваю свои v-хосты. Я пытаюсь настроить vhost, который перенаправляет HTTP-запросы в HTTPS, а затем в мое приложение (когда оно равно 443)

Моя ОС - Ubuntu 16.04, и я использую NGINX 1.10.3.

Nginx.conf выглядит так (в основном это по умолчанию):

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    server_tokens off;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    gzip on;
    gzip_disable "msie6";
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Мои ServerBlocks / VHosts выглядят так:

server {
    listen              443 ssl;
    server_name         xxx.com;
    # Prevent MITM
    add_header          Strict-Transport-Security "max-age=31536000";
    ssl_certificate     "/etc/nginx/ssl/xxx.com.pem";
    ssl_certificate_key "/etc/nginx/ssl/xxx.com.key";
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    location / {
        proxy_pass      http://localhost:2237;
    }
}
server {
    listen              80;
    server_name         xxx.com;
    return 301          https://$server_name$request_uri;
}

Теперь проблема в том, что если я использую HTTP или HTTPS, он пытается перенаправить меня на HTTPS, поэтому я застрял в бесконечной петле перенаправлений.

Я абсолютно не знаю, где моя ошибка.

Каждый VHost находится в одном файле. Приложение на порту 2237 является узлом JS Express Server. Я также использую Cloudflare (я получил свой сертификат SSL от них)

Редактировать:

Выход из curl -I является:

$ curl -I https://example.com
HTTP/1.1 301 Moved Permanently
Date: Fri, 06 Oct 2017 19:42:19 GMT
Content-Type: text/html
Connection: keep-alive
Set-Cookie: __cfduid=d827df762e20a4e321b92b34bd15546621507318939; expires=Sat, 06-Oct-18 19:42:19 GMT; path=/; domain=.example.com; HttpOnly
Location: https://example.com/
Server: cloudflare-nginx
CF-RAY: 3a9b1a6a4e4564d5-FRA

1 ответ

Решение

Вам нужно использовать ниже конфиг

server {
listen              80;
server_name         example.com;
add_header          Strict-Transport-Security "max-age=31536000";
  location / {
    proxy_pass      http://localhost:2237;
    proxy_redirect  http://localhost:2237/ https://$host/;
  }
}

Вы используете cloudflare SSL и отключаете SSL на cloudflare. Так что вы должны просто прослушивать порт 80. Ваша предыдущая конфигурация перенаправляла порт 80 обратно на HTTPS и отправляла запрос в Cloudflare, который затем отправлял на ваш порт nginx 80 и, следовательно, создавал бесконечный цикл.

Другие вопросы по тегам