前端学堂
学有所用

nginx强制使用https和开启gzip

nginx强制使用https访问(http跳转到https)

nginx的rewrite方法

这应该是大家最容易想到的方法,将所有的http请求通过rewrite重写到https上即可

配置

  1. server {
  2.     listen  192.168.1.111:80;
  3.     server_name test.com;
  4.     rewrite ^(.*)$  https://$host$1 permanent;
  5. }

搭建此虚拟主机完成后,就可以将https://test.com的请求全部重写到https://test.com上了

nginx的497状态码

497 – normal request was sent to HTTPS

解释:当此虚拟站点只允许https访问时,当用http访问时nginx会报出497错误码

思路

利用error_page命令将497状态码的链接重定向到https://test.com这个域名上
  1. server {
  2.     listen       192.168.1.11:443;  #ssl端口
  3.     listen       192.168.1.11:80;   #用户习惯用http访问,加上80,后面通过497状态码让它自动跳到443端口
  4.     server_name  test.com;
  5.     #为一个server{……}开启ssl支持
  6.     ssl                  on;
  7.     #指定PEM格式的证书文件
  8.     ssl_certificate      /etc/nginx/test.pem;
  9.     #指定PEM格式的私钥文件
  10.     ssl_certificate_key  /etc/nginx/test.key;
  11.     #让http请求重定向到https请求
  12.     error_page 497  https://$host$uri?$args;
  13. }

index.html刷新网页

上述两种方法均会耗费服务器的资源,我们用curl访问baidu.com试一下,看百度的公司是如何实现baidu.com向www.baidu.com的跳转
可以看到百度很巧妙的利用meta的刷新作用,将baidu.com跳转到www.baidu.com.因此我们可以基于https://test.com的虚拟主机路径下也写一个index.html,内容就是http向https的跳转

index.html

<html>
<meta http-equiv=”refresh” content=”0;url=https://test.com/”>
</html>

nginx虚拟主机配置

server {  
    listen 192.168.1.11:80;  
    server_name test.com;  
      
    location / {  
                #index.html放在虚拟主机监听的根目录下  
        root /var/www/http.test.com/;  
    }  
        #将404的页面重定向到https的首页  
    error_page  404 https://test.com/;  
}  

nodejs或nginx开启GZIP

开启网站的 gzip 压缩功能,通常可以高达70%,也就是说,如果你的网页有30K,压缩之后就变成9K, 对于大部分网站,显然可以明显提高浏览速度(注:需要浏览器支持)。

测试工具:google speed

nodejs + express

对于 nodejs + express 框架,启用方法非常简单,启用 compress() 中间件即可, 通过 gzip / deflate 压缩响应数据,这个中间件应该放置在所有的中间件最前面以保证所有的返回都是被压缩的。

代码如下:

app.use(express.logger());
app.use(express.compress());
app.use(express.static(__dirname + '/html'));
app.use(express.methodOverride());
app.use(express.bodyParser());

nginx

编辑 nginx 的配置文件

sudo vi /etc/nginx/nginx.conf

在 Gzip Settings 中加入如下设置:

##
# Gzip Settings
##

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 5;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;

1) gzip

  • 语法:gzip on/off
  • 默认值:off
  • 作用域:http, server, location
  • 说明:开启或者关闭 gzip 模块,这里使用 on 表示启动

2) gzip_min_length

  • 语法:gzip_min_length length
  • 默认值:gzip_min_length 0
  • 作用域:http, server, location
  • 说明:设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。|

3) gzip_buffers

  • 语法: gzip_buffers number size
  • 默认值: gzip_buffers 4 4k/8k
  • 作用域: http, server, location
  • 说明:设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k 代表以 16k 为单位,按照原始数据大小以 16k 为单位的4倍申请内存。

4) gzip_comp_level

  • 语法: gzip_comp_level 1..9
  • 默认值: gzip_comp_level 1
  • 作用域: http, server, location
  • 说明:gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)。这里设置为 5。

5) gzip_types

  • 语法: gzip_types mime-type [mime-type …]
  • 默认值: gzip_types text/html
  • 作用域: http, server, location
  • 说明:匹配MIME类型进行压缩,(无论是否指定)”text/html” 类型总是会被压缩的。这里设置为 text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php。

赞(1) 打赏
未经允许不得转载:前端学堂 » nginx强制使用https和开启gzip

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏