nginx возвращает 401 для запроса POST. Возвращение 204 решает проблему, и я не знаю почему - PullRequest
0 голосов
/ 31 марта 2020

У меня проблема, когда клиенты, вызывающие API, получают 401. Я не знаю почему. Вот как выглядит конфигурация:

  1 server {
  2         listen 44.111.222.333:443 ssl;
  3
  4         root /var/www/widgetapp/public;
  5         server_name widgetapp;
  6
  7         ssl_certificate /etc/ssl/s/bundle.crt;
  8         ssl_certificate_key     /etc/ssl/s/s.key;
  9         ssl_protocols   TLSv1.2;
 10
 11         error_log /var/log/nginx/widget_error.log warn;
 12
 13         index login.php;
 14
 15         location /?(.*) {
 16                 allow all;
 17                 try_files $uri $uri/$is_args /=404;
 18         }
 19
 20         location ~ \.php$ {
 21                 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 22                 fastcgi_pass unix:/var/run/php5-fpm.sock;
 23                 include fastcgi_params;
 24                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 25                 fastcgi_param SCRIPT_NAME $fastcgi_script_name;
 26         }
 27
 28         location /wdiget_api.php/ {
 29                 rewrite ^(.*)$ /_widgetapi$1 last;
 30         }
 31
 32         location /_widgetapi{
 33                 #return 204 'location 3';
 34                 rewrite ^/_widgetapi/(.*)$ /$1 break;
 35                 fastcgi_split_path_info ^(.+?\.php)(/.*)$;
 36                 include fastcgi_params;
 37                 fastcgi_pass unix:/var/run/php5-fpm.sock;
 38                 fastcgi_index widgetapi.php;
 39         }
 40
 41 }
 42

клиенты "вызывают" этот API, выполняя что-то вроде этого:

POST https://widgetapp/widget_api.php/auth/12345/test1/test1;

Это немедленно возвращает 401. Когда я добавляю «return 204», тогда все начинает работать. В качестве альтернативы ... если я изменю код клиента, чтобы сделать GET вместо POST ... и я удаляю возврат 204, также работает. Но я не могу объяснить почему.

Я знаю, когда вы делаете POST, технически вы должны отправлять данные не по URL, а по телу. В этом случае URL содержит нужные нам данные. Кроме того, я знаю, что вы не должны отправлять данные обратно, но в этом случае оригинальный программист отправляет данные обратно, если процедура POST прошла успешно.

Мне бы хотелось помочь понять, что генерирует 401 ... и почему 204 имеет значение.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...