Nginx的这些妙用,你确定有不知道的!

SpringBoot实战电商项目mall(25k+star)地址:github.com/macrozheng/…javascript

摘要

本文将从反向代理、文件压缩、地址重写三方面来说解Nginx在Docker环境下的使用技巧!css

在Docker环境下的安装

下载nginx的docker镜像

docker pull nginx:1.10
复制代码

从容器中拷贝nginx配置

  • 先运行一次容器(为了拷贝配置文件):
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-d nginx:1.10
复制代码
  • 将容器内的配置文件拷贝到指定目录:
docker container cp nginx:/etc/nginx /mydata/nginx/
复制代码
  • 修改文件名称:
mv nginx conf
复制代码
  • 终止并删除容器:
docker stop nginx
docker rm nginx
复制代码

使用docker命令启动

docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10
复制代码

反向代理

反向代理就是当请求访问你的代理服务器时,代理服务器会对你的请求进行转发,能够转发到静态的资源路径上去,也能够转发到动态的服务接口上去。下面咱们以对域名进行代理为例,来说讲如何进行静态代理和动态代理。html

静态代理

静态代理就是将请求代理到不一样的静态资源路径上去,这里咱们将对docs.macrozheng.com的请求代理到个人文档项目中,对mall.macrozheng.com的请求代理到mall的前端项目中。前端

  • 首先咱们修改下本机的host文件:
192.168.6.132 docs.macrozheng.com
192.168.6.132 mall.macrozheng.com
复制代码
  • 而后将咱们的文档项目和mall前端项目上传到nginx的html目录中去,并进行解压操做:

  • /mydata/nginx/conf/conf.d文件夹中添加配置文件docs.conf对文档项目进行反向代理:
server {
    listen       80;
    server_name  docs.macrozheng.com; #修改域名

    location / {
        root   /usr/share/nginx/html/docs; #代理到docs文件夹中
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
复制代码
  • /mydata/nginx/conf/conf.d文件夹中添加配置文件mall.conf对mall的前端项目进行反向代理:
server {
    listen       80;
    server_name  mall.macrozheng.com; #修改域名

    location / {
        root   /usr/share/nginx/html/mall; #代理到mall文件夹中
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
复制代码
  • 重启nginx服务:
docker restart nginx
复制代码
  • 经过docs.macrozheng.com便可访问到咱们的文档项目了:

  • 经过mall.macrozheng.com便可访问到mall的前端项目了:

动态代理

动态代理就是把代理服务器的请求转发到另外一个服务上去,这里咱们将对api.macrozheng.com的请求代理到mall-admin的后台服务上去。java

  • 首先咱们修改下本机的host文件,添加以下规则:
192.168.6.132 api.macrozheng.com
复制代码
  • /mydata/nginx/conf/conf.d文件夹中添加配置文件api.conf对将请求代理到远程的mall-admin服务上去:
server {
    listen       80;
    server_name  api.macrozheng.com; #修改域名

    location / {
    	proxy_pass   http://120.27.63.9:8080; #修改成代理服务地址
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
复制代码
  • 重启动nginx服务后,经过api.macrozheng.com/swagger-ui.html便可访问到mall-admin的API文档页面了:

文件压缩

若是咱们租用了一个带宽很低的服务器,网站访问速度会很慢,这时咱们能够经过让nginx开启GZIP压缩来提升网站的访问速度。这里咱们以mall的前端项目为例来演示下它的提速效果。nginx

  • 首先咱们对nginx进行限速操做,限制每一个链接的访问速度为128K来创建一个比较慢的访问场景;git

  • 修改mall.conf配置文件,进行限速操做:github

server {
    listen       80;
    server_name  mall.macrozheng.com;
    
    limit_rate 128k; #限制网速为128K

    location / {
        root   /usr/share/nginx/html/mall;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
复制代码
  • 对mall的前端项目mall.macrozheng.com进行访问,咱们能够发现网站中有个js文件比较大,须要加载12s:

  • nginx返回请求头信息以下:

  • 修改/mydata/nginx/conf目录下的nginx.conf配置文件,开启GZIP压缩;
http {

    gzip on; #开启gzip
    gzip_disable "msie6"; #IE6不使用gzip
    gzip_vary on; #设置为on会在Header里增长 "Vary: Accept-Encoding"
    gzip_proxied any; #代理结果数据的压缩
    gzip_comp_level 6; #gzip压缩比(1~9),越小压缩效果越差,可是越大处理越慢,因此通常取中间值
    gzip_buffers 16 8k; #获取多少内存用于缓存压缩结果
    gzip_http_version 1.1; #识别http协议的版本
    gzip_min_length 1k; #设置容许压缩的页面最小字节数,超过1k的文件会被压缩
    gzip_types application/javascript text/css; #对特定的MIME类型生效,js和css文件会被压缩

    include /etc/nginx/conf.d/*.conf;
}

复制代码
  • 再次对mall的前端项目mall.macrozheng.com进行访问,咱们能够发现js文件已经被压缩,加载时间缩短到3.88s,提速3倍左右:

  • nginx返回请求头中添加了Content-Encoding: gzip的信息:

地址重写

有的时候咱们的网站更换了域名,但还有用户在使用老的域名访问,这时能够经过nginx的地址重写来让用户跳转到新的域名进行访问。docker

  • 好比说原来咱们用的docs.macrozheng.com这个域名不用了,如今改为www.macrozheng.com了来访问文档项目了;api

  • 修改docs.conf配置文件,将地址带参数重写到新地址:

server {
    listen       80;
    server_name  docs.macrozheng.com; 
    
    rewrite "^/(.*)$" http://www.macrozheng.com/$1; #地址重写到新地址

    location / {
        root   /usr/share/nginx/html/docs; 
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

复制代码
  • 此时访问旧域名docs.macrozheng.com会直接跳转到www.macrozheng.com去。

公众号

mall项目全套学习教程连载中,关注公众号第一时间获取。

公众号图片
相关文章
相关标签/搜索