DOCKER-nginx安装

1.使用docker 下载nginx 镜像

docker search nginx
docker pull nginx

2.启动nginx

docker run --name nginx -p 80:80 -d nginx

这样就简单的把nginx启动了,但是我们想要改变配置文件nginx.conf ,进入容器,命令:

docker exec -it nginx bash

nginx.conf配置文件在 /etc/nginx/ 下面,但是你使用vim nginx.conf 或者vi nginx.conf

会发现vi或者vim命令没有用,解决办法:apt-get update 完成之后 apt-get install vim

此时你就可以自己定制nginx.con文件了,改好配置文件之后重启容器,步骤,先把容器停了

docker stop nginx 然后重启 docker start nginx

这样不是很方便,还有第二种方式,挂载配置文件,就是把装有docker宿主机上面的nginx.conf配置文件映射到启动的nginx容器里面,这需要你首先准备好nginx.con配置文件,如果你应经准备好了,下一步是启动nginx

命令:docker run --name nginx
-p 80:80
-v /home/docker-nginx/nginx.conf:/etc/nginx/nginx.conf
-v /home/docker-nginx/log:/var/log/nginx
-v /home/docker-nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
-d nginx

解释下上面的命令:

–name 给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器
-p 映射端口,将docker宿主机的80端口和容器的80端口进行绑定

-v 挂载文件用的,第一个-v 表示将你本地的nginx.conf覆盖你要起启动的容器的nginx.conf文件,第二个表示将日志文件进行挂载,就是把nginx服务器的日志写到你docker宿主机的/home/docker-nginx/log/下面

第三个-v 表示的和第一个-v意思一样的。

-d 表示后台启动

我个人更喜欢第二种映射的方式,麻烦的是需要自己准备好nginx.conf 和default.conf文件,我是直接从容器里面复制的,然后根据自己的需要改的。

附:

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:配置请求的路由,以及各种页面的处理情况。
在这里插入图片描述vi /etc/nginx/nginx.conf
在这里插入图片描述vi /etc/nginx/conf.d/default.conf

nginx默认不支持rtmp,需要下载rtmp module

  1. 在docker中安装nginx+rtmp
    拉取镜像
    docker pull alfg/nginx-rtmp

创建并运行容器,映射出两个端口1935、80

docker run -itd -p 1935:1935 -p 8080:80 --name nginx-rtmp-test alfg/nginx-rtmp
流默认地址为:rtmp://ip:port/stream/自定义名称

  1. ffmpeg推流
    将视频文件推流至rtmp服务器
    ffmpeg -re -i /Users/aaronshu/Documents/out.mp4 -f flv rtmp://127.0.0.1:1935/stream/123

  2. 使用ffplay播放rtmp流
    ffplay rtmp://127.0.0.1:1935/stream/123

Nginx且配置静态资源访问

1 、下载镜像
docker pull nginx

先简单nginx运行起来,方便后面我们拷贝容器内部的nginx配置文件。

docker run -d -p 80:80 nginx

2、 本地创建挂载目录
mkdir -p /Users/aaronshu/Documents/nginx/{conf,conf.d,html,logs}

3、拷贝容器内的nginx配置文件到宿主机做挂载
拷贝容器内的nginx配置文件到宿主机做挂载,我们以后编辑nginx配置文件都在宿主机修改,不用去docker中去修改。
首先说明之前用普通方式装的nginx只需在一个配置文件nginx.conf 中修改,现在在docker容器内部nginx有两个配置文件,nginx.conf 和default.conf ,所以要把这两文件都取出来才行。

查看nginx容器的ID,然后copy文件:
docker cp f2e945b0b15e:/etc/nginx/nginx.conf /Users/aaronshu/Documents/nginx/conf/

docker cp f2e945b0b15e:/etc/nginx/conf.d/default.conf /Users/aaronshu/Documents/nginx/conf.d/

然后去查看我们的文件有没有拷贝出来

4、修改配置文件 default.conf(注意/usr/share/nginx/html不改,挂载到虚拟机外的目录就好)
在这里插入图片描述

5、运行镜像
docker run
-d -p 8088:80
-v /Users/aaronshu/Documents/nginx/log:/var/log/nginx
-v /Users/aaronshu/Documents/nginx/html:/usr/share/nginx/html
-v /Users/aaronshu/Documents/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /Users/aaronshu/Documents/nginx/conf.d:/etc/nginx/conf.d
nginx

注意:
-v 是将:后面的容器内的文件挂载到宿主机上,也就是说用宿主机的配置来代替容器内的配置,更改宿主机的配置相当于是改容器内的配置,这样的话加入容器被删除了,也不会丢失我们的配置文件,
-v /Users/aaronshu/Documents/nginx/html:/usr/share/nginx/html 是将我们在default.conf中配置的静态资源配置,挂载到宿主机外,我们修改的配置文件指定的静态资源路径是指到容器内部的,到时候会去容器的目录下找,所以我们要把容器内部的静态资源挂载出来,让他去宿主机去找这样才能访问到!!!切记!!!!!!

我们提前在/opt/nginx/html存放我们的图片资源。在浏览器访问
在这里插入图片描述
我启动时映射的端口为8088,所以在浏览器访问
http://aaronshu.5gzvip.idcfengye.com/out.mp4
在这里插入图片描述

nginx实现请求转发

nginx实现请求转发
反向代理适用于很多场合,负载均衡是最普遍的用法。 nginx 作为目前最流行的web服务器之一,可以很方便地实现反向代理。 nginx 反向代理官方文档: NGINX REVERSE PROXY 当在一台主机上部署了多个不同的web服务器,并且需要能在80端口同时访问这些web服务器时,可以使用 nginx 的反向代理功能: 用 nginx 在80端口监听所有请求,并依据转发规则(比较常见的是以 URI 来转发)转发到对应的web服务器上。 例如有 webmail , webcom 以及 webdefault 三个服务器分别运行在 portmail , portcom , portdefault 端口,要实现从80端口同时访问这三个web服务器,则可以在80端口运行 nginx, 然后将 /mail 下的请求转发到 webmail 服务器, 将 /com下的请求转发到 webcom 服务器, 将其他所有请求转发到 webdefault 服务器。 假设服务器域名为example.com,则对应的 nginx http配置如下:

http {
server {
server_name example.com;

        location /mail/ {
                proxy_pass http://example.com:protmail/;
        }

        location /com/ {
                proxy_pass http://example.com:portcom/main/;
        }

        location / {
                proxy_pass http://example.com:portdefault;
        }
}

}

以上的配置会按以下规则转发请求( GET 和 POST 请求都会转发): 将 http://example.com/mail/ 下的请求转发到 http://example.com:portmail/ 将 http://example.com/com/ 下的请求转发到 http://example.com:portcom/main/ 将其它所有请求转发到 http://example.com:portdefault/ 需要注意的是,在以上的配置中,webdefault 的代理服务器设置是没有指定URI的,而 webmail 和 webcom 的代理服务器设置是指定了URI的(分别为 / 和 /main/)。 如果代理服务器地址中是带有URI的,此URI会替换掉 location 所匹配的URI部分。 而如果代理服务器地址中是不带有URI的,则会用完整的请求URL来转发到代理服务器。 官方文档描述:

http://example.com/mail/index.html -> http://example.com:portmail/index.html
http://example.com/com/index.html -> http://example.com:portcom/main/index.html
http://example.com/mail/static/a.jpg -> http://example.com:portmail/static/a.jpg
http://example.com/com/static/b.css -> http://example.com:portcom/main/static/b.css
http://example.com/other/index.htm -> http://example.com:portdefault/other/index.htm

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐