Чому запити з косою косою рисою працюють, але жодна косою косою рисою не стає 404 у моїй конфігурації Nginx?


2

Проти конфігурації nginx нижче:

upstream search {
          least_conn;
          server www.google.com:80
              max_fails=1
              fail_timeout=10
              weight=1;
            keepalive 12;
        }
    limit_req_zone $binary_remote_addr zone=search:1m rate=10r/s;

resolver 127.0.0.1;

server {
  listen 80 default_server;
  charset utf-8;
  server_name _;

  access_log /dev/stdout json;

    location @search {
      # Deny requests that do not match allowed methods REGEX
      if ($request_method !~ ^GET$ ) {
        return 405;
      }
      set $proxy_uri $uri;
      if ($proxy_uri ~ ^/[^/]+(/.*)$ ) {
        set $proxy_uri "$1";
      }
      # Deny requests that do not match allowed paths REGEX
      if ($proxy_uri !~ ^.*(\?|$) ) {
        return 403;
      }

      # Rate Limit Requests
      limit_req zone=search burst=10 nodelay;

      # Adding new client_max_body_size service attribute per location
      client_max_body_size 1m;
      proxy_http_version 1.1;
      # Set CORS Headers
      add_header 'Access-Control-Allow-Origin' '*';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
      proxy_set_header Origin "";
      proxy_set_header Connection "";
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_pass http://search$proxy_uri$is_args$args;
      }

    location /search/ {
      client_max_body_size 1m;
      # send request to the named location for the service
      error_page 418 = @search; return 418;
    }
  # Default location for unmatched requests
  location / {
      return 404;
    }

  location = /health {
    return 200;
  }
}

Біг

curl -siL  -H 'Host: www.google.com' '127.0.0.1/search/' 

повертає 200

але

curl -siL  -H 'Host: www.google.com' '127.0.0.1/search' 

Повертає 404.

Як зробити з поверненою косою рисою 200 та з нею?


1
Заголовок суперечливий, "без косої риски" та "без кінцевої косої риси" звучать однаково. Ви маєте на увазі "з косою косою", а "без кінцевої косою рисою" ні?
Xen2050

Щоправда, я зробив це в ЕОД і не думав прямо. Спасибі
Джош Борегард

1
Ви можете спробувати перейти location /search/на location /search. В іншому випадку, можливо, ви захочете переглянути це питання StackOverflow щодо додавання кінцевої косої риски з регулярним виразом.
Анаксунаман

Відповіді:


0

У мене був подібний досвід, хоча і в іншому середовищі, тож вам може знадобитися перевірити його сам, щоб перевірити. Наприклад, на Apache, якщо ви налаштуєте дозвіл CORS(перехресне спільне використання ресурсів), він, здається, працює лише тоді, коли є косою косою рисою. Єдине пояснення, до якого я могла придумати це, було те, що сервер повинен мати можливість чітко вказати між каталогами та файлами (зрештою, файл може не мати розширення і в кінцевому підсумку виглядати як каталог, і так може мати ім'я каталогу крапка і в кінці виглядає як файл), щоб дозволити або заборонити CORS, і, отже, майже кожен запит, який ви виконуєте на своєму сервері. Зробіть тестування та перевірте, чи це правда у вашому випадку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.