Docker Compose部署Nginx
为什么要使用Docker Compose安装Nginx,因为Docker方便管理及配置环境等只需要一次即可发布多个环境例如:开发环境、测试环境、生产环境等。
接下来我们需要登录服务器并创建docker-compose.yml及目录:
本 Nginx
部署的是带 HTTPS
的需要创建 cert
证书目录在 root
目录下创建即可(当然不一定要在root目录下创建可以在其他路径创建后面再docker-compose.yml文件内指定即可)
这里默认登录的是root用户则直接在root用户的家目录下创建证书目录
mkdir cert # 用于存放域名证书
创建站点目录同样在root用户家目录也可以在其他地方创建后面改docker-compose.yml文件内的路径即可(web下面目录)
mkdir www
下面创建Nginx目录
mkdir nginx
cd nginx
mkdir conf.d
touch docker-compose.yaml # docker-compose文件
touch nginx.conf # Nginx全局配置文件
cd conf.d # 站点配置目录
touch default.conf # 这个文件是站点配置文件及一个站点
目录截图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUGfNays-1612577433471)(/uploads/docker/images/m_c591fb4ac6b29fe5092b90ceb130733b_r.png)]
编写配置文件
docker-compose.yml配置文件
vim docker-compose.yaml
version: "3"
services:
nginx:
image: nginx
ports:
- 80:80
- 443:443
volumes:
- ~/cert:/home/cert # HTTPS证书目录挂载到容器的home目录下
- ~/www:/home/www # 挂载宿主机上的www目录到容器里的home目录下方便发布web项目
- ./nginx.conf:/etc/nginx/nginx.conf
- ./conf.d/:/etc/nginx/conf.d/
- ./logs:/var/log/nginx # 把容器内的Nginx日志目录挂载到宿主机
#- ~/download:/home/download
- /etc/localtime:/etc/localtime:ro #配置容器时间同步
restart: always
container_name: nginx
nginx.conf配置文件
vim nginx.conf
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
# 开启和关闭gzip模式
gzip on;
# gizp压缩起点,文件大于1k才进行压缩
gzip_min_length 1k;
# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 9;
# 进行压缩的文件类型。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# nginx对于静态文件的处理模块,开启后会寻找以.gz结尾的文件,直接返回,不会占用cpu进行压缩,如果找不到则不进行压缩
gzip_static on;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 设置压缩所需要的缓冲区大小,以4k为单位,如果文件为7k则申请2*4k的缓冲区
gzip_buffers 2 4k;
# 设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.1;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
include /etc/nginx/conf.d/*.conf;
# 跨域配置
#add_header Access-Control-Allow-Origin *;
#add_header Access-Control-Allow-Headers X-Requested-With;
#add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
#server { # 配置IP跟未在conf.d目录下配置过站点的域名访问直接返回403
#listen 80 default_server;
#listen 443 ssl default_server;
#server_name _;
#ssl_certificate /home/cert/nikouer.com/nikouer.com.pem;
#ssl_certificate_key /home/cert/nikouer.com/nikouer.com.key;
#ssl_session_cache shared:SSL:1m;
#ssl_session_timeout 5m;
#ssl_ciphers HIGH:!aNULL:!MD5;
#ssl_prefer_server_ciphers on;
#return 403;
#}
}
default.conf配置文件
vim conf.d/default.conf
server {
listen 80;
server_name mqtian.com www.mqtian.com; # 配置访问的域名(站点域名)
rewrite ^(.*) https://$server_name$1 permanent; # HTTP-->HTTPS 即访问80端口时自动跳转443端口
}
server {
listen 443 ssl;
server_name mqtian.com www.mqtian.com;
charset utf-8;
access_log /var/log/nginx/mqtian.com.log; # 自定义日志输出
ssl_certificate /home/cert/mqtian.com/mqtian.com.pem; # SSL证书路径
ssl_certificate_key /home/cert/mqtian.com/mqtian.com.key; # SSL证书路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
#proxy_pass http://10.0.4.14:8662; # 后端地址
#client_max_body_size 10M;
#add_header Content-Security-Policy upgrade-insecure-requests; # 给站点http来源强制改变为https来源
#proxy_set_header Host $http_host; # Host包含客户端真实的域名和端口号
#proxy_set_header X-Real-IP $remote_addr; # X-Forwarded-Proto表示客户端真实的协议(http还是https)
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # X-Real-IP表示客户端真实的IP
#proxy_set_header X-Forwarded-Proto $scheme;
root /usr/share/nginx/html; # 发布web项目的目录
index index.html index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
启动Nginx
docker-compose up -d # 启动
docker-compose stop # 停止
docker-compose start # 启动
docker-compose restart # 重启
docker-compose down # 停止容器并移除
接下来就访问试试把
访问刚刚部署的域名站点 https://mqtian.com