Перенаправление Nginx работает в браузере, но при использовании curl выводится только 301 перемещенный навсегда

#nginx #nginx-config

#nginx #nginx-конфигурация #nginx-config

Вопрос:

У меня есть файл default.conf, который показывает:

 server {
    listen       80;
    server_name  localhost;
    rewrite ^/(.*)$ https://objectstorage.ca-city.oraclecloud.com/n/randomhash/b/bucketname/o/$1 permanent;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
  

Когда я нажимаю на свой браузер с http://ip_address/file.txt , это перенаправит меня наhttps://objectstorage.ca-city.oraclecloud.com/n/randomhash/b/bucketname/o/file.txt и загрузите файл

Когда я пытаюсь использовать curl: curl -X ПОЛУЧАЕТ http://ip_address/testfile.txt я получаю это:

 <head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>
  

Заранее спасибо

Ответ №1:

cURL по умолчанию не выполняет перенаправления. Вам понадобится -L флаг:

 $ curl -L -X GET http://ip_address/testfile.txt
  

Смотрите man раздел на странице, касающийся флага

    -L, --location
          (HTTP) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make
          curl  redo  the request on the new place. If used together with -i, --include or -I, --head, headers from all requested pages will be shown. When authentication is used,
          curl only sends its credentials to the initial host. If a redirect takes curl to a different host, it won't be able to intercept the user password. See also  --location-
          trusted on how to change this. You can limit the amount of redirects to follow by using the --max-redirs option.

          When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP response was 301, 302,
          or 303. If the response code was any other 3xx code, curl will re-send the following request using the same unmodified method.

          You can tell curl to not change the non-GET request method to GET after a 30x response by using the dedicated options for that: --post301, --post302 and --post303.
  

Ответ №2:

301 было бы тем, что я ожидал бы здесь.

Заставьте curl следовать перенаправлениям с -L флагом (и, возможно, добавить –max-redirs для безопасности)

Таким образом, ваша команда curl будет выглядеть следующим образом:

 curl -L –max-redirs 10 -X GET http://ip_address/testfile.txt