Nginx反向代理docker容器进行域名解析绑定的实现方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx反向代理docker容器进行域名解析绑定的实现方法相关的知识,希望对你有一定的参考价值。

参考技术A

可以把多个域名映射到同一个IP地址上

docker 镜像名称由REPOSITORY和TAG组成 [REPOSITORY[:TAG]] ,TAG默认为latest

在宿主机创建持久化 conf--配置目录 html--静态网站目录 logs--日志目录 cert--存放证书目录

将容器内的 nginx.conf 与 default.conf 文件分别拷贝到主机/mnt/nginx与目录/mnt/nginx/conf下,分别执行

conf目录下创建nginx.conf文件

首先要在域名管理中做好域名简析

在conf.d目录下创建 域名为ab.baidu.com的配置文件 ab.baidu.com.conf 文件 包含ssl证书

在conf.d目录下创建 域名为gh.baidu.com的配置文件 gh.baidu.com.conf 文件 包含ssl证书

ginx.conf并没有在etc/nginx/conf目录下。

允许https访问 的 default.conf 文件

将服务器的配置文件挂载到容器中,这样我们修改配置文件会方便一些。

退出nginx容器,将容器中的文件nginx.conf先拷贝到宿主机中,conf.d目录下的 default.conf 文件拷贝出来

执行 docker stop ef 命令停止刚刚创建的nginx容器,ef是容器Id,然后执行 docker rm ef 移除容器,

-v /docker-root/nginx/conf/nginx.conf :/etc/nginx/nginx.conf

/docker-root/nginx/conf/nginx.conf 宿主机中的ngix配置文件 挂载 到容器的 /etc/nginx/nginx.conf 配置文件

-v /docker-root/nginx/conf/conf.d:/etc/nginx/conf.d

/docker-root/nginx/conf/conf.d 宿主机中的 配置目录 conf.d 挂载到 容器的 /etc/nginx/conf.d 目录上

-v /docker-root/nginx/cert:/cert/

映射ssl 证书文件

命令,重新创建nginx容器

这样就可以将配置文件、log、静态页面映射到宿主机中。需要修改或者查看直接在宿主机中修改或者查看就可以了。需要注意的是, 配置文件虽然映射到宿主机中,但是如需配置路径,还需配置成容器中的路径

注意发布到 云服务器上 服务器安全组是否开放了443端口。

把 vue 生成的 dist目录下的文件 上传到 服务器

/root/docker-root/vue-mcyl-src

文件目录 dist 目录 Dockerfile 文件

转到 此目录下

使用下面的命令 生成镜像

启动容器

docker run -d mcyl-vue:v1.0

conf.d 目录下的配置文件 default.conf

防火墙原因,需要将通信的端口开放

解决办法:

firewall-cmd --zone=public --add-port=9080/tcp --permanent

firewall-cmd --zone=public --add-port=8080-8080/tcp

参考 http://www.ttlsa.com/web/multiple-https-host-nginx-with-a-ip-configuration/

Nginx域名绑定

Nginx实现域名绑定

  1. 生产环境利用nginx对后端服务器进行反向代理和负载均衡,再把外网域名解析到nginx的vip地址,这样在外网可以通过域名访问WEB服务。但是如果不对域名进行绑定的话,用户可通过ping域名获取服务器IP地址,再通过IP地址直接访问到WEB服务。这不符合国家的政策法规。本文介绍如何利用Nginx实现域名绑定,禁止用户直接通过IP地址直接访问WEB服务。

  2. 利用nginx的default_server可以很容易地实现该域名绑定,配置如下:

# 配置default_server
server {
    listen 1.1.1.1:80 default_server;
    server_name _;
    return 403;
}

# 配置真实服务器反向代理
server {
    listen       1.1.1.1:80;
    server_name  mydomain.com;

    location / {
    	proxy_pass http://x.x.x.x:80;
    }
}
  1. 上述nginx配置中有两个server都监听了1.1.1.1地址的80端口,第一个server设置为default_server, server_name为任意域名;第二个server域名设置为mydomain.com。当http请求到达nginx时:如果是通过mydomain.com访问的(header中Host字段为mydomain.com),则该请求会匹配到第二个server, 由该server进行处理;否则由第一个default server进行处理,default server直接返回403拒绝服务状态码。

  2. 上述配置中,不是通过mydomain.com访问nginx, 会直接返回403拒绝服务状态码, 返回页面为nginx默认的403错误页面,如下图所示:
    技术图片

  3. 如果需要自定义403页面,可以把default server配置成一个静态的server, 请求匹配到该server时直接返回一个自定义的403页面,nginx配置如下所示:

server {
    listen 10.0.0.25:5601 default_server;
    server_name _;
    index 403.html;
}

server {
    listen       1.1.1.1:80;
    server_name  mydomain.com;

    location / {
    	proxy_pass http://x.x.x.x:80;
    }
}

这样不通过mydomain.com访问nginx,就可以返回自定义的403错误页面了。

以上是关于Nginx反向代理docker容器进行域名解析绑定的实现方法的主要内容,如果未能解决你的问题,请参考以下文章

为Docker创建自动化nginx反向代理

nginx反向代理二级域名绑定方法及注意事项

Nginx域名绑定

nginx 根据域名反向代理

Apache的网站,使用Nginx进行反向代理(1个IP绑定多个域名,对应多个网站)解决方案

nginx反向代理+tomcat域名绑定