У меня есть веб-сервер IIS 6.0, подключенный к Интернету, который не выполняет надежное сжатие Gzipping. Я знаю, что он старый, но это все, с чем мне нужно работать для этого экземпляра.
Что я хочу сделать, так это поставить Nginx (или аналогичный) перед IIS в качестве обратного прокси-сервера и кэширующего сервера, чтобы ускорить работу сайта. Однако я не уверен, можно ли использовать gzip-архиватор nginx для веб-браузера. Если IIS передает Gzip-запросы обратно в nginx, они нормально возвращаются в браузер.
gzip on;
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_http_version 1.0;
gzip_disable "msie6";
gzip_types text/plain text/css;
gzip_vary on;
location / {
proxy_set_header x-real-IP $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header host $host;
proxy_pass http://192.168.5.37;
}
HTTP-запрос (/css/components.css)
GET /css/components.css HTTP/1.1
Host: www.mydomain.co.uk
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Accept: text/css,*/*;q=0.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
HTTP-ответ (/css/components.css)
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Thu, 22 Oct 2015 14:26:08 GMT
Content-Type: text/css
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Last-Modified: Sat, 22 Aug 2015 09:36:54 GMT
ETag: W/"07f8614bedcd01:8beb"
X-Powered-By: ASP.NET
Есть ли какой-то волшебный параметр, который мне где-то не хватает, чтобы он мог сжать файлы в nginx?
Спасибо!
Декан
Вы можете добавить gzip_proxied any;
директива к вашей конф.
редактировать:
Мой тест:
Я установил простой HTTP-сервер (который сам по себе не может архивировать) на своем компьютере (192.168.122.1) с python -m http.server 8080
. Когда я прошу это, я получаю:
[pat@morbier ~]$ curl -I -H 'Accept-Encoding: gzip,deflate' http://192.168.122.1:8080/
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.5.0
Date: Thu, 22 Oct 2015 17:41:39 GMT
Content-type: text/html; charset=utf-8
Content-Length: 1197
Я настроил прокси с nginx (192.168.122.224)
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_http_version 1.0;
gzip_disable "msie6";
gzip_types text/plain text/css;
gzip_vary on;
location / {
proxy_set_header x-real-IP $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header host $host;
proxy_pass http://192.168.122.1:8080;
}
Когда я запрашиваю то же самое с прокси, я получаю
[pat@morbier ~]$ curl -I -H 'Accept-Encoding: gzip,deflate http://192.168.122.224/
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Thu, 22 Oct 2015 17:46:08 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1197
Connection: keep-alive
Потом добавляю в конф прокси
gzip on;
gzip_proxied any;
И я получаю
[pat@morbier ~]$ curl -I -H 'Accept-Encoding: gzip,deflate' http://192.168.122.224/
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Thu, 22 Oct 2015 17:47:54 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Content-Encoding: gzip
Вы также можете увидеть это, если скручиваете без -I (чтобы получить всю страницу), в моем случае это оказывается какой-то двоичный файл, отображаемый на терминале, что подтверждает тот факт, что он сжат. Когда я скручиваю обычный веб-сайт без сжатия, я получаю содержимое веб-страницы (HTML).
edit2:
На самом деле он работает только с вашими включенными опциями, похоже, gzip_proxied не нужен.
Ах, вы запрашиваете, не передавая заголовок «Accept-Encoding: gzip, deflate» (я думаю, вы используете telnet). В этом случае это не сработает, потому что вы не скажете серверу, что можете обрабатывать двоичные файлы, закодированные с помощью gzip.
Попробуйте с curl, пожалуйста.
Да, это точно можно сделать. Я случайно узнал об этом (в моем случае iis 8.5, который отлично работал с gzip до тех пор, пока я не поставил перед ним обратный прокси nginx, и gzip с точки зрения браузера не был потерян).
Конфигурация, показанная здесь:
nginx: gzip на сервере теряется во время прокси
Обеспечит взаимодействие ваших клиентов с помощью gzip и nginx, независимо от того, что делает iis.
Настройте пантомиму по своему вкусу.