Обратный прокси-сервер Nginx 405 PUT Chrome - PullRequest
0 голосов
/ 19 декабря 2018

Я получаю ответ 405, когда пытаюсь сделать запрос на свой сервер Tomcat через обратный прокси-сервер Nginx.

Если я обращаюсь напрямую к серверу tomcat, он успешно работает с Chrome или Firefox.Но если я запрашиваю Nginx Proxy, я получаю 405 от Chrome, но работает от Firefox.

Я тестировал с другой конфигурацией в моем nginx.conf в каталоге location / foo / {...}

Я пробовал:

error_page 405 =200 $uri;

Также

 add_header "Allow" "GET, POST, HEAD, PUT, DELETE" always;
    add_header "Access-Control-Allow-Methods" "GET, POST, PUT, DELETE, OPTIONS" always;`

location / {
    dav_methods PUT DELETE;
    proxy_pass http://csprocure;
}

Мой nginx.conf для перенаправлений выглядит следующим образом:

upstream serverS {
   server xxx.xxx.xxx.xxx:yyyy;
}

server {

    listen 80;
    server_name $hostname;
    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;
    error_log   /dev/stdout info;
    access_log  /dev/stdout;

    location /foo/ {
        proxy_pass         http://serverS;
        proxy_redirect     http://xxx.xxx.xxx.xxx/ http://xxx.xxx.xxx.xxx:yyyy/;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto: https;
    }

Что я могудобавить в мою конфигурацию, чтобы избежать 405 в Chrome?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Я сравнивал запрос между Firefox и Chrome, и есть разница в стороне Chrome, в запрос Chrome добавьте параметр «Origin» в запрос заголовка, который делает ошибку.

Итак, вmy nginx.conf Я добавил параметр, чтобы избежать его в местоположении /

proxy_set_header Origin "";

Итак, мой блок конфигурации местоположения теперь:

location /foo/ {
    proxy_set_header Origin "";
    proxy_pass         http://serverS;
    proxy_redirect     http://xxx.xxx.xxx.xxx/ http://xxx.xxx.xxx.xxx:yyyy/;
    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name;
    proxy_set_header   X-Forwarded-Proto: https;
}
0 голосов
/ 20 декабря 2018

Хорошее объяснение онлайн-методов для белых списков HTTP можно найти здесь здесь

Это работает для меня:

add_header Allow "GET, POST, HEAD, PUT, DELETE" always;

if ( $request_method !~ ^(GET|POST|HEAD|PUT|DELETE)$ ) {
   return 405;
}

.. и, очевидно, убедитесь, что вы провериликонфиг nginx -t и перезагрузите конфиг nginx -s reload перед тестированием изменений

...