Nginx добавляет косую черту в URL - PullRequest
1 голос
/ 10 ноября 2019

У меня проблема в Safari и IE, когда перенаправление django не включает заголовки авторизации. Это приводит к отклонению запросов.

Эти перенаправления происходят с URL-адресом, который не заканчивается на /.

Поэтому я пытаюсь обработать добавление / в конфигурации nginxперед передачей в приложение.

Вот моя конфигурация nginx:

server {
  server_name ~^((stage|prod)-)?chalktalk-react-40.*;

  listen 28000 default_server;

  location ~ ^/static/(?P<file>.*) {
    root /chalktalk/var/chalktalk-react-40;
    add_header 'Access-Control-Allow-Origin' $cors_origin;

    # Inform downstream caches to take certain headers into account when reading/writing to cache.
    add_header 'Vary' 'Accept-Encoding,Origin';

    try_files /staticfiles/$file =404;
  }

  location ~ ^/media/(?P<file>.*) {
    root /chalktalk/var/chalktalk-react-40;
    try_files /media/$file =404;
  }

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

  }
  # API endpoints have their own authentication and authorization
  # schemes, so we bypass basic auth.
  location ~ ^/(api|admin|ws)/ {
    try_files $uri @proxy_to_app;
  }


  rewrite ^(.*)/favicon.ico$ /static/pages/homepage/logo-nonname.png last;

  location @proxy_to_app {
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
    proxy_set_header X-Forwarded-Port $http_x_forwarded_port;
    proxy_set_header X-Forwarded-For $http_x_forwarded_for;
        proxy_set_header Host $http_host;
    proxy_read_timeout 1200;
    proxy_redirect off;


    proxy_pass http://chalktalk-react-40_app_server;

      }


  # Forward to HTTPS if we're an HTTP request...
  if ($http_x_forwarded_proto = "http") {
    set $do_redirect "true";
  }

  # Run our actual redirect...
  if ($do_redirect = "true") {
    rewrite ^ https://$host$request_uri? permanent;
  }

  } 

Я знаю, что должен добавить перезапись, и это перезапись, которую я пытаюсь добавить:

server {
  ...
  listen 28000 default_server;
  rewrite ^([^.]*[^/])$ $1/ permanent;
  ...
}

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь посетить: example.com/admin, я получаю example.com:28000/admin/.

Как мне убедиться, что это приводит к этому example.com/admin/ без порта #, вставленного туда?

ОБНОВЛЕНИЕ: Я обновил конфигурацию, чтобы иметь следующее:

server {
  server_name ~^((stage|prod)-)?chalktalk-react-40.*;

  listen 28000 default_server;
  port_in_redirect off;
  rewrite ^([^.]*[^/])$ $1/ permanent;
  ...
}

Но я получаю эту ошибку в Safari: enter image description here

1 Ответ

0 голосов
/ 10 ноября 2019

Используйте либо директиву port_in_redirect, например:

port_in_redirect off;

, либо скажите Nginx, что именно вы хотите в директиве rewrite, дляпример:

rewrite ^([^.]*[^/])$ $scheme://$host$1/ permanent;
...