前言
在工作上需要持续集成,采用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 /;
}
注意:
- 使用alias时,目录名后面一定要加”/“。
- alias可以指定任何名称。
- alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
- 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
这个如何写
这种需求有多种方法可以实现:
- 利用Nginx rewrite 内部跳转实现:
location /image {
rewrite ^/image/(.*)$ /make/image/$1 last;
}
- 利用alias映射
location /image {
alias /make/image; #这里写绝对路径
}
- 利用root映射:
location /image {
root /make;
}
- 利用nginx的permanent 301绝对跳转实现
location /image {
rewrite ^/image/(.*)$ www.bryce.fun/make/image/$1;
}
- 判断uri实现
if ( $request_uri ~* ^(/image)){
rewrite ^/image/(.*)$ /make/image/$1 last;
}
本博客所有文章除特别声明外,均采用: 署名-非商业性使用-禁止演绎 4.0 国际协议,转载请保留原文链接及作者。