基于docker实现的nginx服务
Go to file
2024-07-13 09:26:15 +08:00
conf 更多配置文件落入宿主,增加certs目录和ssl配置示例 2024-04-14 11:51:00 +08:00
html html权限755 2024-04-14 11:25:28 +08:00
docker-compose.yml 镜像转为quay.io/wandoubaba517/nginx:1.27 2024-07-13 09:26:15 +08:00
README.md 增加SSL配置说明 2024-05-01 11:59:16 +08:00
service 完成一键启停、service脚本、README.md 2024-02-22 13:03:29 +08:00

docker-nginx

基于docker实现的nginx服务

使用方法

git clone https://git.wandoubaba.com/wandoubaba/docker-nginx.git
cd docker-nginx
docker compose up -d

服务启停方法

# 停止服务
./service stop
# 启动服务
./service start
# 重启服务service脚本中的容器名称要与docker-compose.yml文件中的容器名称对应
./service restart
# 重载配置
./service reload
# 服务状态
./service status

配置

  • docker-compose.yml中可以修改容器名称。
  • conf/conf.d/default.conf文件是默认站点的配置文件。
  • conf/conf.d/中可以创建多个站点的配置文件,注意相互之间的域名和端口号不要同时冲突。

SSL配置

以域名nice.ali02.wandoubaba.com为例。

创建文件conf/conf.d/nice.ali02.wandoubaba.com.conf,文件内容参考如下:

server {
    listen       443 ssl;
    server_name  ali02.wandoubaba.com;

    ssl_certificate /etc/nginx/certs/ali02_wandoubaba_com_cert.pem; # 证书文件路径
    ssl_certificate_key /etc/nginx/certs/ali02_wandoubaba_com_key.pem; # 私钥文件路径
 
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        # 下面这行可以解决vue网页刷新后404的问题但会将所有不存在的url转到index.html上
        # try_files   $uri    $uri/   /index.html last;
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

其中/etc/nginx/certs/这个路径是容器内的路径,对应宿主机中的conf/certs/目录,所以我们要确保在conf/certs目录内存在ali02_wandoubaba_com_cert.pemali02_wandoubaba_com_key.pem这两个文件。至于这两个文件的来源应该来自于SSL证书的提供商文件名和文件后缀或许会不同。

ACME自动部署SSL证书

下面我们以freessl.cn平台上的免费证书为例,可以通过acme实现证书自动化部署和续签,仍以nice.ali02.wandoubaba.com为例:

条件 具体值
证书平台 freessl.cn
域名 nice.ali02.wandoubaba.com
证书文件路径(宿主机上的绝对路径) /app/nginx/conf/certs/nice_ali02_wandoubaba_com_cert.pem
证书私钥文件路径(宿主机上的绝对路径) /app/nginx/conf/certs/nice_ali02_wandoubaba_com_key.pem

安装acme.sh工具:

curl https://get.acme.sh | sh -s email=my@example.com

安装完成后需要退出终端重新进入一次。

接下来可以使用acme.sh命令实现证书自动化部署了,命令示例:

acme.sh --install-cert \
-d nice.ali02.wandoubaba.com \
--key-file /app/nginx/conf/certs/nice_ali02_wandoubaba_com_key.pem  \
--fullchain-file /app/nginx/conf/certs/nice_ali02_wandoubaba_com_cert.pem \
--reloadcmd "/app/nginx/service reload"

最佳实践

建议不要在本项目的目录中加入任何业务文件本项目做为单独目录只提供nginx服务。

本项目目录完全可以交给运维人员维护,前后端程序员只专注于各自的业务项目,由运维人员做好代理和转发。