Docker 安装与配置 Nginx

打印 上一主题 下一主题

主题 1034|帖子 1034|积分 3102

择要

1、本文全面介绍了怎样在 Docker 情况中安装和配置 Nginx 容器。
2、文中具体解释了怎样设置 HTTPS 安全毗连及配置 Nginx 以实现前后端分离的署理服务。
2、同时,探讨了通过 IP 和域名两种方式访问 Nginx 服务的具体配置方法
3、此外,文章还涵盖了 Docker 的基本操作,包括镜像创建、数据卷管理及容器的常规使用。

一、安装 Nginx

1、镜像

1.2、拉取镜像

  1. docker pull nginx:stable
  2. # stable: 镜像标签,stable 指最新稳定版本。
  3. # latest: 指最新版本。(如果不写,则默认拉取 latest 版本)
  4. # 示例默认版本:docker pull nginx
复制代码
1.3、检察镜像

  1. docker images
复制代码
1.4、删除镜像

  1. docker rmi nginx:stable
复制代码

2、volume 数据卷

2.2、创建 volume

  1. docker volume create nginxConfig
  2. docker volume create nginxHtml
  3. docker volume create nginxLog
复制代码
2.3、检察 volume

  1. # ls:列出所有的 volume
  2. docker volume ls
  3. # inspect:显示一个或多个 volume 的信息
  4. docker volume inspect nginxConfig
  5. # 执行 inspect 后的参数说明
  6. [
  7.     {
  8.         "CreatedAt": "2024-10-02T21:41:48+08:00",
  9.         "Driver": "local",
  10.         "Labels": null,
  11.         "Mountpoint": "/var/lib/docker/volumes/nginxConfig/_data",
  12.         "Name": "nginxConfig",
  13.         "Options": null,
  14.         "Scope": "local"
  15.     }
  16. ]
  17. # Driver: 表示使用的驱动程序,这里是"local",表示使用本地驱动程序。
  18. # Labels: 标签,用于对卷进行分类或标记。
  19. # Mountpoint: 挂载点,表示卷在主机上的挂载路径。
  20. # Name: 卷的名称。
  21. # Options: 选项,用于配置卷的一些参数。
  22. # Scope: 作用域,表示卷的作用范围,这里是"local",表示只在本地可见
复制代码
2.4、删除 volume

  1. # prune:删除未使用的 volume
  2. docker volume prune
  3. # rm:删除一个或多个指定的 volume
  4. docker volume rm nginxConfig
复制代码
2.5、创建后的目录结构如下

3、容器

3.2、创建容器

  1. docker run \
  2.   --name nginxOne \
  3.   -p 80:80 \
  4.   -v nginxHtml:/usr/share/nginx/html \
  5.   -v nginxConfig:/etc/nginx \
  6.   -v nginxLog:/var/log/nginx \
  7.   -d nginx:stable
  8. # --name nginxOne:为容器指定一个名称为 nginxOne。
  9. # -p 80:80:将主机的 80 端口映射到容器的 80 端口,这样可以通过主机的80端口访问 Nginx 服务(左侧为宿主机端口)。
  10. # -v 数据卷挂载,将上一步创建好的 volume 挂载到 Nginx 容器中。
  11. # -v nginxHtml:/usr/share/nginx/html:将 nginxHtml 卷挂载到容器的 /usr/share/nginx/html 目录,用于存储 Nginx 的静态网页文件。
  12. # -v nginxConfig:/etc/nginx:将 nginxConfig 卷挂载到容器的 /etc/nginx 目录,用于存储 Nginx 的配置文件。
  13. # -v nginxLog:/var/log/nginx:将 nginxLog 卷挂载到容器的 /var/log/nginx 目录,用于存储 Nginx 的日志文件。
  14. # -d:表示以后台模式运行容器。
  15. # nginx:stable:指定要运行的镜像名称为 nginx 版本为 stable(第一步拉取的镜像)。
复制代码
3.2.2、容器创建乐成后,nginxConfig 数据卷中的文件理应大抵如下:

3.3、检察容器

  1. # 查看所有状态的容器
  2. docker ps -a
  3. # 查看正在运行的容器
  4. docker ps
  5. # 指定查看正在运行的容器
  6. docker ps | grep nginxOne
  7. # 指定查看正在运行的容器
  8. docker ps --filter name=nginxOne
  9. # 如果正在运行的容器中没有 nginxOne,那么你的容器多半创建失败了。
  10. # 需要执行删除容器,再重新创建。
  11. # 执行 logs 查看报错信息。
  12. docker logs nginxOne
复制代码


3.3、删除容器

  1. # 停止容器(运行中的容器需先停止再删除)
  2. docker stop nginxOne
  3. # 删除容器
  4. docker rm nginxOne
  5. # 删除容器(运行中的容器也会被删除)
  6. docker rm -f nginxOne
复制代码
4、防火墙

4.2、开放指定端口

  1. # nginx 默认 80 端口
  2. firewall-cmd --zone=public --add-port=80/tcp --permanent
复制代码
4.3、革新防火墙

  1. firewall-cmd --reload
复制代码
4.4、检察已开放端口

  1. firewall-cmd --zone=public --list-ports
复制代码
  ps:如果使用的是云服务器,记得去放行防火墙安全组;假造机玩家无视这条。
  5、测试

5.2、浏览器输入服务器 IP 所在,看见 nginx 欢迎页面,即完成安装。

5.3、如有疑问请留言、私信或添加最下方接洽方式。
6、默认配置文件详解

  1. # 查看配置文件
  2. cat /var/lib/docker/volumes/nginxConfig/_data/conf.d/default.conf
复制代码
  1. # listen 80:监听 80 端口。
  2. # listen [::]:80:同时支持 IPv4 和 IPv6 。
  3. # server_name localhost:监听你的 ip。
  4. server {
  5.     listen       80;
  6.     listen  [::]:80;
  7.     server_name  localhost;
  8. #-------------------------分割线---------------------------------------
  9.     # access_log:访问日志,记录所有访问这个服务器的请求。日志文件位置是     /var/log/nginx/host.access.log,使用的日志格式是main(通常在全局nginx.conf中定义)。
  10.     #access_log  /var/log/nginx/host.access.log  main;
  11. #-------------------------分割线---------------------------------------
  12.     # location /:表示处理根路径及其所有子路径的请求。
  13.     # root /usr/share/nginx/html:当请求时,Nginx从/usr/share/nginx/html目录寻找文件。
  14.     # index index.html index.htm:当请求时,Nginx从/usr/share/nginx/html目录下寻找到文件后,返回 index.html 或 index.htm 页面到浏览器。
  15.     location / {
  16.         root   /usr/share/nginx/html;
  17.         index  index.html index.htm;
  18.     }
  19. #-------------------------分割线---------------------------------------
  20.     # 根据响应码,返回指定的 html 文件到浏览器。
  21.     #error_page  404              /404.html;
  22.     # redirect server error pages to the static page /50x.html
  23.     #
  24.     error_page   500 502 503 504  /50x.html;
  25.     location = /50x.html {
  26.         root   /usr/share/nginx/html;
  27.     }
  28. #-------------------------分割线---------------------------------------
  29.     # location ~ \.php$:以 .php 结尾的请求,代理到 proxy_pass 地址。
  30.     # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  31.     #
  32.     #location ~ \.php$ {
  33.     #    proxy_pass   http://127.0.0.1;
  34.     #}
  35.     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  36.     #
  37.     #location ~ \.php$ {
  38.     #    root           html;
  39.     #    fastcgi_pass   127.0.0.1:9000;
  40.     #    fastcgi_index  index.php;
  41.     #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  42.     #    include        fastcgi_params;
  43.     #}
  44.     # deny access to .htaccess files, if Apache's document root
  45.     # concurs with nginx's one
  46.     #
  47.     #location ~ /\.ht {
  48.     #    deny  all;
  49.     #}
  50. }
复制代码



二、配置 Nginx(域名 HTTPS)

   ps:须要情况:
  1、云服务器。
  2、域名,并分析到此服务器。
  3、域名的 SSL 证书。
  1、创建新容器

  1. # 停止容器(否则端口占用)
  2. docker stop nginxOne
  3. # 或者删除容器
  4. docker rm -f nginxOne
  5. # 创建容器(注意:若要支持 Https 访问,需要再映射 443 端口。
  6. docker run \
  7.   --name nginxTwo \
  8.   -p 443:443 \
  9.   -p 80:80 \
  10.   -v nginxHtml:/usr/share/nginx/html \
  11.   -v nginxConfig:/etc/nginx \
  12.   -v nginxLog:/var/log/nginx \
  13.   -d nginx:stable
  14. # 查看是否成功运行、浏览器再测试是否能访问
  15. docker ps | grep nginxTwo
复制代码
2、SSL 文件

  1. # 新建目录、再将 pem、key 放入此目录
  2. mkdir -p /var/lib/docker/volumes/nginxConfig/_data/ssl
复制代码


3、配置修改

3.2、Nginx 一共分为 “主配置文件” 和 “站点配置目录”。


  • 主配置文件(全局配置):

    • 位置:/etc/nginx/nginx.conf
    • 通常不发起频仍修改 nginx.conf
    • 更改情况:调整工作进程数、修改全局的日记设置、启用或禁用某些全局模块等。

  • 站点配置文件:

    • 位置:/etc/nginx/conf.d/default.conf
    • 更改情况:修改服务器监听的端口号、修改站点的根目录、添加反向署理配置等。

  • 修改 default.conf 配置文件

    • 首先,我们通过官方文档知道了 nginx 容器的配置文件目录所在。
    • 随后,我们创建容器时,已经乐成将数据卷 “nginxConfig” 挂载到了 “etc/nginx”
    • 再后,通过 docker volume inspcet nginxConfig 命令,我们知道 “nginxConfig” 数据卷在本地的 “/var/lib/docker/volumes/nginxConfig/_data” 目录下。
    • 末了,我们修改 “/var/lib/docker/volumes/nginxConfig/_data/conf.d/default.conf ” 即可。
    • 修改:

        1. # 如果没有 vim,就用 vi; vi 用不了的话,就在电脑创建 default.conf 文件,配置好后上传服务器替换原文件;如果都不行的话,来跟我学炒饭吧。
        2. vim /var/lib/docker/volumes/nginxConfig/_data/conf.d/default.conf
        复制代码


  • 更改后的内容

      1. # 基本的配置,线上正式环境还需要增加其他配置
      2. server {
      3.     # 监听 443 端口和开启声明 SSL
      4.     listen       443 ssl;  
      5.     listen  [::]:443 ssl;
      6.     # 你的域名
      7.     server_name test.com;
      8.     # 注意:容器与宿主机是完全隔离的,
      9.     # 我们指向的路径要填写容器中的路径,而不是宿主机配置文件的路径。
      10.     # 你别问 “为什么证书文件在宿主机中,配置路径却写容器的路径,还能读取到宿主机中的文件”
      11.     # 因为爱啊(数据卷挂载)。
      12.     # SSL证书配置
      13.     ssl_certificate     /etc/nginx/ssl/sun.pem;
      14.     ssl_certificate_key /etc/nginx/ssl/sun.key;
      15.     # 不解释写法(上面有)
      16.     location / {
      17.         root   /usr/share/nginx/html;
      18.         index  index.html index.htm;
      19.     }
      20. }
      21. server {
      22.     listen       80;
      23.     listen  [::]:80;
      24.     # 你的域名
      25.     server_name test.com;
      26.     # HTTP请求重定向到HTTPS(要是有人非要输入 http 访问,强制重定向到 https)
      27.     return 301 https://$server_name$request_uri;
      28. }
      29. # 后端服务配置:
      30. # 如果请求的 url 前缀为 api,
      31. # 那么该请求将被转发到本地的 5210 端口,也就是后端服务。(需要保证后端服务部署在该服务器,并且端口相同)
      32. # location ^~/api/ {
      33. #        proxy_pass http://127.0.0.1:5210;
      34. #    }
      复制代码

  • 语法校验

      1. # 检测 nginx 配置是否正确
      2. docker exec nginxTwo nginx -t
      复制代码


  • 重载配置

      1. docker exec nginxTwo nginx -s reload
      复制代码

  • 防火墙(记得放开云服务器的安全组)

      1. # 开放 443 端口
      2. firewall-cmd --zone=public --add-port=443/tcp --permanent
      3. # 重新加载
      4. firewall-cmd --reload
      复制代码

4、测试



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表