Nginx проблема конфигурации при переходе с http на https - PullRequest
0 голосов
/ 26 января 2020

Я создаю веб-приложение для некоммерческой организации в моем городе. Приложение состоит из серверной части с django -rest-framework, внешнего интерфейса в vuejs и обратного прокси-сервера, который обслуживает stati c файлы и носители: nginx.

, которые я хотел чтобы протестировать приложение в тестовом окружении, близком к prod env, которое я буду использовать.

У меня были некоторые трудности при переходе с http на https в моем тестовом окружении, но мне удалось это благодаря этой статье: ssl on nginx с docker

Теперь у меня есть еще одна проблема, которую я не могу объяснить: каждый раз, когда я пытаюсь достичь своего бэкэнда, кажется, что запросы занимают так много времени, что я получаю 504 Тайм-аут шлюза. Вначале я заметил, что рабочий-оружейник был убит за каждый мой запрос, но я добавил 120se c таймаут, чтобы предотвратить это.

Я думаю, что проблема в моем nginx config. Я не достаточно знаком с ним, чтобы найти правильное решение моей проблемы, поэтому я прошу вашей помощи (надеюсь, что это не будет еще 504 LOL)

Вот мой nginx .conf:

user nginx;
worker_processes 1;

events {
  worker_connections 1024;
}

http {
  include /etc/nginx/mime.types;
  client_max_body_size 100m;

  upstream backend {
    server backend:8000;
    server 3.126.53.252:8000;
  }

  access_log  /var/log/nginx/access.log;

  server {
    listen    80;
    listen    [::]:80;

    server_name   abeille-arlonaise.be;

    location / {
      # Simple requests
      if ($request_method ~* "(GET|POST)") {
        add_header "Access-Control-Allow-Origin"  *;
      }

      # Preflighted requests
      if ($request_method = OPTIONS ) {
        add_header "Access-Control-Allow-Origin"  *;
        add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
        add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
      }

      rewrite ^ https://www.abeille-arlonaise.be$request_uri? permanent;
    }

    location ~ /.well-known/acme-challenge {
      allow all;
      root /data/letsencrypt;
    }
  }

  server {
    listen    80;
    listen    [::]:80;

    server_name   www.abeille-arlonaise.be;

    location / {
      # Simple requests
      if ($request_method ~* "(GET|POST)") {
        add_header "Access-Control-Allow-Origin"  *;
      }

      # Preflighted requests
      if ($request_method = OPTIONS ) {
        add_header "Access-Control-Allow-Origin"  *;
        add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
        add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
      }

      rewrite ^ https://www.abeille-arlonaise.be$request_uri? permanent;
    }

    location ~ /.well-known/acme-challenge {
      allow all;
      root /data/letsencrypt;
    }
  }



  server {
    listen        443 ssl http2;
    listen        [::]:443 ssl http2;
    server_name   abeille-arlonaise.be;
    charset       utf-8;

    server_tokens off;

    ssl_certificate /etc/letsencrypt/live/abeille-arlonaise.be/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/abeille-arlonaise.be/privkey.pem;

    ssl_buffer_size 8k;

    ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;

    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_prefer_server_ciphers on;

    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

    ssl_ecdh_curve secp384r1;
    ssl_session_tickets off;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;

    location / {
      add_header Access-Control-Allow-Origin *;
    }

    return 301 https://www.abeille-arlonaise.be$request_uri;
  }

  server {
    server_name   www.abeille-arlonaise.be;
    listen        443 ssl http2;
    listen        [::]:443 ssl http2;
    charset       utf-8;

    server_tokens off;

    ssl_buffer_size 8k;
    ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;

    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

    ssl_ecdh_curve secp384r1;
    ssl_session_tickets off;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4;

    ssl_certificate /etc/letsencrypt/live/abeille-arlonaise.be/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/abeille-arlonaise.be/privkey.pem;

    root /dist/;
    index index.html;

    # frontend
    location / {

      # Simple requests
      if ($request_method ~* "(GET|POST)") {
        add_header "Access-Control-Allow-Origin"  *;
      }

      # Preflighted requests
      if ($request_method = OPTIONS ) {
        add_header "Access-Control-Allow-Origin"  *;
        add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
        add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
      }

      try_files $uri $uri/ @rewrites;
    }

    location @rewrites {
      rewrite ^(.+)$ /index.html last;
    }

    # backend urls
    location ~ ^/(admin|api|auth) {

      # Simple requests
      if ($request_method ~* "(GET|POST)") {
        add_header "Access-Control-Allow-Origin"  *;
      }

      # Preflighted requests
      if ($request_method = OPTIONS ) {
        add_header "Access-Control-Allow-Origin"  *;
        add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
        add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
      }

      proxy_redirect off;
      proxy_pass https://backend;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
    }

    # static files
    location /static {

      # Simple requests
      if ($request_method ~* "(GET|POST)") {
        add_header "Access-Control-Allow-Origin"  *;
      }

      # Preflighted requests
      if ($request_method = OPTIONS ) {
        add_header "Access-Control-Allow-Origin"  *;
        add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
        add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
      }

      autoindex on;
      alias /usr/src/app/static;
    }

    # media files
    location /media {     

      # Simple requests
      if ($request_method ~* "(GET|POST)") {
        add_header "Access-Control-Allow-Origin"  *;
      }

      # Preflighted requests
      if ($request_method = OPTIONS ) {
        add_header "Access-Control-Allow-Origin"  *;
        add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
        add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
      }

      autoindex on;
      alias /usr/src/app/media;
    }
  }
}

Я, вероятно, сделал не одну вещь неправильно, но она отлично работала, когда я был в http. Мне также кажется, что мои звонки на сервер выполняются через http, а не через https, но я не знаю, как и как это исправить ...

Файлы stati c работают отлично, я могу связаться с сайт, который перенаправляет меня в https, есть только те внутренние вызовы, которые не работают.

Вот вывод curl, когда я пытаюсь добраться до внутреннего интерфейса: curl

Что выводится в логах докеров: enter image description here

Я продолжу редактировать позже, я должен go.

...