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

   

在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

  

反向代理

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

静态代理

静态代理就是将请求代理到不同的静态资源路径上去,这里我们将对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的后台服务上去。

  • 首先我们修改下本机的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进行限速操作,限制每个连接的访问速度为128K来建立一个比较慢的访问场景;

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

server {listen       80;server_name  mall.macrozheng.com;limit_rate 128k; #限制网速为128Klocation / {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; #开启gzipgzip_disable "msie6"; #IE6不使用gzipgzip_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的地址重写来让用户跳转到新的域名进行访问。

  • 比如说原来我们用的docs.macrozheng.com这个域名不用了,现在改成www.macrozheng.com了来访问文档项目了;

  • 修改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去。

有道无术,术可成;有术无道,止于术

欢迎大家关注Java之道公众号

好文章,我在看❤️

Nginx的这些妙用,你肯定有不知道的!相关推荐

  1. Nginx 的这些妙用,你都 get 到了吗?

    作者:Java大猿帅 https://github.com/Jstarfish/JavaEgg " Nginx 因为它的稳定性.丰富的模块库.灵活的配置和较低的资源消耗而闻名 .目前应该是几 ...

  2. 关于nginx你可能不知道的秘密----nginx地址重写以及错误页面配置

    1.什么是Rewrite Rewrite对称URL Rewrite,即URL重写,就是把传入Web的请求重定向到其他URL的过程. URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示 ...

  3. c语言node类型_高阶宏的妙用技法,C语言宏你所不知道的聪明技巧

    前言 什么是高阶宏?高阶宏就是以宏为参数的宏.以宏为参数的宏这就是这篇文章的重点.其实业界领先的代码库是有很多值得我们学习的,研究开源库也可以是大家学习的方向哦,通常开源库中90%的内容超出了新手对于 ...

  4. 【软件测试】你肯定不知道的七大事实

    目录 前言 事实1:测试并不能找出所有的bug 事实2:测试覆盖率与测试的效果几乎没有相关性 事实3:测试工作量呈指数增加 事实4:开发者偏差 事实5:晚期发现的缺陷可能不会花费更多来修复 事实6:探 ...

  5. 你肯定不知道的19位美国总统的佚事

    总统其实也是凡人,在他们叱诧政坛的背后,也有不少鲜为人知的趣闻和怪癖. [ 转自铁血社区 http://bbs.tiexue.net/ ] 他们不仅是美利坚合众国的领导者,他们多才多艺,独一无二,有时 ...

  6. vscode 逗号不换行_你肯定不知道的,苹果手机输入法小技巧,大大提高我们打字效率哦...

    Iphone手机因为它的IOS系统,是很多人选择苹果手机的原因.Iphone手机用了这么久,可能大多数人都对ihpone手机技巧了如指掌,今天我们就来分享几个较冷门的实用小技巧,你不一定全都知道哦. ...

  7. 踢脚线有哪些颜色?做室内设计肯定要知道的呀

    除了材质,踢脚线的颜色也对空间设计效果有着直接的关联,常见的踢脚线颜色有哪些搭配方案呢? ①瓷砖同色 如果装修预算有限,地面是铺地砖的话,可以用地砖加工切割来做踢脚线,这样做的效果地面与踢脚线保持简单 ...

  8. jenkins shell 权限_使用Jenkins一键打包部署SpringBoot应用,就是这么6!

    任何简单操作的背后,都有一套相当复杂的机制.本文将以SpringBoot应用的在Docker环境下的打包部署为例,详细讲解如何使用Jenkins一键打包部署SpringBoot应用. Jenkins简 ...

  9. 解决百度不能访问的问题

    现象 chrome和edge提示连接已重置,safari提示无法建立不安全的连接.网上到处都是这个问题,都在问,别的网页都好,为什么就百度打不开?因为它广告多? 网上那些重启浏览器.清缓存.清cook ...

最新文章

  1. 安装ftp连接linux服务器配置,Linux下FTP安装及配置(VSFTPD服务器安装配置、FTP客户端安装配置)...
  2. 【JS第28期】继承-借用构造函数
  3. c++ 单例模式 对全局变量的替代
  4. 2013 JavaB2 马虎的算式
  5. screen命令简介
  6. CoreCLR源码探索(一) Object是什么
  7. 基因表达聚类分析之初探SOM
  8. [UE4] 通过 Git 进行版本控制时的报错 No assets to check in! 的解决方法:重新更改本地代码
  9. php 如何执行top命令,linux命令:top命令
  10. C语言输出九九乘法表
  11. QT Creator 使用 design 修改 ui界面编译后界面未更新代码提示
  12. 【架构】大型网站优化技术思路
  13. 金立S6:因“耀”开启金属手机2.0时代
  14. JDK-8u131 软件安装教程
  15. PyCharm2017破解教程
  16. 百闻牌服务器维护,阴阳师百闻牌一直进不去 无法进入游戏解决方法
  17. html 怎么几秒后自动隐藏,3秒或5秒后自动隐藏提示消息和重定向到另一页
  18. python中numpy zeros_为什么numpy.zeros和numpy.zeros的性能不同?
  19. insertSelective和insert的区别?
  20. Web实验六 JavaScript实验

热门文章

  1. as cast float server sql_面试常考!SQL行转列和列转行
  2. ubuntu 16.04 源码安装samba并且配置
  3. (数据库系统概论|王珊)第十一章并发控制-第二、三、四节:封锁、封锁协议活锁和死锁
  4. Zookeeper C API 基本常量和结构体介绍
  5. 斗地主综合案例之有序版本
  6. ‘ascii‘ codec can‘t encode characters in position
  7. 设置其他用户文件、文件夹权限与现用户权限相同(命令、权限)
  8. JAVA中整数类型数据溢出问题研究
  9. wx-charts 微信小程序图表插件
  10. 关于完全删除电脑上多余的tomcat服务器的解决办法