4

微服务部署—使用Docker安装Nginx并配置免费的SSL证书详解

 11 months ago
source link: https://www.51cto.com/article/769667.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
c25771199a6c3e421ab9772e4b00d0a0ce5f2c.png

SSL(Secure Socket Layer,安全套接字层)证书是一种数字证书,用于加密网站与访问者之间的数据传输。SSL证书是网站安全和可靠性的重要保证,是建立信任和保护用户隐私的重要手段。其作用可以总结为以下几点:

  • 数据安全:SSL证书能够加密网站和客户端之间的通信,保护敏感数据不被窃取或篡改。
  • 身份验证:SSL证书能够验证网站的身份,确保用户访问的是真实的、受信任的网站,而不是恶意网站。
  • 提高信任度:拥有SSL证书的网站将获得浏览器的安全标志,如绿色锁头,增加用户对网站的信任度和满意度。
  • SEO优化:谷歌将SSL证书视为网站安全性的重要指标,并将其作为SEO排名的一个因素,拥有SSL证书的网站在搜索引擎中的排名更有优势。

常见的SSL证书包括以下几种:

  • 域名验证证书(Domain Validated Certificate,DVC):只验证域名的所有权,是最基本的SSL证书,适用于小型网站或非商业网站。
  • 组织验证证书(Organization Validated Certificate,OVC):需要验证域名的所有权和组织的合法性,适用于中型商业网站。
  • 扩展验证证书(Extended Validation Certificate,EVC):需要验证域名的所有权、组织的合法性以及更严格的标准,如证明公司实体存在等,适用于大型商业网站和金融机构等。
  • 通配符证书(Wildcard Certificate):适用于一个域名下多个子域名的SSL证书。
  • 多域名证书(Multi-Domain Certificate):适用于同一SSL证书下绑定多个域名的情况,也称为SAN证书(Subject Alternative Name Certificate)。
  • 代码签名证书(Code Signing Certificate):用于保护软件或应用程序,验证软件的来源和完整性。

创建Nginx宿主机挂载目录并赋权。

mkdir -p /opt/container/nginx/html /opt/container/portal /opt/container/nginx/www /opt/container/nginx/logs /opt/container/nginx/etc /etc/ssl/nginx

chmod -R 777 /opt/container/nginx/html /opt/container/portal /opt/container/nginx/www /opt/container/nginx/logs /opt/container/nginx/etc /etc/ssl/nginx

1234

默认映射没有配置文件,需要将容器中的配置文件复制到目录下。

通过Docker安装的Nginx,映射的目录往往没有默认的配置文件和页面,如果随便从其他位置复制,如果配置文件版本不同,会导致Nginx无法访问。为了解决这个问题,先创建一个Nginx容器,将配置文件和默认的页面提前复制到宿主机的映射目录,再把容器删除即可。我们只是用到它的默认配置文件和页面,后面步骤是具体搭建Nginx。

docker pull nginx
docker run --name nginx -p 80:80 -d nginx
# 复制nginx默认页面
docker cp nginx:/usr/share/nginx/html/* /opt/container/nginx/html
# 复制 所有的配置文件
docker cp nginx:/etc/nginx/* /opt/container/nginx/etc

# 用完之后,把容器删除
docker stop 容器id
docker rm 容器id
12345678910

编写docker-compose-nginx.yml文件。

习惯用docker-compose搭建Docker服务,感觉可以对配置等内容留档,当然你也可以选择直接使用Docker命令创建Nginx。

  • /opt/container/nginx/html 映射Nginx默认页面存放目录。
  • /opt/container/portal 映射开发的应用前端页面存放目录。
  • /etc/ssl/nginx 存放Nginx SSL证书。

(二选一)docker-compose的方式创建Nginx:

version: '3'
services:
    ##nginx配置
    nginx:
      image: nginx:latest
      restart: always
      container_name: nginx
      environment:
        - TZ=Asia/Shanghai
      ports:
        - 8000:80
        - 4443:443
      volumes:
        - /opt/container/nginx/html:/usr/share/nginx/html/
        - /opt/container/portal:/nginx/html/
        - /opt/container/nginx/www:/var/www
        - /opt/container/nginx/logs:/var/log/nginx
        - /opt/container/nginx/etc:/etc/nginx
        - "/etc/localtime:/etc/localtime"
        - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone"
        - /etc/ssl/nginx:/nginx/ssl
123456789101112131415161718192021

(二选一)docker命令的方式创建Nginx:

docker run \
-p 80:80 \
-p 443:443 \
--name=nginx \
-e TZ="Asia/Shanghai" \
--restart=always \
-v /opt/container/nginx/html:/usr/share/nginx/html \
-v /opt/container/portal:/nginx/html \
-v /opt/container/nginx/www:/var/www \
-v /opt/container/nginx/logs:/var/log/nginx \
-v /opt/container/nginx/etc:/etc/nginx \
-v /etc/localtime:/etc/localtime \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone \
-v /etc/ssl/nginx:/nginx/ssl \
-d nginx:latest
123456789101112131415

docker-compose启动Nginx命令。

如果使用docker命令安装,则不需要这一步骤。

cd /opt/software
docker-compose -f docker-compose-nginx.yml up -d
12

在云服务器上申请免费的SSL证书,各大云服务器厂商都可以免费申请,这里以阿里云为例,免费申请SSL证书。

  • 登录阿里云控制台,进入[数字证书管理服务] > [SSL证书] > [免费证书]。
a38a711614b950f88ab044a194c547fb3e0eeb.png
  • 点击 [创建证书] > [证书申请],然后按要求填写申请信息,然后提交审核。
5435ffc3908da0fb35b71459f054aa8d948293.png
  • 等待申请通过,在证书列表中,就会看到已申请的SSL证书,然后点击下载按钮,选择需要部署的服务器类型,我们这里使用的是nginx,所以选择下载nginx服务器类型的SSL证书。
5382fcd60535f605cfd829dddd2f792fbbec66.png
d636bd0982b4c6edddf503f87fd775900a4bd0.png
  • 下载成功后,可以得到一个包含域名的zip包,里面有.key和.pem文件

b854ca154720aef80da668082240e94efc48af.png

将下载的SSL证书.key和.pem文件上传到Linux服务器/etc/ssl/nginx目录,这里因为我们创建docker容器时指定的映射目录是这个。

修改nginx.conf配置文件,将证书配置到对应域名配置中,然后重启nginx服务,域名就可以通过https访问了。

server {
        listen 80;
        listen 443 ssl;
        ssl_certificate /nginx/ssl/证书名称.pem;
        ssl_certificate_key /nginx/ssl/证书名称.key;
        server_name  域名;

        gzip on;
        gzip_buffers 32 4K;
        gzip_comp_level 6;
        gzip_min_length 100;
        gzip_types application/javascript text/css text/xml text/plain application/x-javascript image/jpeg image/gif image/png;
        gzip_disable "MSIE [1-6]\."; 
        gzip_vary on;
        #charset koi8-r;
        access_log  /var/log/nginx/portal.access.log  main;
        location / {
            proxy_set_header Host $http_host;               
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://172.17.0.1:8080/;
        }
    }

免费证书的优势通常包括以下几点:

  • 节省成本:免费证书不需要支付任何费用,可以为企业和个人节省一定的成本。
  • 风险低:虽然免费证书的安全性可能没有付费证书高,但是使用免费证书也可以提高网站的加密度,降低网站的风险。
  • 简单易用:免费证书通常非常容易申请和安装,无需太多的技术知识。
  • 全球范围内认可:虽然免费证书是免费的,但是它们通常具有与付费证书相同的加密等级和浏览器兼容性。这意味着它们在全球范围内得到认可和接受。
  • 短期有效期:免费证书的有效期通常比付费证书短,需要更频繁地更新或重新申请,但这也可以确保证书的安全性和有效性。

免费的证书有效期只有一年,而且是单域名证书,对于小型项目或者刚刚起步的网站,可以节省成本,就是在操作上需要每年重新申请一次。一般云服务厂商都会有证书申请个数限制,但对于初期项目来说基本够用了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK