Docker 中启动 Nginx 实现HTTPS访问并进行反向代理Tomcat-阿里云开发者社区

开发者社区> 开发与运维> 正文

Docker 中启动 Nginx 实现HTTPS访问并进行反向代理Tomcat

简介: Docker 中启动 Nginx 实现HTTPS访问并进行反向代理Tomcat

成功经验总结,正确配置五步搞定

一、安装Nginx

1、删除命令 yum remove nginx
2、使用 yum install nginx 命令安装
3、查看使用的配置文件
   nginx -t

二、Nginx 阿里 HTTPS配置

/etc/nginx/nginx.conf 
证书服务上下载 Nginx的证书
配置文件增加内容
server {
            listen 443;
            server_name localhost;
            ssl on;
            root html;
            index index.html index.htm;
            ssl_certificate   /etc/nginx/cert/1527604247222.pem;
            ssl_certificate_key  /etc/nginx/cert/1527604247222.key;
            ssl_session_timeout 5m;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            location / {
                root html;
                index index.html index.htm;
            }
        }
        
注意 ssl_certificate   /etc/nginx/cert/1527604247222.pem; 配置的路径信息
配置完成后使用
     nginx -t 命令进行配置信息校验
     nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
     nginx: configuration file /etc/nginx/nginx.conf test is successful
标示配置信息测试成功。

4、启动 nginx
   systemctl start nginx   
5、停止 nginx
   ps aux | grep nginx
   pkill -9 nginx

三、制作Nginx镜像

nginx.conf 文件如下:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    #include /etc/nginx/conf.d/*.conf;
    upstream tomcat_client {
         server t01:8080 weight=1;
    } 
    server {
        server_name localhost;  #域名
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        location / {
            proxy_pass http://tomcat_client;
            proxy_redirect default;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    server {
            listen 443;
            server_name localhost;  #域名
            ssl on;
            root html;
            index index.html index.htm;
            ssl_certificate   /etc/nginx/cert/1527604247222.pem;
            ssl_certificate_key  /etc/nginx/cert/1527604247222.key;
            ssl_session_timeout 5m;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            location / {
                proxy_pass http://tomcat_client;
            proxy_redirect default;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            }
        }
}

Dockerfile 文件如下:

#基础镜像
FROM nginx
#作者
MAINTAINER NoTrustEvil
#定义工作目录
ENV WORK_PATH /etc/nginx
#定义conf文件名
ENV CONF_FILE_NAME nginx.conf
#删除原有配置文件
RUN rm $WORK_PATH/$CONF_FILE_NAME
#复制新的配置文件
COPY ./$CONF_FILE_NAME $WORK_PATH/
#SSL证书文件
ADD ./cert $WORK_PATH/cert
#给shell文件赋读权限
RUN chmod a+r $WORK_PATH/$CONF_FILE_NAME

注意事项

1、证书需要打包到镜像中
#SSL证书文件
ADD ./cert $WORK_PATH/cert
ssl_certificate   /etc/nginx/cert/1527604247222.pem; 
为docker容器中文件路径,在Dockerfile中配置,打包镜像的时候从宿主机上复杂到容器中。
2、反向代理的配置 nginx.conf 文件中通过
   location / {
                proxy_pass http://tomcat_client;
    
   upstream tomcat_client {
         server t01:8080 weight=1;
    }
   进行描述
3、t01 是指向的 
    docker-compose.yml 中的 
    links: 
      - sping101:t01 
4、可以启动容器后进入Nginx容器中测试配置信息配置是否正确
   docker exec -it image_nginx_nginx101_1 bash 
   exit 退出

四、制作docker-compose

docker-compose.yml 文件如下:

version: '2'
services:
  nginx101: 
    image: myfznginx
    links: 
      - sping101:t01 
    ports: 
      - "80:80" 
      - "443:443" 
    restart: always 
  sping101: 
    image: spingjpa
    ports: 
      - "8080:8080"
    restart: always

注意事项

links: 
      - sping101:t01 
是将 sping101 容器以 t01 别名连接到 nginx101 容器,便于 nginx101 容器调用。

五、容器组启停

进入 docker-compose.yml 文件目录
后台启动 docker-compose up -d
停止 docker-compose stop
移除 docker-compose down 

六、测试你的域名

这个时候应该能正常的实现 访问HTTPS域名,跳转到你的Tomcat服务中。

若无法访问,仔细检查之前的5个步骤,记住 归零心态很重要 。

实在查不出原因不要纠结不要气馁,从头再来一次。

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章