授权标头不只在GET请求(nginx)上到达API

时间:2018-11-09 11:22:05

标签: laravel nginx

我有一个基于laravel构建的应用程序,并且在本地均可正常运行,但在服务器中无法正常运行。

该应用托管在nginx上,PUT,POST,DELETE请求能够将Authorization标头发送到API(除了GET请求之外)。

这很奇怪,因为我知道在apache上您需要允许Authorization标头,而在nginx上则不需要。

我在呼叫路由Route::get('reports/{amount}','ReportsController@show');时也进行了调试 授权标头未到达API,但在请求标头中存在

当我将路由方法更改为POST时: Route::post('reports/{amount}','ReportsController@show');授权标头到达API。

这是服务器的nginx配置:

server {
listen 80;
listen [::]:80;

client_max_body_size 10M;

#add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

add_header X-Frame-Options SAMEORIGIN;
add_header X-Frame-Options 'allow-from https://www.someweb.com';
    add_header X-Frame-Options 'allow-from https://www.someweb.com';
add_header X-Content-Type-Options nosniff;
    add_header 'Referrer-Policy' 'strict-origin';
    add_header X-XSS-Protection "1; mode=block";

root /var/www/html;

index index.html index.htm index.nginx-debian.html, index.php;

error_page 404 /404.html;

include snippets/fastcgi-php.conf;

location /security {
    alias /var/www/html/security/public;
    try_files $uri $uri/ @security;

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        }
}

location @security {
        rewrite /security/(.*)$ /security/index.php?/$1 last;
    }
}

我对nginx不太熟悉,但是没有看到对标头或GET请求的任何排除。有人遇到过这个问题吗?

无论如何,有没有找出问题所在?由于我的浏览器具有标头,而API无法获取标头,因此我认为这是服务器的错误,但我不知道如何解决。

2 个答案:

答案 0 :(得分:2)

几乎可以肯定,您必须将其添加到可以在您的nginx配置中接收的允许标头的列表中。

add_header Access-Control-Allow-Headers "Authorization";

我和您几乎在同一条船上,所以我可能会遇到相同的问题,但是就我所知,在我的开发人员中,allowHeaders设置为通配符。

您可能还必须列出add_header Access-Control-Allow-Methods "GET POST DELETE OPTIONS";或使用*?

答案 1 :(得分:0)

怎么样?

 if ($http_origin ~* "(|^https?://www\.domain1\.com$|^https?://www\.domain2\.com$|^https?://www\.domain13\.com$)") {
            add_header Access-Control-Allow-Origin $http_origin;
            add_header Access-Control-Allow-Headers "Authorization";
            add_header Access-Control-Allow-Methods "GET POST DELETE OPTIONS";
    }