基于docker实现的nginx服务
conf | ||
html | ||
docker-compose.yml | ||
nginx.sh | ||
README.md | ||
service.sh |
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.pem
和ali02_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服务。
本项目目录完全可以交给运维人员维护,前后端程序员只专注于各自的业务项目,由运维人员做好代理和转发。