文章目录
Nginx 启动,停止和重新加载nginx.conf配置
-
nginx有一个主进程(master process)和几个工作进程(worker process)
-
主进程的主要目的是读取和评估nginx配置,以及维护工作进程
-
工作进程用于处理客户端发起的实际请求
-
工作进程的数量可以在 nginx.conf 配置文件中进行定义,并且可以针对给定的配置固定或自动调整为可用 CPU 内核的数量
-
nginx 及其模块的工作方式均在 nginx 配置文件中设置,Windows 系统中,nginx 配置文件位于 %nginx_home%/conf 目录下面。
配置了3个工作进程。 #user nobody; worker_processes 3;
-
nginx 一旦成功启动,就可以通过使用 -s 参数调用 nginx 可执行文件来控制它
-
nginx -s stop
:不管当前nginx是否正在处理请求,直接关闭 -
nginx -s quit
;不直接关闭,停止接受新的请求,等待所有旧的请求完成后,才关闭 -
nginx -s reload
:重新加载配置,使用新配置启动新的工作进程,(依旧处理旧的请求,新的请求使用新配置启动的工作进程),关闭旧的工作进程 -
nginx -s reopen
:重新打开日志文件 -
nginx -e filename
;指定nginx 的错误日志文件,默认为logs/error.log -
nginx -c filename
;指定nginx 的配置文件,默认为conf/nginx.conf
nginx 启动样例
-
停止 nginx 进程以等待工作进程完成当前请求的服务;
nginx -s quit
-
nginx -s quit
在启动nginx的同一用户下执行,即使用test用户启动,也需要test用户去执行上面命令 -
重新加载配置:
nginx -s reload
-
当主进程收到重新加载配置信号是,主进程会检查新配置文件的语法有效性,并加载应用其中的配置,如果成功,主进程启动新的工作进程并向旧的工作进程发送消息,请求它们关闭,如果失败,主进程将回滚更改并继续使用旧配置,旧的工作进程,接收到关闭命令,停止接受新连接并继续为当前请求提供服务,直到所有此类请求都得到服务。之后,旧的工作进程退出。
Nginx.conf 配置文件结构
-
nginx 由配置文件中指定的指令控制模块组成,指令分为简单指令和块指令
-
简单指令由名称和参数组成,并以空格分隔并以分号
;
结尾worker_processes 3; 定义工作进程数量为3
-
块指令与简单指令具有相同的结构,是一组由大括号
({ })
包围的附加指令结尾,而不是分号 -
在块指令中包含其他指令,称为上下文(例如:events、http、server 和 location)
-
定义一个 server 块指令,该指令中包含了 location 块指令
server { listen 8080; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } }
-
配置文件中放置在任何上下文之外的指令被认为是在主上下文中
-
events 和 http 指令驻留在主上下文中,server 在 http 中,location 在 server 中
worker_processes 3; events { worker_connections 1024; } http { # 我是一行注释 include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8080; server_name localhost; location / { root html; index index.html index.htm; } } }
Nginx 提供静态内容服务
-
要求根据客户端请求,从不同的本地目录提供文件:/data/www(可能包含 HTML 文件)和 /data/images(包含图像),此时需要编辑nginx.conf配置文件,并在http块内设置一个带有两个locations快的server块
-
打开 nginx.conf 配置文件。默认配置文件已经包含了 server 块的几个示例,大部分都被注释掉了。启动一个新的 server 块
-
通常配置文件可能包含多个server块,这些server块由它们所侦听的端口和服务器名称来区别,一旦nginx决定某个server处理请求,nginx就会根据 server 块中定义的 location 指令的参数测试请求标头中指定的 URI
-
server 块的结果配置
server { # 第一个location location / { root /data/www; } # 第二个location location /images/ { root /data; } }
-
第一个location 块指定与来自请求的 URI 相比的
“/”
前缀,对于匹配请求,URI 将被添加到 root 指令中指定的路径,即 /data/www,以形成本地文件系统上所请求文件的路径 -
如果有多个匹配的位置块,nginx 会选择前缀最长的那个。上面的位置块提供最短的前缀,长度为 1,因此只有当所有其他位置块都无法提供匹配时,才会使用此块
-
第二个location 块将匹配以 /images/ 开头的请求(位置 / 也匹配此类请求,但前缀较短)
server { # 第一个location location / { root /data/www; } # 第二个location location /images/ { root /data; } }
-
上述server块侦听标准端口80,并且可以在本地机器上访问 http://localhost/
-
为了响应以/images/开头的URL请求,服务器将从/data/images目录发送文件,例如,为了响应 http://localhost/images/example.png 请求,nginx 将发送 /data/images/example.png 文件。 如果这样的文件不存在,nginx 将发送一个响应,指示 404 错误。
-
URI 不以 /images/ 开头的请求将映射到 /data/www 目录
-
为了响应 http://localhost/some/example.html 请求,nginx 将发送 /data/www/some/example.html 文件。
-
要应用新配置,在 nginx 尚未启动时启动它,或者通过执行以下命令将重新加载信号发送到 nginx 的主进程
nginx -s reload
nginx 配置简单的代理服务器
-
配置一个基本的代理服务器,它为来自本地目录的文件的图像请求提供服务,并将所有其他请求发送到代理服务器
-
通过nginx的配置文件中添加一个server块定义代理服务器
# 简单代理服务器样例 server { listen 8080; root /data/up1; location / { } }
-
上述配置侦听端口8080,并将所有请求映射到本地文件系统上的/data/up1目录,并将index.html文件放入此目录中
-
请注意,root 指令位于服务器上下文中。当用于服务请求的 location 块不包含自己的 root 指令时,使用此类 root 指令
配置代理服务器
server {
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /data;
}
}
-
在第一个 location 块中,将 proxy_pass 指令与参数中指定的代理服务器的协议、名称和端口一起放置
-
修改第二个 location 块,该块当前将带有 /images/ 前缀的请求映射到 /data/images 目录下的文件,使其与具有典型文件扩展名的图像请求相匹配
location ~ \.(gif|jpg|png)$ { root /data/images; }
-
参数是一个正则表达式,匹配所有以 .gif、.jpg 或 .png 结尾的 URI,正则表达式应以 ~ 开头。相应的请求将映射到 /data/images 目录。
-
当 nginx 选择一个 location 块来服务请求时,它首先检查指定前缀的 location 指令,记住具有最长前缀的 location,然后检查正则表达式。如果与正则表达式匹配,则 nginx 选择此 location,否则,它选择之前记住的 location。
-
代理服务器的最终配置如下:
server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
-
该 server 将过滤以 .gif、.jpg 或 .png 结尾的请求,并将它们映射到 /data/images 目录(通过将 URI 添加到 root 指令的参数)并将所有其他请求传递到上面配置的代理服务器
-
重新加载配置,向 nginx 发送重新加载信号,即nginx -s reload
Nginx 配置 FastCGI 代理
什么是CGI?
- CGI 全称 “通用网关接口”(Common Gateway Interface),用于 HTTP 服务器与其它机器上的程序服务通信交流的一种工具,CGI 程序须运行在网络服务器上。
传统的CGI接口
- 传统CGI接口缺点是性能较差,因为每次HTTP服务器遇到动态程序时都需要重启解析器来执行解析,然后结果被返回给 HTTP 服务器
- 传统CGI接口处理方式并不使用高并发访问,而且传统CGI接口方式安全性也很差
FastCGI接口简介
- FastCGI是一个可伸缩的,高速在HTTP服务器和动态脚本语言见通信的接口
- FastCGI的主要优点是把动态语言和 HTTP 服务器分离开来
- 多数流行的 HTTP 服务器都支持 FastCGI,包括 Apache、Nginx
- FastCGI支持多种脚本语言
- FastCGI 接口方式采用 C/S 架构,可以将 HTTP 服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或多个脚本解析守护进程。当 HTTP 服务器每次遇到动态程序时,可以将其直接交付给 FastCGI 进程执行,然后将得到的结构返回给浏览器
- FastCGI 的执行方式可以让HTTP 服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端
FastCGI的特点
- FastCGI 是 HTTP 服务器和动态脚本语言间通信的接口或者工具、
- FastCGI 优点是把动态语言解析和 HTTP 服务器分离开来
- FastCGI 接口方式采用 C/S 架构,分为客户端(HTTP服务器)和服务端(动态语言解析服务器)
- HTTP 服务器通过 FastCGI 客户端和动态语言 FastCGI 服务端通信
Nginx 配置 FastCGI 服务
-
Nginx 可用于将客户端请求路由到 FastCGI 服务器
-
与 FastCGI 服务器一起使用的最基本的 nginx 配置包括使用 fastcgi_pass 指令而不是 proxy_pass 指令,以及 fastcgi_param 指令来设置传递给 FastCGI 服务器的参数
-
假设 FastCGI 服务器可在 localhost:9000 上访问,将 proxy_pass 指令替换为 fastcgi_pass 指令,并将参数更改为 localhost:9000
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; } }
-
设置一个 server,该 server 将通过 FastCGI 协议将除静态图像请求之外的所有请求路由到 localhost:9000 上运行的代理服务器。