@vekozlov

Редирект с nginx + upstream. Как?

Товарищи, подскажите как настроить nginx.

Задача:
1. сделать редирект с www на без-www
Кусок кода нашел вроде (он работает на другом сервере), но на продакшене - не работает. Куда его ткнуть?

server {
server_name www.DOMAINDOMAIN.ru;
return 301 https://DOMAINDOMAIN.ru$request_uri;
}

2. Выполнить 301 редирект с https://questplanet.ru//// на https://questplanet.ru
То есть сделать редирект при любом количестве слешей ( многослешевостью).

3. Также стоит поправить момент со слешем он должен быть у всех внутренних страниц, а у главной его быть не должно.

Пример:
https://DOMAINDOMAIN.ru
https://www.DOMAINDOMAIN.ru/vip/

upstream app_server {
  server unix:/home/deployer/projects/DOMAINDOMAIN/shared/unicorn/DOMAINDOMAIN.sock  fail_timeout=0;
}

server {
  root /home/deployer/projects/DOMAINDOMAIN/current/public;
  #server_name 92.53.120.72;

  server_name DOMAINDOMAIN.ru; # removed ww version
  keepalive_timeout 5;
  client_max_body_size 50m;

  index index.htm index.html;

  location / {
    try_files $uri/index.html $uri.html $uri @app;
  }

  location ~* ^.+\.(jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ {
    try_files $uri @app;
    expires 1y;
    log_not_found off;
  }

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }

  location ~* .(woff2|woff|otf|css|js)$ {
    expires 30d;
  }

  error_page 500 502 503 504 /500.html;

  location = /500.html {
    root /home/deployer/projects/DOMAINDOMAIN/current/public;
  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/DOMAINDOMAIN.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/DOMAINDOMAIN.ru/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}


server {
  if ($host = www.DOMAINDOMAIN.ru) {
    return 301 https://$host$request_uri;
  } # managed by Certbot

  if ($host = DOMAINDOMAIN.ru) {
    return 301 https://$host$request_uri;
  } # managed by Certbot

  if ($request_uri ~ "^\/(.*)[^\/]$") {
    return 301 $1/;
  }

  listen 80 default deferred;
  server_name DOMAINDOMAIN.ru;# www.DOMAINDOMAIN.ru;
  return 404; # managed by Certbot
}
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 1
@MadridianFox
Web-программист, многостаночник
У вас основная секция server слушает 443, а новые правила редиректов вы вставили в server, который слушает 80 и предназначен для редиректов http -> https
Кроме того, в www редиректе вы не меняете хост, т.е. даже если он отработает, то он вызовет бесконечный редирект.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы