nginx 架构#
- nginx采用的是多进程的方式工作的。
- nginx后台进程中包含一个master进程和多个worker进程,master进程主要用来管理worker进程,包含接收外界的信息。
- 将接收到的信号发送给各个worker进程,监控worker进程的状态,当worker进程出现异常退出后,会自动重新启动新的worker进程。
- worker进程则是专门用来处理用户请求的,各个worker进程之间是平等的并且相互独立,处理请求的机会也是一样的。
- 可以通过
ps -ef | grep nginx
查看nginx进程信息。
nginx 目录结构#
- conf 目录是nginx所有配置文件目录。
文件 |
说明 |
fastcgi.conf |
fastcgi相关配置文件 |
fastcgi.conf.default |
fastcgi.conf的备份文件 |
fastcgi_params |
fastcgi的参数文件 |
fastcgi_params.default |
fastcgi的参数备份文件 |
scgi_params |
scgi的参数文件 |
scgi_params.default |
scgi的参数备份文件 |
uwsgi_params |
uwsgi的参数文件 |
uwsgi_params.default |
uwsgi的参数备份文件 |
mime.types |
记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系 |
mime.types.default |
mime.types的备份文件 |
nginx.conf |
这个是Nginx的核心配置文件 |
nginx.conf.default |
nginx.conf的备份文件 |
koi-utf、koi-win、win-utf |
这三个文件都是与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码 |
- html 目录是nginx存放自带的两个静态的Html页面目录
文件 |
说明 |
50x.html |
50x 失败后的失败页面 |
index.html |
成功访问的默认首页 |
- logs 目录用于记录nginx服务启动后的日志文件。
文件 |
说明 |
access.log |
请求日志文件 |
error.log |
错误日志文件 |
nginx.pid |
记录 nginx PID |
- sbin 目录用于存放执行程序文件目录。
文件 |
说明 |
nginx |
控制Nginx的启动和停止命令的可执行文件 |
nginx 命令#
信号控制#
-
查看master进程的进程号ID:
ps -ef | grep nginx
命令。
- 通过 logs/nginx.pid 文件。
-
信号:调用命令 kill -signal PID
信号 |
说明 |
举例 |
TERM/INT |
立即关闭整个服务 |
kill -INT PID / kill -INT `cat /usr/local/nginx/logs/nginx.pid` |
QUIT |
“优雅"地关闭整个服务 |
kill -QUIT PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid` |
HUP |
重读配置文件并使用服务对新配置项生效 |
kill -HUP PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid` |
USR1 |
重新打开日志文件,可以用来进行日志切割 |
kill -USR1 PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid` |
USR2 |
平滑升级到最新版的nginx |
kill -USR2 PID / kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` |
WINCH |
所有子进程不在接收处理新连接,相当于给work进程发送QUIT指令 |
kill -WINCH PID /kill -WINCH `cat /usr/local/nginx/logs/nginx.pid` |
命令行#
- 通过 nginx -h 查看支持那些参数。
参数 |
说明 |
举例 |
-?,-h |
显示帮助信息 |
nginx -h |
-v |
打印版本号信息并退出 |
nginx -v |
-V |
打印版本号信息和配置信息并退 |
nginx -V |
-t |
测试nginx的配置文件语法是否正确并退出(常用) |
nginx -t |
-T |
测试nginx的配置文件语法是否正确并列出用到的配置文件信息然后退出 |
nginx -T |
-s |
信号(常用) |
nginx -s reload |
|
stop[快速关闭,类似于TERM/INT信号的作用] |
nginx -s stop |
|
quit[优雅的关闭,类似于QUIT信号的作用] |
nginx -s quit |
|
reopen[重新打开日志文件类似于USR1信号的作用] |
nginx -s reopen |
|
reload[类似于HUP信号的作用] |
nginx -s reload |
-p |
指定Nginx的prefix路径,(默认为: /usr/local/nginx/) |
常用指定自定义目录 |
-c |
指定Nginx的配置文件路径,(默认为: conf/nginx.conf) |
常用指定自定义文件 |
-g |
用来补充Nginx配置文件,向Nginx服务指定启动时应用全局的配置 |
|
docker-compose.yml#
version: '3.9'
services:
nginx:
image: nginx:1.20.2
container_name: nginx
privileged: true
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
#- ./docker/nginx/html:/usr/share/nginx/html
#- ./docker/nginx/cert:/etc/nginx/cert
#- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
#- ./docker/nginx/conf.d:/etc/nginx/conf.d
#- /app/docker/nginx/logs:/var/log/nginx
environment:
- TZ=Asia/Shanghai
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost" ]
interval: 30s
timeout: 10s
retries: 3
networks:
- default_net
networks:
default_net:
driver: bridge
- 启动命令。
$ docker-compose -p nginx up -d