🗺️博客地图
📍4、请解释ngx_http_upstream_module的作用是什么
📍5、请陈述stub_status和sub_filter指令的作用是什么
📍9、Nginx配置文件nginx.conf有哪些属性模块?
1、用Nginx服务器解释-s的目的是什么
Nginx服务器的-s参数主要用于发送信号给Nginx主进程,以便执行特定的操作。
具体来说,Nginx的-s参数可以用于发送不同的信号给主进程,执行不同的操作。例如:
-s reload
:重新加载配置文件,不会中断当前的处理过程。-s stop
:快速停止Nginx,但需要等待当前请求处理完毕。-s quit
:优雅地停止Nginx,等待所有请求处理完毕后停止。
这些操作使得管理员可以方便地管理Nginx服务,而不需要重启服务。例如,当需要更新配置文件时,可以使用-s reload
命令来重新加载配置,而不需要完全停止服务1。
2、解释如何在Nginx服务器上添加模块
在Nginx上添加模块通常意味着要编译Nginx源代码并包含额外的模块,在编译过程中,必须选择 Nginx 模块,因为 Nginx 不支持模块的运行时间选择。
添加模块通常是通过添加 --add-module 参数来指定模块路径:
./configure --add-module=../nginx-hello-world-0.1.0
3、在Nginx中,解释如何在URL中保留双斜线
在Nginx中,默认情况下,如果请求中包含两个或更多连续的斜线(//),Nginx会自动将其合并为一个斜线(/)。如果你想要在URL中保留双斜线,你可以通过配置Nginx来禁用这种行为。
以下是一个配置示例,展示了如何在Nginx中禁用URL中双斜线的合并:
server {
listen 80;
server_name example.com;
location / {
# 禁用自动合并双斜线
rewrite ^// into /;
# 以下是你的代理设置或其他配置
# ...
}
}
在这个配置中,rewrite ^// into /;
指令负责查找并替换所有连续的斜线为单斜线。这样配置后,Nginx将不再自动合并URL中的双斜线。
4、请解释ngx_http_upstream_module的作用是什么
ngx_http_upstream_module 用于定义可通过 fastcgi 传递、 proxy 传递、 uwsgi 传递、 memcached 传递和scgi传递指令来引用的服务器组,从而实现负载均衡和故障转移等功能。
- 负载均衡:当有很多人同时访问网站时,ngx_http_upstream_module可以将访问请求均匀地分发到多台服务器上,确保每台服务器都能得到合理的利用,从而避免某台服务器过载而其他服务器闲置的情况。
- 故障转移:如果其中一台服务器出现故障或无法处理请求,ngx_http_upstream_module可以检测到这个情况,并且自动将请求发送到其他可用的服务器上,确保网站的访问不会受到影响。
- 灵活配置:通过ngx_http_upstream_module,可以方便地添加、删除或修改后端服务器的配置。例如,增加一台新的服务器来分担负载,只需在upstream的配置中添加上这台服务器的相关信息即可。
配置示例
在Nginx配置文件中,可以通过以下方式定义一个upstream模块:
upstream myapp {
server 192.168.0.101 weight=3;
server 192.168.0.102;
server 192.168.0.103 backup;
}
在这个示例中:
server
指令定义了后端服务器。weight
参数指定了服务器的权重,权重越高,分配到的请求越多。backup
参数标记服务器为备用服务器,当其他服务器不可用时才会启用。
参数说明(拓展)
- weight:权重,默认为1,权重越高分配到需要处理的请求越多。
- max_conns:连接后端服务器的最大并发活动连接数。
- max_fails:失败尝试最大次数,超出此值时服务器将被标记为不可用。
- fail_timeout:后端服务器标记为不可用状态的连接超时时长。
- backup:将服务器标记为“备用”,即所有服务器均不可用时才启用。
- down:标记为“不可用”,实现灰度发布。
- keepalive:为每个worker进程保留的空闲的长连接数量,节约端口并减少连接管理的消耗。
- resolve:当server定义的是主机名时,自动应用新IP而不重启Nginx。
- 健康状态检测机制:包括interval、fails、passes、uri等参数,用于检测服务器的健康状态。
5、请陈述stub_status和sub_filter指令的作用是什么
- Stub_status 指令:该指令用于了解 Nginx 当前状态的当前状态,如当前的活动连接,接受和处理当前读/写/等待连接的总数。通过访问特定的URL,可以获取这些状态信息,帮助管理员了解Nginx的运行状态和性能表现。例如,通过
curl http://127.0.0.1/nginx-status
可以查看Nginx的状态页面,显示活跃的连接数、总共处理的连接数、读取和写入的请求数等信息。 - Sub_filter 指令:它用于搜索和替换响应中的内容,并快速修复陈旧的数据。这对于动态内容的修改非常有用,例如在部署过程中替换版本号、广告链接等。通过在Nginx配置文件中使用
sub_filter
指令,可以定义替换规则,实现对返回内容的动态修改。
配置方法
① 配置 stub_status 指令
server {
location /nginx-status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
然后重启Nginx服务,通过curl http://127.0.0.1/nginx-status
查看状态信息
① 配置 sub_filter 指令
server {
location / {
sub_filter 'old-string' 'new-string';
sub_filter_once off;
}
}
这样,当Nginx处理请求时,会将返回内容中的“old-string”替换为“new-string”
6、解释Nginx是否支持将请求压缩到上游
可以使用 Nginx 模块 gunzip 将请求压缩到上游,以减少带宽消耗。gunzip 模块是一个过滤器,它可以对不支持“gzip”编码方法的客户机或服务器使用“内容编码:gzip”来解压缩响应。gunzip 模块可以在请求和响应头中设置 Content-Encoding: gzip
。要配置 Nginx 以压缩发送给上游的请求,可以在 Nginx 配置文件中的相关 location
块或 server
块中添加以下指令:
http {
# 其他全局配置 ...
server {
listen 80;
server_name example.com;
location / {
# 将请求转发到上游服务器
proxy_pass http://upstream_server;
# 开启请求压缩
proxy_set_header Accept-Encoding 'gzip';
# 其他 proxy 相关配置 ...
}
}
# 其他 server 配置 ...
}
在这个配置中,所有发送到 /
路径的请求都会被 Nginx 以 gzip
压缩的形式发送到指定的上游服务器,上游服务器需要有能力处理 gzip
压缩的请求。
7、解释如何在Nginx中获得当前的时间
在Nginx中获取当前时间,可以通过Nginx的SSI模块内置变量$date_gmt
和$date_local
来实现。这两个变量分别代表了格林威治标准时间(GMT)和服务器的本地时间。
首先,确保Nginx编译时包含了SSI模块。然后,在Nginx配置文件中的server块中,启用SSI处理:
location /ssi {
ssi on; # 开启SSI支持
ssi_silent_errors on; # 默认为off,设置为on则在处理SSI文件出错时不输出错误信息
# ssi_types text/html; # 需要支持的shtml 默认是 text/html
}
注意Nginx的SSI指令格式:
<!--# config timefmt="%Y-%m-%d %H:%M:%S" -->
当前GMT时间: <!--# echo var="date_gmt" -->
当前本地时间: <!--# echo var="date_local" -->
注意:SSI在一些现代的服务器配置中已经不推荐使用,因为它可能带来安全风险,并且不支持复杂的脚本和模板标签。在实际的生产环境中,建议使用更现代的服务器端包含技术,如Jinja2、ERB或其他模板引擎来替代SSI。
8、Nginx目录结构有哪些?
[root@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp
├── conf # Nginx所有配置文件的目录
│ ├── fastcgi.conf # fastcgi相关参数的配置文件
│ ├── fastcgi.conf.default # fastcgi.conf的原始备份文件
│ ├── fastcgi_params # fastcgi的参数文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types # 媒体类型
│ ├── mime.types.default
│ ├── nginx.conf # Nginx主配置文件
│ ├── nginx.conf.default
│ ├── scgi_params # scgi相关参数文件
│ ├── scgi_params.default
│ ├── uwsgi_params # uwsgi相关参数文件
│ ├── uwsgi_params.default
│ └── win-utf ├── fastcgi_temp # fastcgi临时数据目录
├── html # Nginx默认站点目录
│ ├── 50x.html # 错误页面优雅替代显示文件,例如当出现502错误时会调 用此页面
│ └── index.html # 默认的首页文件
├── logs # Nginx日志目录
│ ├── access.log # 访问日志文件
│ ├── error.log # 错误日志文件
│ └── nginx.pid # pid文件,Nginx进程启动后,会把所有进程的ID号写到 此文件
├── proxy_temp # 临时目录
├── sbin # Nginx命令目录
│ └── nginx # Nginx的启动命令
├── scgi_temp # 临时目录
└── uwsgi_temp # 临时目录
9、Nginx配置文件nginx.conf有哪些属性模块?
worker_processes 1; # worker进程的数量
events { # 事件区块开始
worker_connections 1024; # 每个worker进程支持的最大连接数
} # 事件区块结束
http { # HTTP区块开始
include mime.types; # Nginx支持的媒体类型库文件
default_type application/octet-stream; # 默认的媒体类型
sendfile on; # 开启高效传输模式
keepalive_timeout 65; # 连接超时
server { # 第一个Server区块开始,表示一个独立的虚拟主机站点
listen 80; # 提供服务的端口,默认80
server_name localhost; # 提供服务的域名主机名
location / { # 第一个location区块开始
root html; # 站点的根目录,相当于Nginx的安装目录
index index.html index.htm; # 默认的首页文件,多个用空格分开
} # 第一个location区块结果
error_page 500 502 503 504 /50x.html; # 出现对应的http状态码时,使用50x.html回应客户
location = /50x.html { # location区块开始,访问 50x.html
root html; # 指定对应的站点目录为html
}
}
......
10、Nginx虚拟主机怎么配置?
- 基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
- 基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
- 基于ip的虚拟主机。
基于虚拟主机配置域名
需要建立/data/www、/data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析;对应域名网站目录下新增index.html文件;
#当客户端访问www.mz.com,监听端口号为80,直接跳转到data/www目录下文件
server {
listen 80;
server_name www.mz.com;
location / {
root data/www;
index index.html index.htm;
}
}
#当客户端访问bbs.mzcom,监听端口号为80,直接跳转到data/bbs目录下文件
server {
listen 80;
server_name bbs.mz.com;
location / {
root data/bbs;
index index.html index.htm;
}
}
基于端口的虚拟主机
使用端口来区分,浏览器使用域名或ip地址:端口号访问
#当客户端访问www.mz.com,监听端口号为8080,直接跳转到data/www目录下文件
server {
listen 8080;
server_name www.mz.com;
location / {
root data/www;
index index.html index.htm;
}
}
#当客户端访问www.mz.com,监听端口号为80,直接跳转到data/bbs目录下文件
server {
listen 80;
server_name www.mz.com;
location / {
root data/bbs;
index index.html index.htm;
}
}
基于Ip的虚拟主机
http {
# 其他全局配置...
server {
listen 192.168.1.100:80; # 监听特定IP地址和端口
server_name www.mz.com; # 虚拟主机的域名
# 根目录配置
location / {
root data/www;
index index.html index.htm;
}
# 其他配置...
}
# 可以添加更多基于IP的虚拟主机
server {
listen 192.168.1.101:80;
server_name bbs.mz.com;
location / {
root data/bbs;
index index.html index.htm;
}
# 其他配置...
}
# 更多配置...
}
修改nginx配置文件记得重新配置文件加载生效
nginx -s reload