美文网首页虚拟化技术Docker容器Docker学习
docker搭建nginx实现反代 配置多域名以及多端口号

docker搭建nginx实现反代 配置多域名以及多端口号

作者: hiair | 来源:发表于2016-09-30 15:50 被阅读6649次

    最近在研究docker,在架设了几个网站后,发现个问题 宿主机的80端口只可以绑定一个容器,并且没办法实现多域名,所以想到了nginx的反代,以下是使用docker架设nginx反代的笔记。

    1.需求:

    我的需求,需要将多个域名解析到同一台服务器上(即宿主机),并采用nginx反代的方式,将不同的域名和不同的容器端口号对应映射。

    2.技术:

    由于现在网站就架设在docker的容器上,所以我将采用docker进行搭建相应的配置,采用nginx服务器做反向代理。

    3.实现:

    第一步:

    安装docker,如果你的服务器上还没有相应的docker,可以参考CentOS安装步骤或者Ubuntu 系列安装 Docker步骤进行安装。(请自行google或者使用DaoCloud管理平台

    第二步:

    获取nginx镜像,执行命令:

    docker pull nginx

    第三步:

    创建并启动nginx容器,执行命令:

    docker run –name=nginx -p 80:80 -v /nginx/conf.d:/etc/nginx/conf.d -d nginx
    

    此时你已经创建了一下名字为nginx的容器,该容器中/etc/nginx/conf.d目录下的文件将与宿主机中/nginx/conf.d目录下的文件保持同步,而/etc/nginx/conf.d是nginx的站点配置文件夹,下面每一个conf配置文件各自对应一个站点。反代的配置也得写在里面。

    第四步:

    到此你的nginx容器已经创建成功,我们在此修改对应的配置文件即可,例如我现在需要将www.aaa.com的域名路径指向一个容器运行端口号8080上,只需要进入你宿主机中/nginx/conf.d目录中增加一个文件(命令cd /nginx/conf.d),文件名字要求必须为.conf格式,例如可以改名为:www.aaa.com.conf(命令vi www.aaa.com.conf),里面的内容如下(自己修改对应的地方,然后粘贴到vi中,按esc 输入:wq来保存文件):

     server {
        listen       80;
        server_name www.aaa.com自己域名;
        location / {
           proxy_pass http://宿主机ip:容器对外的端口号;
          }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    

    如果你需要多个域名的配置,只需要在/nginx/conf.d目录下加相应的配置文件即可,一般只需要修改server_name和proxy_pass即可。然后重启nginx容器,即:

    docker restart nginx

    打开你的域名即可看到效果,当然你得先把域名解析到宿主机的ip上面。

    相关文章

      网友评论

      • GeniusWong:我搞好了, 你配置文件写的有问题,
      • GeniusWong:docker restart nginx 后,出现下面这个,什么意思

        Error response from daemon: Cannot restart container nginx: driver failed programming external connectivity on endpoint nginx (71afed28407b3a58c2bc45f1249573a014285fbd0a82c1c58d3d2ba37524ee05): Bind for 0.0.0.0:8080 failed: port is already allocated
      • GeniusWong:为什么我的重启后,并没有指向8080商品, 还是进了Nginx容器里的根目录 ;
      • coder_lwj:请问下,我把宿主机nginx配置文件挂载到容器里面,但是我在容器里面修改了配置,容器里面nginx reload 后,配置还原了,请问这是什么原因啊?
        Jancd:@毛爷爷说我丑 我说一句吧,博文中的操作方法属于黑箱操作,如果不执行docker commit,重启肯定有问题。
      • 暴风鸟:按照这个,确实无法执行下去...
        Zenotian:+1...
      • 巨应君:这个配置文件,执行有先后顺序吗? 能不能讲解一下 http跳转https怎么配置呀
      • 巨应君:--name 这里是不是错了? 我是新手
        暴风鸟:@Arrow_fd40 我也有这个疑问...
        巨应君:@hiair 文章里面只有一个横线,还是中文格式的。。
        hiair:@Arrow_fd40 没有啊
      • 我是一只平民兔:您好~有个问题请教一下~
        第四步,添加配置文件后,重启nginx,为什么服务无法启动,没有报错。docker ps 命令查看没有正在运行的容器,docker ps -a 发现这个容器在重启那个时刻就退出了
        hiair:@我是一只平民兔 配置文件错误,是不是用记事本了 编码不对
      • 张於旦:hi,拜读了您的文章,问一个比较低级的问题,要跳转的域名挂在哪个ip上呢?是宿主机ip吗?我试了一下,似乎不行?宿主机上要做什么配置吗?
        hiair:@张於旦 你可能忘了一点,nginx也是个docker容器,容器的80绑定宿主机的80没?
        张於旦:@hiair 我的宿主机是内网的一台虚拟机,域名也是通过内网的dns服务器解析到这台宿主机的ip上,容器里的nginx的配置如下:
        server {
        listen 80;
        server_name buick2.haimaiche.net;
        location / {
        proxy_pass http://172.21.10.70:33421;
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        root /usr/share/nginx/html;
        }
        },然后内网访问buick2.haimaiche.net,我是这样做的,172.21.10.70是内网服务器ip, 33421是容器映射到宿主机上的外部端口,但结果路由不到容器里的相应端口上,我哪里搞错了呢?
        hiair:@张於旦 解析到宿主机 nginx规则里对应写相应ip 如果是另外一个docker就写ip:端口号

      本文标题:docker搭建nginx实现反代 配置多域名以及多端口号

      本文链接:https://www.haomeiwen.com/subject/prtryttx.html