通过docker容器部署https访问的NGINX应用

▶ 应用目录准备

存储配置文件

[root@server ~]# mkdir -p nginxdir/nginx/conf.d

存储证书文件

[root@server ~]# mkdir -p nginxdir/nginx/certs

存储网站文件

[root@server ~]# mkdir -p nginxdir/app

▶ 文件准备

▷ 证书文件准备

由于属于实验性质,所以在其他的网站来做 SSL 证书的生成如:https://www.toolhelper.cn/SSL/SSLGenerate

这里使用的 IP或者域名www.example.com

这样就有了后面需要的 cert.pemprivate.key 这两个文件,将这两个的文件后缀之前改为 www.example.com

[root@server ~]# cd nginxdir/nginx/certs/
[root@server certs]# ll
total 8
-rw-r--r--. 1 root root 1255 Oct 25 10:53 www.example.com.pem
-rw-r--r--. 1 root root 1714 Oct 25 10:53 www.example.com.key

▷ 网站文件的准备

[root@server nginx]# echo "ssl test" >> /root/nginxdir/app/index.html
[root@server nginx]# cd /root/nginxdir/app/
[root@server app]# ll
total 4
-rw-r--r--. 1 root root 9 Oct 25 11:01 index.html

▷ 配置文件的准备

容器的配置文件提取:可以使用 docker exec 选项进入容器中查看具体的配置位置。

当前 nginx 容器的配置文件的路径是:/etc/nginx/conf.d/default.conf 这是为后面的 docker cp 来做准备。

[root@server conf.d]# pwd
/root/nginxdir/nginx/conf.d
[root@server conf.d]# docker cp 7536fd2d7852:/etc/nginx/conf.d/default.conf .
Successfully copied 3.07kB to /root/nginxdir/nginx/conf.d/.
[root@server conf.d]# ll
total 4
-rw-r--r--. 1 root root 1093 Oct 25 11:04 default.conf

这样 docker host 主机的 /root/nginxdir/nginx/conf.d/ 就有 default.conf 这个文件了。

      1 server {
      2     listen       80;
      3     listen  [::]:80;
      4     server_name  localhost;

改为 ==>

      1 server {
      2     listen       80;
      3     listen  443 ssl;
      4     server_name  www.example.com;

如果需要证书的话则需要添加两行,一行是ssl证书文件,一个是key文件。

      6     #access_log  /var/log/nginx/host.access.log  main;
      7
      8     location / {

改为 ==>

      6     #access_log  /var/log/nginx/host.access.log  main;
      7     ssl_certificate         /etc/nginx/certs/www.example.com.pem;
      8     ssl_certificate_key     /etc/nginx/certs/www.example.com.key;
      9
     10     location / {

这样就做好配置文件了。

[root@server nginx]# ll
total 0
drwxr-xr-x. 3 root root 57 Oct 25 10:58 certs
drwxr-xr-x. 2 root root 50 Oct 25 11:33 conf.d

[root@server nginx]# cd ..; ls
app  nginx

▶ 使用 docker run 运行应用

[root@server ~]# docker run --name mynginx -d \
> -p 80:80 -p 443:443 \
> -v /root/nginxdir/nginx/conf.d/:/etc/nginx/conf.d \
> -v /root/nginxdir/nginx/certs/:/etc/nginx/certs \
> -v /root/nginxdir/app/:/usr/share/nginx/html/ \
> --restart always \
> nginx
b614a2887c7a5994b9f0f04dbbe62b3921ac66915ab5405f0cf8ee4a901b1300
[root@server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                                                      NAMES
b614a2887c7a   nginx     "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   mynginx

▷ 访问测试


由于是之前网站生成的 SSL 证书不是 CA 机构颁发的证书,仅用于学习、测试使用(比如使用 Nginx 部署 HTTPS 网站)。
部署的 HTTPS 网站在访问时,会提示不受信任的证书。


该文档是参考流程。


▷ 从 http:// 跳转 https://

修改 nginx 中的 default.conf

      1 server {
      2     listen       80;
      3     listen  443 ssl;
      4     server_name  www.example.com;

改为 ==> 
      1 server {
      2     listen    80;
      3     server_name   www.example.com;
      4     return   301   https://$host$request_uri;
      5 }
      6
      7 server {
      8     listen  443 ssl;
      9     server_name  www.example.com;

修改后 1-5 行是新的添加的内容,之前的 server 块中的 listen 80; 被改到了新建的上面的 server 块中。

posted @ 2024-10-25 19:02  takenika  阅读(212)  评论(0)    收藏  举报