Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http NGINX-错误502,除非设置了用户代理标头_Http_Nginx_Cookies_Http Headers_User Agent - Fatal编程技术网

Http NGINX-错误502,除非设置了用户代理标头

Http NGINX-错误502,除非设置了用户代理标头,http,nginx,cookies,http-headers,user-agent,Http,Nginx,Cookies,Http Headers,User Agent,我对NGINX有一个非常奇怪的问题 我们正在根据URL路由到不同的服务器。这一切都很好。使用浏览器,一切都很好 奇怪的是,当我试图从一个工具(如Postman、失眠、Curl等)向API发出GET请求时,如果用户代理头没有被欺骗到浏览器,我会得到一个502坏网关错误 为什么会这样?我需要从另一个后端以编程方式调用此API,但必须设置用户代理头,否则它将失败。(将用户代理设置为“curl”在浏览器中不起作用) 这是我的NGINX配置 server { listen 443

我对NGINX有一个非常奇怪的问题

我们正在根据URL路由到不同的服务器。这一切都很好。使用浏览器,一切都很好

奇怪的是,当我试图从一个工具(如Postman、失眠、Curl等)向API发出GET请求时,如果用户代理头没有被欺骗到浏览器,我会得到一个502坏网关错误

为什么会这样?我需要从另一个后端以编程方式调用此API,但必须设置用户代理头,否则它将失败。(将用户代理设置为“curl”在浏览器中不起作用)

这是我的NGINX配置

    server {
        listen 443 ssl;
        server_name 10.10.10.10;
        ssl_certificate /https/10.10.10.10.crt;
        ssl_certificate_key /https/10.10.10.10.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!MD5;

    access_log              /var/log/nginx/10.10.10.10-access.log;
    error_log               /var/log/nginx/10.10.10.10-error.log error;

        location /abc {
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Frame-Options SAMEORIGIN;
                proxy_pass http://10.3.0.2:80;
        }

        location /def {
                proxy_set_header X-Forwarded-Proto $scheme;
                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-Frame-Options SAMEORIGIN;
                proxy_pass http://10.3.0.3:80;
        }
}
来自浏览器的请求完全可以正常工作

来自失眠症的请求,用户代理被欺骗(非常有效!)

未欺骗用户代理的失眠请求(错误502!?)

  • 注意:我在这个请求中设置cookie,因为它们被后端的服务器使用。不确定这是否与用户代理问题有关

谢谢大家!

对不起。找到了。我这边的菜鸟失误!nginx根本没有问题

如果用户不在Chrome上,Flask服务器实际上有一行代码提供“更改浏览器”消息,以避免浏览器兼容性问题。不幸的是,
browser\u splash
文件被删除了,因此在这种情况下它不能提供任何服务。没有注意到这件事发生了:

if request.user_agent.browser != 'chrome':
  return render_template('browser_splash.html')