系统相关
首页 > 系统相关> > java – 使用Nginx时缺少HTTP状态代码名称

java – 使用Nginx时缺少HTTP状态代码名称

作者:互联网

我正在使用Nginx

redirect all HTTP requests to HTTPS

在我的春季启动应用程序.这是我正在使用的nginx配置,我能够将所有请求重定向到Https,但当我这样做时,我得到正确的状态代码返回,但它不再具有状态代码名称.如果我删除nginx并单独运行spring boot应用程序,我可以使用其代码名称和代码获取http状态.

server {

  listen 80 default_server;
  listen [::]:80 default_server;
  server_name _ ;

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

  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


  if ( $http_x_forwarded_proto != 'https' ) {
    return 307 https://$host$request_uri;
  }

  location / {
    proxy_set_header X-Forwarded-Proto http;
    proxy_pass http://localhost:7070;
      expires -1;
  }

}

我在这里做错了应该使用proxy_redirect而不是proxy_pass,或者我在这里缺少任何东西.如果你能提供帮助,那就太好了.

解决方法:

>你所拥有的nginx.conf代码有点混乱和不完整,因为你实际上并没有显示任何代码来实现https的实际服务,因此,目前还不清楚整个设置是如何工作的.
> proxy_redirect通常应保留默认值default,除非您明确知道要将其更改为什么;请参阅http://nginx.org/r/proxy_redirect的文档.
>条件重定向,例如if($http_x_forwarded_proto!=’https’){return 307 https:// $host $request_uri;},通常只需要在你的后端;目前还不清楚为什么你的nginx会有这个,除非你面前有另一个nginx,这将是多余的,可能是不必要的.
>最后,您主要担心的是,HTTP状态代码可能会返回而没有状态“名称”.首先,status code “names”, like Moved Temporarily after 302, or Created after 201对于任何事情都不是必不可少的,因此,即使在不太可能发生的情况下,它们也会丢失 – 它们不清楚为什么它们首先会缺少nginx,而且您没有提供更多详细信息启用故障排除 – 它不应该真正影响任何其他功能(但是,再次,没有证据证明它是导致它们丢失的nginx,事实上,nginx确实在ngx_http_status_lines array of strings within src/http/ngx_http_header_filter_module.c中定义了“201 Created”).

但是,最近在邮件列表中出现了有关HTTP状态代码的相关问题 – “Re: prevent nginx from translate 303 responses (see other) to 302 (temporary redirect)” – 并且有人指出将nginx放在后端之前可能会默认导致HTTP / 1.1方案更改为HTTP / 1.0,按照http://nginx.org/r/proxy_http_version,这可能会导致您的非nginx后端对HTTP to comply with the 1.0 spec进行不同的处理;解决方案是将proxy_http_version 1.1添加到nginx.

标签:java,nginx,spring-boot,load-balancing,reverse-proxy
来源: https://codeday.me/bug/20190823/1697879.html