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.conf | Nginx 的主配置文件,用于全局设置,包括工作进程的数量、监听端口、加载的模块以及其他全局的 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;
介绍
- 作用
- 加载额外配置:该
include
指令用于加载conf.d/
目录下所有以.conf
结尾的文件。这允许系统管理员或开发者将 Nginx 的配置分散到多个文件中,以便于管理和维护。 - 模块化配置:通过这种方式,可以将不同的虚拟主机配置、SSL 设置、重定向规则等分别存放在不同的配置文件中,从而保持主配置文件的简洁和高效。
- 效果
- 自动整合:在 Nginx 启动或重新加载配置时,它会自动读取
conf.d/
目录下的所有.conf
文件,并将这些文件的内容视为http
块的一部分。 这意味着在这些文件中定义的任何server
块或其他指令都将被整合到 Nginx 的总体配置中。 - 灵活性和扩展性:这种方法提高了配置的灵活性和可扩展性,使得部署新网站或应用、或者修改现有配置变得更加简单快捷。
- 使用场景
- 虚拟主机配置:最常见的用途是定义不同的虚拟主机。例如,你可以为每个服务的每个域名创建一个单独的配置文件。
- 环境特定配置:在不同的部署环境(如开发、测试、生产)中,可以通过更换不同的配置文件集来调整 Nginx 的行为。
- 示例
假设你有以下两个虚拟主机配置文件位于 conf.d/
目录:
site1.conf
site2.conf
当 Nginx 处理 http
块时,它会读取这两个文件中的配置,就如同这些配置直接写在 http
块中一样。这种做法使得每个网站或应用的配置更加独立和模块化,同时也简化了维护任务。
- 管理和维护
添加新站点:要添加新的虚拟主机,只需在
conf.d/
目录下创建一个新的.conf
文件即可。重新加载配置: 更改或添加配置文件后,需要重新加载 Nginx 配置以使更改生效,通常使用
nginx -s reload
命令。bashnginx -s reload
或者使用 Docker 命令:
bashdocker exec <container_name> nginx -s reload
- 错误处理 建议在部署新配置前进行语法检查,使用命令 nginx -t 来验证配置文件的正确性。bash
docker exec <container_name> nginx -t