前言

在工作上需要持续集成,采用nginx+docker+Jenkins的形势部署.这里简单介绍nginx的使用,以及着重介绍nginx的代理,转发以及重定向.

NGINX介绍

由于NGINX良好性能,单位时间内请求访问量大,被大量公司应用,是当下非常流行的一款web服务器,开箱即用.也是非常方便,这里不介绍nginx细节.
我这里只介绍一般打包前端代码到nginx容器发布的流程,以及nginx的conf文件的配置.

nginx容器部署流程

只需要将编译好的前端代码放到nignx运行即可,不过多追究nginx的调优以及性能问题.
从git仓库clone项目,编写Dockerfile与nginx.conf配置文件:

Dockerfile:

FROM  nginx
LABEL maintainer "cherbini@qq.com"
ADD build/ /usr/share/nginx/html
ADD nginx.conf  /etc/nginx
EXPOSE 80

nginx.conf:

events{
  worker_connections 1024;
}

http {
  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 65;
  include /etc/nginx/vhost/*.conf;
  index index.html;
  root /usr/share/nginx/html;

  server{
    listen 80;
    server_name nginx;
    location / {
      root /usr/share/nginx/html;
    }

     location /bryce {
      proxy_pass http://192.168.1.7;
    }
    location /huang {
        rewrite ^/huang/(.*)$ http://192.168.1.7/$1;
    }
  }
}

需要注意Dockerfile的相对路径,上面的nginx.conf文件简单写了常用的功能: 代理和重定向.而且可以在匹配路径中使用正则表达式,这一点非常重要,如果使用灰度发布,可以使用正则表达式将小部分流量切出.

使用Dockerfile构建,使用jenkins构建过程中尽量将一些数据变量化,如Jenkins构建job的名称与镜像名称一致,镜像tag参数化,使得构建脚本尽量通用,这样就不需要一个构建任务写一份构建脚本了,就算需要修改也不用改那么多,这也是编写程序的思想,将通用的抽出来放到一处,修改的时候只需要修改一个地方就可以了.

将构建好的镜像推送到镜像仓库,删除镜像,ssh到部署机器,判断镜像和容器是否在运行,可以通过shell和grep表达式获取容器或镜像id.

存在则停止并删除容器和镜像,pull镜像并运行.就这么简单就可以实现nginx的转发和代理.下面讲下nginx常用的路径跳转.

nginx常用的路径跳转以及rewrite的使用

1、假设要把bryce/static/index.html访问重定向到static/index.html

例如当我们通过浏览器访问http://192.168.1.7/bryce/static/index.html,实际访问的是web目录下面的static/index.html文件,也及去掉了bryce这个目录,使用alias,我们假设static在根目录/下.

location ^~ /bryce/ {
 alias  /;
}

注意:

  1. 使用alias时,目录名后面一定要加”/“。
  2. alias可以指定任何名称。
  3. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
  4. alias只能位于location块中,有多级目录也是可以的比如将/bryce/ 换成/bryce/huang,只要访问对应的url都是可以访问到相同的资源;

2、把对bryce/static/index.html的访问重定向到web目录下面的test目录下

location ~ ^/bryce/ {
 root /test/;
}

http://192.168.1.7/bryce/static/index.html实际访问的是web目录下/test/bryce/static/index.html
及使用root一般是把访问目录重定向到某个目录下,但是访问的路径必须在重新定位的目录下

注意区分跟alias的区别

扩展内容

www.bryce.fun/image 自动跳转到 www.bryce.fun/make/image
这个如何写

这种需求有多种方法可以实现:

  1. 利用Nginx rewrite 内部跳转实现:
location /image {
     rewrite ^/image/(.*)$   /make/image/$1 last;
}
  1. 利用alias映射
location /image {
    alias /make/image; #这里写绝对路径
}
  1. 利用root映射:
location /image {
   root  /make;
}
  1. 利用nginx的permanent 301绝对跳转实现
location /image {
    rewrite ^/image/(.*)$  www.bryce.fun/make/image/$1;
}
  1. 判断uri实现
if ( $request_uri ~* ^(/image)){
    rewrite ^/image/(.*)$ /make/image/$1 last;
}

 目录


买个卤蛋,吃根冰棒