nginx反向代理:如何将“accept-encoding”头传递给后端服务器

前端之家收集整理的这篇文章主要介绍了nginx反向代理:如何将“accept-encoding”头传递给后端服务器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在IIS 8.5前面使用Nginx.

IIS 8.5已配置压缩并且运行良好.

但是当我们通过Nginx(下面的配置)点击它时,gzip会丢失(从Web浏览器的角度来看).

第1部分:解决方案尝试#1是在Nginx上启用gzip,从浏览器的角度来看gzip,但现在(我们担心)有(a)强加双gzip开销(在iis中使用gzip,在Nginx上解压缩,重新gzip)在Nginx上);或者,(b)gzip现在在Nginx上,这是不理想的(因为我们可以更好地控制iis,并且iis可以更好地决定什么是静态的,什么是动态的,因此缓存更好等等).解#1的配置可以在这里看到:nginx: gzip on server is lost during proxy

Addendum 1: Per Nginx docs
(07001):
Nginx … does not “double compress” responses that are already
compressed”

This is good,in that double-zipping will not occur.

第2部分:所以我们真正想要的是接受编码头传递,从浏览器到Nginx到iis,让iis做所有的压缩,并通过Nginx传递gzip响应,而不会在Nginx上发生任何gzip开销.我们的运行配置如下.

问题:我们如何在Nginx 1.7.9中实现第2部分?

运行反向代理配置,它会删除所有gzip(例如它似乎剥离了accept-encoding标头):

  1. http {
  2. upstream sandBox_site {
  3. least_conn;
  4. # we pipe to back end on port 80 only,so that Nginx handles all ssl
  5. server 192.168.2.16:80 max_fails=1 fail_timeout=60s; # sBox3-site is .2.16
  6. }
  7. server {
  8. # This is sandBox.myapp.com block **************************************
  9. listen 192.168.2.27:80;
  10. server_name sandBox.myapp.com;
  11. location / {
  12. proxy_pass http://sandBox_site;
  13. proxy_redirect off;
  14. proxy_set_header Host $host;
  15. proxy_set_header X-Real-IP $remote_addr;
  16. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  17. }
  18. }
  19. server {
  20. # This is SSL version of sandBox.myapp.com block **************************************
  21. listen 192.168.2.27:443 ssl;
  22. server_name sandBox.myapp.com;
  23. ssl_certificate new-sandBox-myapp-com.cer;
  24. ssl_certificate_key new-sandBox-myapp-com.key;
  25. ssl_protocols SSLv3 TLSv1;
  26. ssl_ciphers HIGH:!aNULL:!MD5;
  27. location / {
  28. proxy_pass http://sandBox_site;
  29. proxy_redirect off;
  30. proxy_set_header Host $host;
  31. proxy_set_header X-Real-IP $remote_addr;
  32. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  33. }
  34. }
最佳答案
肯定主题入门者已经找到答案,但我会为了其他观众发布它们.

第一个解决方案(在Nginx中启用gzip)不会导致重复压缩. Nginx非常聪明,可以看到上游已经进行了压缩而没有尝试压缩两次.

第2部分解决方案仅在代理配置中错过了一位,即:

  1. proxy_http_version 1.1;

添加此位后,一切都将按预期工作(Nginx将从上游提供gzip压缩内容)

猜你在找的Nginx相关文章