【问题标题】:Enable gzip on Nginx without "'http' directive is not allowed here" error在 Nginx 上启用 gzip,但没有“此处不允许使用‘http’指令”错误
【发布时间】:2015-06-29 01:40:00
【问题描述】:

我继承了一个需要启用 gzip 的代码库。我将这些行添加到我的 nginx staging.conf 文件中(它显示在另外两个地方:/etc/nginx/sites-enabled/ 和 /etc/nginx/sites-available/):

http {
    # enable gzip compression
    gzip             on;
    gzip_min_length  1100;
    gzip_buffers     4 32k;
    gzip_types       text/plain application/x-javascript text/xml text/css;
    gzip_vary        on;
    gzip_disable     "MSIE [1-6]\.(?!.*SV1)";
    # end gzip configuration
}

但是当我尝试重新启动 nginx 时,它会失败(没有任何错误消息),并且运行“sudo nginx”会得到这个错误:nginx: [emerg] "http" directive is not allowed here in /etc/nginx/sites-enabled/staging.conf:37

这是整个 conf 文件:

# Myexample staging nginx setup. This is meant to be included in /etc/nginx/sites-available.

ssl_certificate      /home/django/myexample.io/conf/nginx/wildcard-ssl.crt;
ssl_certificate_key  /home/django/myexample.io/conf/nginx/wildcard-ssl.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";

server {
    listen 80;
    listen 443 ssl;
    server_name www.stagingpy.myexample.io;

    return 301 $scheme://stagingpy.myexample.io$request_uri;
}

server {
    listen 80;
    listen 443 ssl;
    server_name stagingpy.myexample.io;

    access_log /var/log/nginx/myexample_access.log;
    error_log  /var/log/nginx/myexample_error.log;

    location ^~ /apple-touch-icon { root /home/django/myexample.io/static/ico/; expires  1h; }
    location = /favicon.ico       { root /home/django/myexample.io/static/ico/; expires  1h; }
    location = /humans.txt        { root /home/django/myexample.io/static/txt/; expires  1h; }
    location = /robots.txt        { root /home/django/myexample.io/static/txt/; expires  1h; }
    location /static/             { root /home/django/myexample.io/           ; expires 30d; }

    location / {
        uwsgi_pass  unix:///var/run/uwsgi/app/staging/socket;
        include     uwsgi_params;
    }
}

http {
    # enable gzip compression
    gzip             on;
    gzip_min_length  1100;
    gzip_buffers     4 32k;
    gzip_types       text/plain application/x-javascript text/xml text/css;
    gzip_vary        on;
    gzip_disable     "MSIE [1-6]\.(?!.*SV1)";
    # end gzip configuration
}

我尝试将 http 块放在服务器块之后和服务器块之前,并且我尝试将服务器块放入 http 块,但这些都没有奏效。我在生产服务器上遇到了同样的问题(production.conf 文件看起来几乎一样,除了没有“stagingpy”子域)。我还尝试将 gzip 行完全从 http 块中取出,并在运行“sudo nginx”时提示此错误:nginx: [emerg] "gzip" directive is duplicate in /etc/nginx/sites-enabled/staging.conf:38;但是,当我查看该路径中的文件时,我没有看到任何其他 gzip 行。

http 块应该放在哪里,以便我可以成功重启 nginx 并启用 gzip 以进行文件压缩?

编辑:我也尝试过creating a gzip.conf file in conf.d as shown here,但即使在我从 staging.conf 文件中删除了 http 块之后,我仍然收到有关 gzip 重复的错误 (nginx: [emerg] "gzip" directive is duplicate in /etc/nginx/conf.d/gzip.conf:1)。这让我相信 gzip 已经在某个 conf 文件中,但运行 find /etc/nginx/ -type f -name "*.conf" | grep gzip -n 只会给我 gzip.conf 文件。根据一些在线 gzip 测试,该站点启用了 gzip,但其他人说没有。

【问题讨论】:

    标签: nginx gzip


    【解决方案1】:

    看起来有另一个我不知道的 nginx.conf 文件(不知道为什么它在运行 find 时没有出现)其中包含 gzip,因此出现重复错误。在其他几个网站(例如http://www.whatsmyip.org/http-compression-test/)上检查了我的网站后,http://checkgzipcompression.com/ 似乎是关于网站不压缩的错误。我不确定为什么 Google PageSpeed 仍然建议压缩,但这是我所能得到的。

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 2014-10-08
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      相关资源
      最近更新 更多