Docker nginx安装使用

拉取镜像

$ docker pull nginx

默认会拉取仓库名为nginx,tag为latest的镜像。

挂载nginx.conf文件

首次启动nginx容器

考虑到后面维护nginx配置文件nginx.conf的成本,这里采用docker 数据卷的技术,即将docker中的nginx.conf配置文件挂载到宿主机当中,后续只需要修改宿主机中的配置文件,就可以实现修改容器中nginx配置文件的目的。这里就是简单讲述了一下数据卷的作用。

那么这里面我为什么只强调了需要挂载配置文件,难道其他的比方html,logs文件夹数据不需要挂载吗?答案是当然需要,但这里我们只需要对于单独的文件挂载做一下特殊处理即可,对于文件夹的挂载,我们并不需要新建文件夹,再进行cp的操作,docker可以实现对文件夹的完美挂载(即容器中有html文件夹,但是宿主机没有,这样是没关系的直接执行挂载命令,docker会在宿主机创建对应的文件夹以及文件夹下面的文件)。

  1. 启动一个nginx容器

$ docker run --name mynginx -d -p 80:80 nginx
  1. 在宿主机中新建nginx.conf文件存放目录

$ mkdir -p /app/nginx/conf
  1. 拷贝docker容器nginx配置文件到宿主机目录下

$ docker cp mynginx:/etc/nginx/nginx.conf /app/nginx/conf
Preparing to copy...
Successfully copied 3.584kB to /app/nginx/conf
  1. 删除容器

$ docker rm -f mynginx

非首次启动nginx容器

找到正在运行的或者是退出状态的容器。

从【首次启动nginx容器】的目录下面的第二点开始操作即可。

启动容器

docker run --name mynginx -p 80:80 -p 443:443 \
-v /app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /app/nginx/html/:/usr/share/nginx/html \
-v /app/nginx/certs:/etc/nginx/certs \
-d --privileged=true nginx

注释版

docker run --name mynginx -p 80:80 -p 443:443 \ # 同时开始80和443端口
-v /app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ # 挂载容器nginx.conf文件到宿主机
-v /app/nginx/html/:/usr/share/nginx/html \ # 挂载容器html文件夹到宿主机,没有则会自动新建
-v /app/nginx/certs:/etc/nginx/certs \ # 挂载容器certs文件夹到宿主机,没有则会自动新建
-d --privileged=true nginx

配置SSL访问

  1. 找到自己域名服务商,并申请免费的SSL证书,下载对应nginx版本的证书,一共是两个文件,一个以pem结尾一个以key结尾。

  1. 将xxx.pem和xxx.key放在宿主机目录/app/nginx/certs下面,放置后,会自动挂载到容器内的对应目录下面去。

  1. 编辑/app/nginx/conf/nginx.config,在http模块下添加SSL配置

    http {

    server {
        listen    443 ssl;   #监听端口,ssl默认443端口。如果需要配置多个端口,可以继续添加server,用不同的端口就行
        server_name  www.lucfzy.com;   #服务器域名,需要和申请的证书匹配

        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;
    
        ssl_certificate /etc/nginx/certs/xxx.pem;             #证书路径
        ssl_certificate_key /etc/nginx/certs/xxx.key;         #请求认证 key 的路径

        location / {
            root  /usr/share/nginx/html;  #网站根目录,和容器创建时指定的位置一致
            index login;
        }
    }
}
  1. 重启docker nginx服务(使用热部署方式)

$ docker exec mynginx nginx -s reload
2023/03/11 10:23:55 [notice] 99#99: signal process started
  1. 访问域名

配置80端口强制跳转到443端口

修改80监听端口的配置

server {
    listen 80;
    server_name lucfzy.com www.lucfzy.com;
    rewrite ^(.*)$ https://${server_name}$1 permanent; 
}

此时浏览器访问http的普通链接就可以强制转跳到443的https的安全链接。

常见问题

  1. warn警告:the "ssl" directive is deprecated, use the "listen ... ssl" directive。

完整内容如下

2023/03/11 09:21:40 [warn] 37#37: the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/nginx.conf:34

nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/nginx.conf:34

解决:在nginx 1.15及以后的版本,不需要再写 ssl on; 的配置了,直接在listen 443中填写即可。

即将

listen 443;

修改为

listen 443 ssl;
  1. server模块代理动态资源proxy_pass接口转发502 bad gateway!

问题写法1

该写法的问题是ngxin找到的是docker容器内部的localhost,而不是宿主机,所以无法找到8090端口进行请求的正常转发,正确的方式应该使用域名或者公网ip地址。当然这里更推荐的是公网ip地址, 因为公网ip一般是不会变的,域名可能会申请多个,映射到同一台服务器上面。

问题写法2

这个写法的问题在于,指定了https本身就是443端口,然后又指定了8090相当于矛盾了,正确用法参考错误示例1中所说。

正确写法

热更新nginx容器

$ docker exec mynginx nginx -s reload

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于安装邮件服务器,你可以在 Docker 使用 Nginx 和其他相关组件来完成。以下是一些步骤供参考: 1. 首先,创建一个 Dockerfile 来构建你的自定义镜像。在文件添加以下内容: ``` FROM nginx RUN apt-get update && apt-get install -y \ postfix \ dovecot-imapd \ dovecot-pop3d \ opendkim \ opendkim-tools COPY nginx.conf /etc/nginx/nginx.conf COPY default.conf /etc/nginx/conf.d/default.conf ``` 2. 创建一个 nginx.conf 文件,用于配置 Nginx 的邮件代理。示例配置如下: ``` # 邮件代理配置 mail { server_name mail.yourdomain.com; auth_http 127.0.0.1:80/auth; proxy on; ssl_certificate /etc/nginx/ssl/mail.crt; ssl_certificate_key /etc/nginx/ssl/mail.key; imap_auth login plain; imap_capabilities "IMAP4rev1" "UIDPLUS" "IDLE" "LITERAL+" "SASL-IR" "AUTH=PLAIN" "AUTH=LOGIN"; imap_client_buffer 8192k; imap_proxy_timeout 3600s; pop3_auth login plain; pop3_capabilities "TOP" "USER" "UIDL" "RESP-CODES" "AUTH-RESP-CODE" "LOGIN-DELAY" "PIPELINING" "EXPIRE" "IMPLEMENTATION"; pop3_client_buffer 8192k; pop3_proxy_timeout 3600s; } ``` 3. 创建一个 default.conf 文件,用于配置 Nginx 的 HTTP 代理。示例配置如下: ``` server { listen 80; server_name mail.yourdomain.com; location /auth { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; } } ``` 4. 构建你的自定义镜像。 ``` docker build -t mail-server . ``` 5. 运行容器。 ``` docker run -d -p 80:80 -p 443:443 --name mail-container mail-server ``` 这样,你就可以在 Docker 安装了一个带有 Nginx 的邮件服务器。请注意,这只是一个基本的示例,你可能需要根据你的具体需求进行调整和配置。另外,确保你已经有一个域名并将其解析到你的服务器上,以便可以通过域名访问你的邮件服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值