docker-nginx/README.md
2024-05-01 11:59:16 +08:00

112 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# docker-nginx
基于docker实现的nginx服务
## 使用方法
```sh
git clone https://git.wandoubaba.com/wandoubaba/docker-nginx.git
cd docker-nginx
docker compose up -d
```
服务启停方法
```sh
# 停止服务
./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`,文件内容参考如下:
```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`工具:
```sh
curl https://get.acme.sh | sh -s email=my@example.com
```
安装完成后需要退出终端重新进入一次。
接下来可以使用`acme.sh`命令实现证书自动化部署了,命令示例:
```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服务。
本项目目录完全可以交给运维人员维护,前后端程序员只专注于各自的业务项目,由运维人员做好代理和转发。