美文网首页Docker学习
Docker部署nginx(进阶)

Docker部署nginx(进阶)

作者: 一只揣着梦想远行的飞鸟 | 来源:发表于2020-10-20 00:10 被阅读0次

    Keywords: docker, nginx, 反向代理, ssl证书

    前言: 本篇记录自己为nginx配置ssl证书,以及开启其反向代理服务。

    若还未部署nginx,可以参考我写的上一篇Docker部署nginx(基础)

    Docker部署nginx(进阶)

    申请阿里云免费DV证书并下载

    参考阿里云帮助文档:

    上传证书到服务器

    假设:

    • SSl证书上传至/home目录
    • 压缩包名为4389002_www.domain.com_nginx.zip
    • 正在运行的容器名为nginx
    # 若没有zip和unzip软件,执行以下指令
    yum install -y zip unzip
    
    # 解压
    unzip 4389002_www.domain.com_nginx.zip
    
    # 将会得到4389002_www.domain.com_nginx.pem 
    # 和 4389002_www.domain.com_nginx.key,
    # 其中pem使公钥,key使密钥
    
    # 将zip文件移走,然后该目录仅保留pem和key文件
    mv 4389002_www.domain.com_nginx.zip ../
    

    进入nginx容器

    # 进入nginx容器
    # i表示交互,t表示开启终端,bash表示操作终端指令的shell
    docker exec -it nginx bash
    
    # 进入/etc/nginx,创建cert目录然后退出
    cd /etc/nginx
    mkdir cert
    exit
    

    将SSl证书复制进容器

    # 当前目录仅有key和pem文件
    docker cp * nginx:/etc/nginx/cert
    

    配置本地挂载nginx配置文件

    • 进入nginx-data/conf.d目录
    • 新增一个ssl.conf文件,并新增如下内容
    server {
        listen 443 ssl;
        server_name www.domain.com;
        ssl_certificate /etc/nginx/cert/4389002_www.domain.com.pem;
        ssl_certificate_key /etc/nginx/cert/4389002_www.domain.com.key;
        ssl_session_timeout 2m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
            ssl_prefer_server_ciphers on;
            
        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }
    
    }
    

    注意: server_name对应的域名必须和证书保持一致,因为此证书是免费DV证书,仅支持一个证书对应一个单域名。

    检查配置并重写加载:

    # 检查配置文件
    docker exec nginx /etc/init.d/nginx configtest
     
    # 重写加载配置文件
    docker exec nginx /etc/init.d/nginx reload
    

    测试

    测试前检查

    • 检查容器是否暴露443端口

    • 检查防火墙和安全组是否放行443端口

    测试网站

    • 在服务器上可以执行指令curl https://localhost
    • 在个人电脑浏览器上输入https://www.domain.com访问网站内容

    开启反向代理服务

    假设:

    • 6666端口运行主网站服务
    • 6667端口运行博客服务
    • 6668端口运行提供API的后台应用服务
    • 仅开启80端口的代理服务(其它类比即可)

    须知

    nginx是基于http协议实现的一个软件,其功能是符合http协议标准的,nginx实现反向代理是通过host(主机名)或URI(资源定位符)实现的。因此,nginx实现反向代理一般有以下几种情况:

    1. 将server_name对应的域名与对应的服务建立映射(类比修改host)。
    2. 将localtion对应的资源定位符与对应的服务建立映射(类比修改URI)。
    3. 二者混合使用。

    新增配置文件

    conf/conf.d目录下新增proxy.conf文件

    示例

    # 1.仅修改server_name字段
    server
    {
        listen 80;
        server_name www.domain.com;
        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://138.159.246.111:6666;
        }
    
    }
    
    
    # 2.仅修改localtion字段
    server
    {
        listen 80;
        server_name www.domain.com;
        location /blog {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://138.159.246.111:6667;
        }
    
    }
    
    # 3.混合使用
    server
    {
        listen 80;
        server_name help.domain.com;
        location /docs/api {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://138.159.246.111:6668;
        }
    
    }
    

    注意:上面仅参考示例,必要时可能需要新增字段,例如443端口可能还需要配置ssl证书,部分API可能要限制Method等。


    转载申明

    本文转载自智小约Docker部署nginx(基础),若转载请注明来源,侵删。

    相关文章

      网友评论

        本文标题:Docker部署nginx(进阶)

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