【面试全纪实 | Nginx 03】请回答,你真的掌握了Nginx吗?

🗺️博客地图

📍1、用Nginx服务器解释-s的目的是什么

📍2、解释如何在Nginx服务器上添加模块

📍3、在Nginx中,解释如何在URL中保留双斜线

📍4、请解释ngx_http_upstream_module的作用是什么

📍5、请陈述stub_status和sub_filter指令的作用是什么

📍6、解释Nginx是否支持将请求压缩到上游

📍7、解释如何在Nginx中获得当前的时间

📍8、Nginx目录结构有哪些?

📍9、Nginx配置文件nginx.conf有哪些属性模块?

📍10、Nginx虚拟主机怎么配置?


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_statussub_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     # 临时目录

9Nginx配置文件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虚拟主机怎么配置?

  1. 基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
  2. 基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
  3. 基于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子Linux

各位看官老爷,行行好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值