使用nginx作为针对IIS的反向代理,增加了post请求404错误和499个状态码

我遇到了一些问题,因为我遇到了一些问题,将nginx作为反向代理支持到windows服务器上。 我使用的configuration工作在别处没有问题,但我看到更多的失败请求(404s)和nginx特定的错误代码499的问题。

在使用安装程序时,我们在nginx日志中看到大约200个post 404错误,而在对IIS运行时只有大约100个相同的错误。 这些文件在大多数情况下都是这样,当直接在Windows服务器上点击时,这些文件也是一样的(获取请求)。

我第一次通过是,我的设置使用通过nginx的发布请求有什么问题,但它只是一个很小的百分比,所以不要认为有什么根本上错误的nginx后安装。

499状态码,客户端closures连接似乎有点奇怪。 我可以看到约150-300 499个请求20k的请求。 这可能是这些事情发生了,我们只是没有看到他们在IIS中报告。

这是我的nginx站点configuration:

server { listen 80; server_name www.mydomain.com; access_log /var/log/nginx/www.mydomain.com/mydomain.com.log main_ext; location / { proxy_pass http://mydomain; health_check; } } upstream myupsteam { zone myupsteam 64k; sticky cookie srv_id expires=1h domain=.mydomain.com path=/; server IP; } 

真的需要开始推送通过这些服务器的stream量,因为IIS服务器正在与负载挣扎,但只需要到达错误的底部,才能签署切换。

我已经尝试将代理超时设置,代理绑定地址更改为专用网卡。

任何任何想法?

这是一个评论,但由于我没有足够的名誉在ServerFault,我不得不写这个答案。 请原谅任何不一致之处。

到目前为止,我所遇到的NGINX HTTP 499错误(友好的Client Connection ClosedFailed to load: Connection reset by peer )是由/var/lib/nginx下的错误权限引起的。

由于我使用Docker切换到了一个容器化的Web服务器环境,我们selectNGINX作为我们容器的反向代理,而不必在每个容器中映射主机端口。

在我们环境中的主proxy容器的回收过程中, /var/lib/nginx的权限被弄乱,这是NGINX用来存储/检索通过proxy_pass指令发送的请求的临时文件夹。

正确地recursion地通过那个目录到user:group映射到nginx进程的user:group ,并且在需要的时候修改775权限是在加载我们的应用程序时神秘地closures连接的解决scheme。

我们还需要代理HTTP标头,以使我们的应用程序能够正确识别(而不是丢弃/中止连接)他们已经被合法代理的请求,并且向我们的应用程序提供足够的信息来正确地提供信息。

从我们的登台/etc/nginx/snippets/proxy-headers.conf

proxy_set_header主机$主机;
proxy_set_header X-Real-IP $ remote_addr;
proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
proxy_set_header X-Client-Verify SUCCESS;
proxy_set_header X-Client-DN $ ssl_client_s_dn;
proxy_set_header X-SSL-Subject $ ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ ssl_client_i_dn;
proxy_set_header X-Forwarded-Proto $ scheme;
proxy_set_header X-Forwarded-Port $ server_port;
proxy_set_header升级$ http_upgrade;
proxy_set_header连接“升级”;
proxy_pass_header Set-Cookie;
proxy_http_version 1.1;
proxy_read_timeout 900s;

你的需求可能(也可能会)分歧。 如果需要,调整和使用这些作为起点。 我们还尝试使用片段来改进我们的虚拟主机configuration,以便在需要共享相同标头,SSL参数(例如允许的密码,例如)等的所有configuration中传播更改。

为了使用这样的片段,可以简单地将其包含到虚拟主机中,考虑上面的代码片断和path:

包括/etc/nginx/snippets/proxy-headers.conf;

PS:上面的proxy-header.conf片段来自启用了SSL的虚拟主机。 如果您使用简单的HTTP进行通话,那么SSL头部确实是不需要的