Skip to content

docker nginx.conf 配置文件介绍和 include 指令介绍

docker 启动一个 nginx 服务

bash
docker run --name some-nginx -d -p 8080:80 nginx
  • docker run 命令用于运行一个新的 Docker 容器
  • --name some-nginx 指定容器的名称为 some-nginx
  • -d 以守护进程模式运行容器,即在后台运行
  • -p 8080:80 将容器内的 80 端口映射到宿主机的 8080 端口
  • nginx 使用的镜像名称,这里使用的是官方的 nginx 镜像

这是启动一个基于 nginx 的 Docker 容器,外部可以通过宿主机的 8080 端口访问到 nginx 服务。 这个服务在 Docker 容器内部运行,对外暴露 80 端口(容器内部的端口),而外部访问是通过宿主机的 8080 端口实现的。 这种映射机制允许容器内部的服务与外部环境进行交互。

docker 进入名称为 some-nginx 的容器

bash
docker exec -it some-nginx /bin/bash
  • docker exec 命令用于在运行中的容器内执行命令。
  • -it 参数组合使得命令以“交互模式”运行,并且分配一个伪终端。
  • some-nginx 是要进入的容器的名称或者 ID。
  • /bin/bash 是在容器中要执行的命令,这里是启动 bash shell 以便可以在容器内部执行更多命令。

查看 nginx 安装目录 /etc/nginx/

查看 /etc/nginx/ 目录

bash
ls /etc/nginx/

在 Docker 中使用的 Nginx 镜像,默认的安装目录通常是 /etc/nginx/。这个目录包含了所有 Nginx 的配置文件,以及一些子目录用于存放特定的配置和参数。

查看 /etc/nginx/conf.d/ 目录

ls /etc/nginx/conf.d/

这里是 /etc/nginx/ 目录中每个文件或文件夹的作用描述:

文件或目录作用描述
conf.d/包含 Nginx 的额外配置文件,通常用于存放各个虚拟主机的配置。通过这个目录可以轻松地添加或修改单独的站点配置。
fastcgi_params包含用于设置 FastCGI 进程的参数,FastCGI 是一种与语言无关、轻量级的通用协议,用于程序(如 PHP)与 Web 服务器(如 Nginx)之间通信。
mime.types定义了各种不同的文件类型与其对应 MIME 类型的映射。Nginx 使用这个文件来决定发送给客户端的 Content-Type 头部的值。
modules包含 Nginx 加载的动态模块。Nginx 的一些功能可以通过动态模块实现,以便根据需要加载或卸载,以增强灵活性和减少资源占用。
nginx.confNginx 的主配置文件,用于全局设置,包括工作进程的数量、监听端口、加载的模块以及其他全局的 HTTP 设置。
scgi_params包含用于设置 SCGI 协议的参数,SCGI 是简单的 CGI 协议,用于后端应用程序与 Web 服务器之间的接口。
uwsgi_params包含用于设置 uWSGI 服务器的参数,uWSGI 是一个 Web 服务器,它实现了 WSGI(Web Server Gateway Interface)协议、uwsgi(uWSGI 自己的协议)和 HTTP 协议。

conf.d/ 目录中的文件如下所示:

文件作用描述
default.conf默认的虚拟主机配置文件,用于配置默认的服务器响应和行为。

docker cp 拷贝容器的 nginx 目录到当前目录

bash
docker cp some-nginx:/etc/nginx/ ./

nginx.conf 配置文件介绍

Nginx 配置文件 nginx.conf 是 Nginx 服务器管理和运行的核心,它控制着 Nginx 的所有功能和行为。这个配置文件由多个指令和指令块组成,支持丰富的配置选项,比如服务器监听的端口、服务器的位置、处理请求的方式等。

配置文件所在位置

  • Windows:通常位于你解压 Nginx 的目录中的 conf 子目录,例如 C:\nginx-1.xx.x\conf\nginx.conf
  • Mac:如果你通过 Homebrew 安装 Nginx,配置文件一般位于 /usr/local/etc/nginx/nginx.conf
  • CentOS:在使用 yum 安装 Nginx 后,配置文件通常位于 /etc/nginx/nginx.conf
  • Docker Nginx:在使用官方 Nginx Docker 镜像时,配置文件位于容器内的 /etc/nginx/nginx.conf。你可以通过挂载卷的方式来修改或替换这个文件。

nginx.conf 文件内容

查看拷贝出来的 nginx.conf 文件

nginx
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
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  on;

    include /etc/nginx/conf.d/*.conf;
}

添加注释后的 nginx.conf 文件

nginx
# 定义运行Nginx服务器的用户,这里设为nginx
user  nginx;

# 设置Nginx可以启动的工作进程数,auto表示自动根据可用CPU核数来决定
worker_processes  auto;

# 配置错误日志的路径和日志级别
error_log  /var/log/nginx/error.log notice;

# 设置Nginx服务的PID文件路径
pid        /var/run/nginx.pid;

# events块用于配置Nginx服务器如何处理网络连接
events {
    # 设置每个worker进程最大连接数,默认为1024
    worker_connections  1024;
}

# http块用于设置HTTP服务器的配置
http {
    # 引入MIME类型映射文件,定义服务器如何处理不同类型的文件
    include       /etc/nginx/mime.types;

    # 设置默认的MIME类型,如果请求的文件类型未定义则使用此类型
    default_type  application/octet-stream;

    # 定义日志格式,名为main,包括访问者IP,访问者用户,请求时间等信息
    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;

    # 包含其他配置文件,通常用于加载sites-available里的站点配置
    include /etc/nginx/conf.d/*.conf;
}

nginx include 指令和 http 块中的 include /etc/nginx/conf.d/*.conf;介绍

  1. 作用
  • 加载额外配置:该 include 指令用于加载 conf.d/ 目录下所有以 .conf 结尾的文件。这允许系统管理员或开发者将 Nginx 的配置分散到多个文件中,以便于管理和维护。
  • 模块化配置:通过这种方式,可以将不同的虚拟主机配置、SSL 设置、重定向规则等分别存放在不同的配置文件中,从而保持主配置文件的简洁和高效。
  1. 效果
  • 自动整合:在 Nginx 启动或重新加载配置时,它会自动读取 conf.d/ 目录下的所有 .conf 文件,并将这些文件的内容视为 http 块的一部分。 这意味着在这些文件中定义的任何 server 块或其他指令都将被整合到 Nginx 的总体配置中。
  • 灵活性和扩展性:这种方法提高了配置的灵活性和可扩展性,使得部署新网站或应用、或者修改现有配置变得更加简单快捷。
  1. 使用场景
  • 虚拟主机配置:最常见的用途是定义不同的虚拟主机。例如,你可以为每个服务的每个域名创建一个单独的配置文件。
  • 环境特定配置:在不同的部署环境(如开发、测试、生产)中,可以通过更换不同的配置文件集来调整 Nginx 的行为。
  1. 示例

假设你有以下两个虚拟主机配置文件位于 conf.d/ 目录:

  • site1.conf
  • site2.conf

当 Nginx 处理 http 块时,它会读取这两个文件中的配置,就如同这些配置直接写在 http 块中一样。这种做法使得每个网站或应用的配置更加独立和模块化,同时也简化了维护任务。

  1. 管理和维护
  • 添加新站点:要添加新的虚拟主机,只需在 conf.d/ 目录下创建一个新的 .conf 文件即可。

  • 重新加载配置: 更改或添加配置文件后,需要重新加载 Nginx 配置以使更改生效,通常使用 nginx -s reload 命令。

    bash
    nginx -s reload

    或者使用 Docker 命令:

    bash
    docker exec <container_name> nginx -s reload
  1. 错误处理 建议在部署新配置前进行语法检查,使用命令 nginx -t 来验证配置文件的正确性。
    bash
    docker exec <container_name> nginx -t