Puncte:1

Nginx redirecționează prea multe când încearcă să redirecționeze non www către www

drapel cn

Am această configurație nginx

în amonte puma_example.it {
  server unix:/home/deploy/apps/example.it/shared/tmp/sockets/example.it-puma.sock fail_timeout=0;
}
Server {
  asculta 80;
  asculta [::]:80;
  server_name example.it www.example.it;
  returnează 301 https://www.example.it$request_uri;
}

Server {
nume_server blog.example.com;
returnează 301 http://www.example.com/blog$request_uri;
}


Server {
  asculta 443 ssl http2;
  asculta [::]:443 ssl http2;
  ssl_certificate /etc/letsencrypt/live/example.it/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.it/privkey.pem;
  server_name www.example.it example.it;
  root /home/deploy/apps/example.it/current/public;
  try_files $uri/index.html $uri @puma_example.it;
  returnează 301 https://www.example.com$request_uri; 

  client_max_body_size 4G;
  keepalive_timeout 10;

  pagina_eroare 500 502 504 /500.html;
  pagina_eroare 503 @503;

  locație @puma_example.it {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Gazdă $gazdă;
    proxy_redirect dezactivat;
    proxy_set_header Actualizare $http_upgrade;
    proxy_set_header Conexiune „Actualizare”;
    ssi on;
    proxy_set_header X-Forwarded-Proto https;
    proxy_pass http://puma_example.it;
    # limit_req zone=one;
    access_log /home/deploy/apps/example.it/shared/log/nginx.access.log;
    error_log /home/deploy/apps/example.it/shared/log/nginx.error.log;
  }

  locație ^~ /imagini/ {
    expira max;
    add_header Cache-Control public;
  }

  locație ~ ^/(active|pachete)/ {
    gzip_static activat;
    brotli_static on;
    expira max;
    add_header Cache-Control public;
  }

  locație = /50x.html {
    rădăcină html;
  }

  locație @503 {
    error_page 405 = /system/maintenance.html;
    dacă (-f $document_root/system/maintenance.html) {
      rescrie ^(.*)$ /system/maintenance.html pauză;
    }
    rescrie ^(.*)$ /503.html pauză;
  }

  if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
    întoarce 405;
  }

  dacă (-f $document_root/system/maintenance.html) {
    întoarce 503;
  }
}

Încerc să redirecționez non www către www și să redirecționez blogul de domeniu terță parte către o anumită adresă URL, dar cred că adăugând

returnează 301 https://www.example.com$request_uri;

în acea poziție provoacă o buclă de redirecționare. Unde trebuie sa-l asez? Ce este greșit în această configurație?

Încerc și să separ blocurile

în amonte puma_example.it {
  server unix:/home/deploy/apps/example.it/shared/tmp/sockets/example.it-puma.sock fail_timeout=0;
}

Server {
  asculta 80;
  asculta [::]:80;
  server_name example.it www.example.it;
  returnează 301 https://www.example.it$request_uri;
}

Server {
  asculta 443 ssl http2;
  asculta [::]:443 ssl http2;
  ssl_certificate /etc/letsencrypt/live/example.it/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.it/privkey.pem;
  server_name example.it;
  returnează 301 https://www.example.it$request_uri;
}

Server {
  asculta 443 ssl http2;
  asculta [::]:443 ssl http2;
  ssl_certificate /etc/letsencrypt/live/example.it/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.it/privkey.pem;
  nume_server hinnovation.example.it;
  return 301 https://www.example.it/speciale/innovation$request_uri;
}


Server {
  asculta 443 ssl http2;
  asculta [::]:443 ssl http2;
  ssl_certificate /etc/letsencrypt/live/example.it/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.it/privkey.pem;
  nume_server www.example.it;
  root /home/deploy/apps/example.it/current/public;
  try_files $uri/index.html $uri @puma_example.it;

  client_max_body_size 4G;
  keepalive_timeout 10;

  pagina_eroare 500 502 504 /500.html;
  pagina_eroare 503 @503;

  locație @puma_example.it {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Gazdă $gazdă;
    proxy_redirect dezactivat;
    proxy_set_header Actualizare $http_upgrade;
    proxy_set_header Conexiune „Actualizare”;
    ssi on;
    proxy_set_header X-Forwarded-Proto https;
    proxy_pass http://puma_example.it;
    # limit_req zone=one;
    access_log /home/deploy/apps/example.it/shared/log/nginx.access.log;
    error_log /home/deploy/apps/example.it/shared/log/nginx.error.log;
  }

  locație ^~ /imagini/ {
    expira max;
    add_header Cache-Control public;
  }

  locație ~ ^/(active|pachete)/ {
    gzip_static activat;
    brotli_static on;
    expira max;
    add_header Cache-Control public;
  }

  locație = /50x.html {
    rădăcină html;
  }

  locație @503 {
    error_page 405 = /system/maintenance.html;
    dacă (-f $document_root/system/maintenance.html) {
      rescrie ^(.*)$ /system/maintenance.html pauză;
    }
    rescrie ^(.*)$ /503.html pauză;
  }

  if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
    întoarce 405;
  }

  dacă (-f $document_root/system/maintenance.html) {
    întoarce 503;
  }
}
Puncte:1
drapel us

Trebuie să aveți separat Server blocuri pentru dvs www si non-www domenii.

Server {
    asculta 443 ssl http2;
    asculta [::]:443 ssl http2;
    certificat_ssl...
    cheie_certificat_ssl...
    server_name example.it;

    returnează 301 https://www.example.com$request_uri;
}

Server {
    asculta 443 ssl http2;
    asculta [::]:443 ssl http2;
    certificat_ssl...
    cheie_certificat_ssl...
    nume_server www.example.it;

    ... restul configurației...
}
drapel cn
Editez, dar nu merge. Redirecționarea terță parte funcționează, non www la www funcționează
drapel us
Scuze, ai scris mai sus că ambele „funcționează”. Care este atunci problema?
drapel cn
Ah, scuze. Funcția non www la www nu funcționează
drapel us
Vă rugăm să adăugați rezultatul `curl -v ` la întrebarea inițială, unde `` este adresa URL HTTP pe care o încercați. Astfel putem vedea ce se întâmplă exact.
drapel cn
site-ul este https://dday.it

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.