当前位置:首页 > 技术文章 > 正文内容

关于Nginx的几个代表性面试问题

arlanguage5个月前 (12-20)技术文章35

1.什么是 Nginx?它有哪些主要的应用场景?

回答
Nginx 是一种高性能的开源 HTTP 和反向代理服务器,还可以用作 IMAP/POP3 邮件代理服务器。它的主要应用场景包括:

  • 反向代理:Nginx 常用于反向代理,能够缓存请求、分发流量,提高系统的稳定性和响应速度。
  • 负载均衡:通过多种负载均衡算法(如轮询、加权轮询、IP 哈希等),Nginx 能够在多台服务器之间分发流量,提升系统的吞吐量。
  • 静态资源服务:Nginx 具有高效的静态内容处理能力,能快速提供 HTML、CSS、JavaScript 等静态资源。
  • 动静分离:通过 Nginx 配置,可以将静态和动态资源分离,由 Nginx 处理静态资源,动态资源则转发给后端应用服务器(如 Node.js、Tomcat、Django 等)。
  • 安全过滤:Nginx 支持配置 IP 白名单、黑名单、限速等功能,可以过滤恶意流量,提升系统的安全性。

2.解释反向代理和正向代理的区别。

回答

  • 正向代理:指代理客户端访问外部资源。客户端将请求发送到代理服务器,代理服务器再访问目标服务器获取资源,之后返回给客户端。正向代理主要用于网络加速、跨区域访问、隐匿客户端真实 IP 等。
  • 反向代理:指代理服务器位于服务端,它接收客户端请求并将其转发到后端的真实服务器。客户端并不知道真正的服务端地址。反向代理可以用于负载均衡、安全过滤等。

场景区别
正向代理用于代理客户端访问,通常用于突破网络限制;反向代理用于隐藏后端服务,提升系统性能和安全性,常见的如使用 Nginx 做后端反向代理。


3.在 Nginx 中如何实现负载均衡?常用的负载均衡算法有哪些?

回答
Nginx 可以通过 upstream 指令实现负载均衡,将请求分发到多个后端服务器。常用的负载均衡算法包括:

  • 轮询(Round Robin):按顺序将请求分发到每个后端,适合所有后端性能相同的情况。
  • 加权轮询(Weighted Round Robin):根据服务器性能设置不同权重,性能高的服务器分配更多请求。
  • IP 哈希(IP Hash):根据客户端 IP 计算哈希值,将请求分配到特定的服务器,以便实现会话保持。
  • Least Connections:将请求分配给连接最少的服务器,适用于请求处理时间不均的情况。

配置示例

http {
    upstream my_backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        location / {
            proxy_pass http://my_backend;
        }
    }
}

4.Nginx 如何实现动静分离?

回答
动静分离是指将静态资源(如图片、CSS、JavaScript 文件)和动态资源(如 PHP、Python 生成的页面)分开处理。通常使用 Nginx 处理静态资源请求,动态请求则转发给后端应用服务器。可以通过配置不同的 location 路径实现。

配置示例

server {
    # 静态资源路径
    location /static/ {
        root /var/www/html;  # 静态资源目录
    }
    
    # 动态请求
    location / {
        proxy_pass http://backend_server;  # 反向代理到后端应用服务器
    }
}

5.Nginx 如何处理 502 Bad Gateway 错误?

回答
502 Bad Gateway 错误通常表示 Nginx 作为代理无法连接到后端服务器,原因可能包括以下几种:

  • 后端服务器不可达:检查后端服务器是否已启动,Nginx 配置的 IP 和端口是否正确。
  • 后端超时:后端处理时间过长导致超时,可以通过 proxy_connect_timeout、proxy_read_timeout 等配置增加超时时间。
  • 后端服务器超负荷:后端服务器负载过高,导致连接失败。可以考虑优化服务器性能或增加负载均衡节点。

优化配置示例

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        location / {
            proxy_pass http://backend;
            proxy_connect_timeout 5s;  # 连接超时
            proxy_read_timeout 10s;    # 读取超时
            proxy_send_timeout 10s;    # 发送超时
        }
    }
}

6.Nginx 如何配置 HTTPS?

回答
在 Nginx 中配置 HTTPS 需要 SSL 证书。常见步骤包括:

  1. 获取证书文件(通常包含 .crt 文件和 .key 文件)。
  2. 在 Nginx 配置中指定 SSL 证书路径,并开启 HTTPS。

HTTPS 配置示例

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;      # 证书路径
    ssl_certificate_key /etc/nginx/ssl/example.com.key;  # 私钥路径

    location / {
        root /var/www/html;
    }
}

附加优化

  • 使用 ssl_protocols、ssl_ciphers 等配置项禁用不安全协议和密码套件。
  • 配置 HSTS(HTTP Strict Transport Security)头部,提升安全性。

7.如何通过 Nginx 限制请求速率?

回答
Nginx 提供了 limit_req_zone 和 limit_req 指令,用于限制请求速率,以防止恶意请求或 DDoS 攻击。

配置示例

http {
    # 定义限速区域,1 秒内每个 IP 允许最多请求 10 次
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

    server {
        location / {
            limit_req zone=mylimit;  # 应用限速
            proxy_pass http://backend;
        }
    }
}

说明

  • limit_req_zone:定义限速区域,每个 IP 每秒最多可请求 10 次,存储空间为 10m。
  • limit_req:应用限速策略。

每天坚持学习一点点,不求有回报,只愿可以丰富自己!!!

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/367.html

标签: nginx 支持php
分享给朋友:

“关于Nginx的几个代表性面试问题” 的相关文章

Nginx配置可用参数

Nginx可用参数参数名称注释$arg_NAMEHTTP 请求中某个参数的值,如/index.html?name=zhangsan,可以用$arg_name 取得zhangsan$argsHTTP 请求中的完整参数。例如,在请求/index.html?id=1&name=zhangsan 中,$ar...

听说你的Nginx还不会记录Response Body?

相信大家都遇到过在排查线上问题或Debug的时候,在某一瞬间,特别想开启Nginx的Response Body日志,来帮助自己快速的定位问题;但找半天发现只有$request_body/$upstream_addr/$upstream_response_time这些相近变量可用;这个时候不要慌......

php高并发的瓶颈到底在哪

php高并发的瓶颈到底在哪?是同步阻塞?还是nginx+fpm不断创建-销毁进程资源过度消耗?高并发到底是什么问题,是语言问题嘛,为什么说php不适合高并发?求大佬指点从2009年后一直用lnmp,从5.2.17一直到现在的PHP7.4,做的项目无数个,大到日IP10W+、PV50W+的平台,小到日...

Nginx安装、启动、停止、重载、查看

Nginx介绍Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在开源BSD-like 协议下发行。特点是占有内存少,并发能力强。1、安装 Nginx程序yum install nginx -y 或 dnf install nginx -y2、n...

php手把手教你做网站(二十四)jquery ajax上传大的附件

上传大的附件分为两种情况,可以改变服务器配置;不能改变配置;第2种使用分片上传优势:可以突破服务器上传大小的限制,可以web存储上传到哪一块了,在浏览器关闭或者刷新的情况下可以断点续传;劣势:上传速度慢,在我本地电脑测试,200M的文件,改变配置按照正常方式上传大约需要12到15秒,但是使用第2种分...

Linux日志处理神器-Logrotate

Logrotate简介Logrotate是Linux中日志分割、压缩、清理的工具,一般CentOS默认都会安装该工具。logrotate运行原理logrotate依赖于anacron执行每小时、每天、每周或每月的定时任务,corn每个小时会扫描当前机器中定时任务执行状态。 logrotate运行依...