先去docker镜像仓库查找关于nginx的镜像,选择一款合适的,本文使用的是官方镜像nginx:1.23.4-alpine3.17。文章主要介绍两种nginx安装配置方式,一种为docker-compose部署,一种是包管理器直接部署。
docker-compose部署
思路步骤
- 创建宿主机映射目录
- 新建nginx容器
- 复制容器内部文件到宿主机
- 销毁容器
- 重建新容器
创建映射目录
mkdir -p /root/nginx/conf 作为nginx.conf和conf.d存放目录
mkdir -p /root/nginx/html 作为html文件存放目录
mkdir -p /root/nginx/log 作为nginx日志存放目录
mkdir -p /root/nginx/certs 作为网站反代存放证书目录
新建nginx容器
新建一个nginx容器,端口号随意,容器运行后,使用http://IP地址+端口 测试是否成功。
docker run --name nginx-test -p 7900:80 -d nginx:1.23.4-alpine3.17
复制目录
把容器内的目录复制到宿主机,省去了自己配置,也减少了不必要的麻烦,当然,如果允许完全可以自己配置。
将容器nginx.conf文件复制到宿主机
docker cp nginx-test:/etc/nginx/nginx.conf /root/nginx/conf/
将容器conf.d文件夹下内容复制到宿主机
docker cp nginx-test:/etc/nginx/conf.d /root/nginx/conf/
将容器中的html文件夹复制到宿主机
docker cp nginx-test:/usr/share/nginx/html /root/nginx/
销毁容器
需要的重要目录已经完全复制到宿主机了,删除容器
docker stop nginx容器ID
docker rm nginx容器ID
重建新容器
cd /root/nginx && nano docker-compose.yml
#### yml配置如下
version: '3.8'
services:
nginx:
image: nginx:1.23.4-alpine3.17
container_name: my-nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /root/nginx/certs:/etc/nginx/certs
- /root/nginx/conf/conf.d:/etc/nginx/conf.d
- /root/nginx/log:/var/log/nginx
- /root/nginx/html:/usr/share/nginx/html
运行容器
docker-compose up -d
编辑/root/nginx/conf/conf.d/default.conf,把下面这段代码放入到最下方,根据自己的需求进行修改
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
server{
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /etc/nginx/certs/cert.pem;
ssl_certificate_key /etc/nginx/certs/key.pem; #证书路径
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://公网地址:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
包管理器部署
安装
apt install nginx
编辑/etc/nginx/sites-enabled/default文件,把下面这段代码放入到最下方,根据自己的需求进行修改
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
server{
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /etc/nginx/certs/cert.pem;
ssl_certificate_key /etc/nginx/certs/key.pem; #证书路径
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
写在最后
经过上述步骤,使用docker-compose安装nginx和使用包管理器安装nginx已经介绍完成,包管理器安装更为简单,但是却不能自己选择nginx版本,docker-compose部署方式相对复杂,但是灵活性更高。