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

Q.E.D.