슬래시가있는 쿼리는 왜 작동하지만 Nginx 구성에서 슬래시가 404를 얻지 않습니까?


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

사실, 나는 EOD에서 이것을 만들었고 똑바로 생각하지 않았습니다. 감사합니다
Josh Beauregard

1
당신은 변화 시도 할 수 있습니다 location /search/location /search. 그렇지 않으면 정규식으로 슬래시를 추가하는 방법에 대한 이 StackOverflow 질문 을 살펴볼 수 있습니다 .
Anaksunaman

답변:


0

다른 환경에서도 비슷한 경험을했기 때문에 직접 테스트하여 확인해야 할 수도 있습니다. 예를 들어 Apache에서 CORS(원점 간 자원 공유) 를 허용하도록 구성 하면 후행 슬래시가있는 경우에만 작동하는 것으로 나타납니다. 내가 이것을 설명 할 수있는 유일한 설명은 서버가 디렉토리와 파일을 명시 적으로 말할 수 있어야한다는 것입니다 (결국 파일에는 확장자가없고 디렉토리처럼 보일 수 있으므로 디렉토리 이름이있을 수 있습니다) CORS서버에서 실행되는 거의 모든 쿼리 를 허용하거나 허용하지 않기 위해 점과 파일처럼 보입니다 . 테스트를 수행하고 귀하의 경우에 해당되는지 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.