nginx包含一个master进程和多个worker进程。master进程负责读取、执行配置并且管理维护worker进程。worker进程负责接收处理请求。nginx使用事件驱动模型(event-based)和依赖操作系统的(OS-dependent)机制高效地将请求分发给worker进程。工作进程的数量在配置文件中定义,可以针对给定的配置进行固定,也可以根据可用CPU内核的数量自动调整。
开启、停止和重新加载配置
nginx -s signal
signal 可以有如下选择
- stop 快速停止,即直接马上停止worker进程,不管其工作完成与否
- quit 优雅的停止,等待所有worker进程完成手头上工作再停止
- reload 重新加载配置文件
- reopen 重新加载日志文件
一旦master进程接收到signal信号,它会检验新配置文件的语法并尝试应用其中的配置。如果应用成功,master进程开启新的工作进程,并发送信息通知旧的worker进程可以退休了;否则master进程回滚配置的改变,按原来的配置继续工作。
worker进程退休过程?
- 停止接收新请求
- 服务好当前请求
- 退休
除此之外,linux环境可以使用kill命令将信号发送给nginx进程
kill -s QUIT pid
nginx的pid保存于nginx.pid;默认情况下,nginx.pid 位于 /usr/local/nginx/logs
或 /var/run
目录下。
ps
命令可以用于查看所有运行中的nginx进程
ps -ax | grep nginx
对于发送信号到nginx,如果你想了解更多,可以查看 控制nginx
配置文件的结构
nginx由多个模块组成,这些模块被在配置文件里所指定的指令控制。指令分为 简单指令和 块指令。简单指令包含以空格分离的名称和参数,以分号(;)作为结束标志。虽说结构一样,但块指令是以用花括号({})包围的一组指令结束。如果块指令可以包含其他指令,那么该块指令就称为上下文(context)(比如:events,http,server,location)
提供静态内容
#默认监听端口80
#root:根目录指令,后面跟目录路径
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
如果nginx未启动,则使用nginx -s start;否则使用nginx -s reload。
如果nginx没按预期工作, 可以从 /usr/local/nginx/logs
或 /var/log/nginx
下的 access.log
、error.log
查看原因。
配置一个简单的代理服务器
# 再开启一个nginx实例,监听8080端口
server {
listen 8080;
#全局root指令,适用于所有未指定root指令的location块指令
root /data/up1;
location / {
}
}
#修改前面的配置并reload
#通过访问localhost:80 nginx会代理访问 localhost:8080
server {
location / {
proxy_pass http://localhost:8080;
}
#匹配以.gif | .jpg | .png 结尾的uri
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
设置FastCGI代理
什么是FastCGI服务器?
使用任何框架和编程语言(比如PHP)构建的各类应用。
要与FastCGI服务器协作,nginx要使用的指令是 fastcgi_pass
而不是 prox_pass
。并且可以通过fastcgi_pass
指令设置一些参数。
# 顾名思义
# document_root 文档根路径,等价于 root指令的参数
# fastcgi_script_name 脚本的名称,比如index.php
# SCRIPT_FILENAME 脚本文件路径全称
# query_string 传递请求参数
server {
location / {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
网友评论