我已经继承了需要启用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"子域名)。我也尝试完全从http块中取出gzip行,这在运行" 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,但其他人说它没有。
答案 0 :(得分:2)
看起来还有另一个我不知道的nginx.conf文件(不知道为什么它在运行find时没有出现),其中包含gzip,因此副本错误。在其他几个网站(例如http://www.whatsmyip.org/http-compression-test/)上查看我的网站后,似乎http://checkgzipcompression.com/网站没有压缩是错误的。我不确定为什么谷歌PageSpeed仍然建议压缩,但这是我能够得到的。