常见的20道Nginx配置文件的面试题,你的会吗?

本篇文章介绍了20道常见的Nginx配置面试题及其解析,包括Nginx的配置文件名、调试模式、反向代理、负载均衡、HTTPS配置、常用模块、缓存、请求频率限制、URL重写、热部署、gzip压缩、文件上传大小限制、访问日志和错误日志、IP白名单或黑名单、静态文件缓存、运行状态和性能监控、WebSocket反向代理、HTTP Basic认证等方面。

1. Nginx 的配置文件名是什么?在哪里可以找到这个文件?

答案:Nginx 的配置文件名为 nginx.conf。这个文件通常可以在 /usr/local/nginx/conf/ 或 /etc/nginx/ 目录下找到。

2. 如何开启 Nginx 的调试模式?

答案:可以使用 Nginx 的 -g 参数来开启调试模式。比如:nginx -g ‘daemon off; master_process on;’
开启 Nginx 调试模式分为两步:

  1. 编译时添加调试选项
    在编译 Nginx 时,需要添加调试选项,以便在启动 Nginx 时开启调试模式。在编译命令中添加 --with-debug 参数即可。例如:
./configure --with-debug
make
sudo make install
  1. 启动 Nginx 调试模式
    启动 Nginx 时,需要在启动命令中添加 -g 参数,并指定调试等级。例如,下面的命令启动 Nginx 的调试模式,调试等级为2:
    sudo nginx -g “daemon off; debug_level 2;”
    在调试模式下,Nginx 会输出大量的调试信息,可以帮助我们定位问题。例如,以下是 Nginx 在调试模式下的输出信息:
2019/11/21 15:42:31 [debug] 50981#0: *1 accept: 127.0.0.1:63976 fd:4
2019/11/21 15:42:31 [debug] 50981#0: *1 epoll add event: fd:4 op:1 ev:80002001
2019/11/21 15:42:31 [debug] 50981#0: *1 malloc: 000000000189B830:1024
2019/11/21 15:42:31 [debug] 50981#0: *1 posix_memalign: 00000000018822A0:128 @16
2019/11/21 15:42:31 [debug] 50981#0: *1 http process request line
2019/11/21 15:42:31 [debug] 50981#0: *1 http request line: "GET / HTTP/1.1"
2019/11/21 15:42:31 [debug] 50981#0: *1 http uri: "/"
2019/11/21 15:42:31 [debug] 50981#0: *1 http args: ""
2019/11/21 15:42:31 [debug] 50981#0: *1 http exten: ""
2019/11/21 15:42:31 [debug] 50981#0: *1 http process request header line
2019/11/21 15:42:31 [debug] 50981#0: *1 http header: "User-Agent: curl/7.54.0"
2019/11/21 15:42:31 [debug] 50981#0: *1 http header: "Accept: */*"
2019/11/21 15:42:31 [debug] 50981#0: *1 http header: "Host: localhost:8080"
2019/11/21 15:42:31 [debug] 50981#0: *1 http header done

可以看到,每一条日志都包含调试信息的详细描述,对于诊断问题非常有帮助。

3. Nginx 配置中的 location 指令有哪些常用的参数?

答案:常用的参数包括:root、alias、proxy_pass、try_files、rewrite、fastcgi_pass、expires、add_header 等。
Nginx 配置中的 location 指令用于定义一个请求的 URI 地址和处理这个 URI 的方式。下面是一些常用的 location 指令参数和说明:

  1. location URI :匹配指定的 URI,例如:
location / {
       # 处理 /
   }
    location /hello {
       # 处理 /hello
   }
  1. location = URI :仅匹配完全等于指定 URI 的请求,例如:
location = /hello {
       # 处理 /hello,但不处理 /hello/xxx
   }
  1. location ~ regex :匹配正则表达式,例如:
location ~ \.php$ {
       # 处理所有以 .php 结尾的请求
   }
  1. location ~* regex :匹配正则表达式,不区分大小写,例如:
location ~* \.(jpg|jpeg|png|gif)$ {
       # 处理所有以 .jpg、.jpeg、.png 或 .gif 结尾的请求
   }
  1. location ^~ URI :普通字符串匹配,例如:
location ^~ /hello/ {
       # 处理所有以 /hello/ 开头的请求,但不处理 /hello
   }
  1. location /URI/ :前缀字符串匹配,例如:
location /static/ {
       # 处理所有以 /static/ 开头的请求
   }
  1. location / { ... } :处理其它请求,当所有其它的 location 都不匹配时使用,例如:
location / {
       # 处理其它请求
   }

以上是一些常用的 location 指令参数和示例。在实际配置中,经常会使用多种参数的组合来匹配不同的请求。

4. 如何配置 Nginx 的反向代理?

答案:可以通过 location 指令中的 proxy_pass 参数来配置反向代理。例如:location /api/ { proxy_pass http://localhost:8080; }
Nginx 的反向代理主要是通过 proxy_pass 指令来实现。下面是一个示例配置,将 Nginx 作为反向代理,将所有请求转发到本地的另一个 HTTP 服务器:

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

在这个示例中,当用户访问 example.com 时,Nginx 会将请求转发到本地的 HTTP 服务器,即 http://127.0.0.1:8080 。使用 proxy_set_header 指令可以设置一些 HTTP 请求头,这对于一些应用程序可能是必要的。
除了 proxy_pass 指令外,还有一些常用的反向代理指令,例如:

  • proxy_set_header :设置反向代理请求头;
  • proxy_connect_timeout :设置反向代理连接超时时间;
  • proxy_read_timeout :设置反向代理读取响应超时时间;
  • proxy_cache :启用反向代理缓存;
  • proxy_redirect :重定向反向代理请求。
    需要根据具体的业务需要选择适当的反向代理指令进行配置。

5. Nginx 如何实现负载均衡?有哪些常见的负载均衡策略?

答案:可以使用 Nginx 的 upstream 模块来实现负载均衡,常见的负载均衡策略包括轮询、IP hash、fair 等。
Nginx 实现负载均衡的方式有多种,其中常见的负载均衡策略包括:

  1. 基于轮询的负载均衡(默认策略):按照服务器列表顺序依次轮流处理请求。如下面的示例配置:
http {
  upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
  }
   server {
    listen 80;
    server_name example.com;
     location / {
      proxy_pass http://backend;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}
  1. 基于 IP 哈希的负载均衡:根据客户端 IP 地址的哈希值分配到指定的服务器。这样可以保证同一客户端的请求会被分配到同一台服务器上,适合有 Session 状态的应用。如下面的示例配置:
http {
  upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
  }
   server {
    listen 80;
    server_name example.com;
     location / {
      proxy_pass http://backend;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}
  1. 基于权重的负载均衡:根据服务器权重分配请求。如下面的示例配置:
http {
  upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com weight=3;
    server backend3.example.com weight=2;
  }
   server {
    listen 80;
    server_name example.com;
     location / {
      proxy_pass http://backend;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}

除了以上三种负载均衡策略外,Nginx 还支持更高级的负载均衡算法,如最小连接数、最快响应时间等。

6. Nginx 如何实现 HTTPS 的配置?

答案:可以通过配置 SSL 证书,启用 HTTPS。同时在 server 指令中配置 listen 443,将请求转发到 SSL 端口。
要配置 Nginx 支持 HTTPS,需要进行以下步骤:

  1. 申请 SSL 证书并获得证书文件(.crt)和私钥文件(.key)。
  2. 在 Nginx 的配置文件中添加 HTTPS 相关配置。例如,在 HTTP 服务器块中添加以下内容:
server {
     listen 443 ssl;
     server_name example.com;
     ssl_certificate /path/to/cert.crt;
     ssl_certificate_key /path/to/key.key;
     ...
   }

其中 listen 443 ssl; 表示监听 HTTPS 端口并启用 SSL 协议, ssl_certificatessl_certificate_key 分别指定 SSL 证书和私钥的路径。
3. 按需配置 SSL 支持的协议和加密算法,例如:

   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
   ssl_prefer_server_ciphers on;

这里配置支持的 SSL 协议为 TLSv1、TLSv1.1 和 TLSv1.2,支持的加密算法包括 ECDHE-RSA-AES128-GCM-SHA256 和 HIGH 级别的算法,禁用了不安全的算法和协议。
4. 重启 Nginx 服务以使配置生效。可以使用以下命令重启:

sudo service nginx restart
  1. 当用户访问 HTTPS 网站时,Nginx 将自动使用 SSL 协议和 SSL 证书,对数据进行加密和验证。

7. Nginx 可以使用哪些模块?请列举一些常用模块及其功能。

答案:Nginx 可以使用多个模块,常用的模块包括 cache、rewrite、access、gzip、ssl 等,这些模块实现了对缓存、URL 重写、访问控制、压缩和 HTTPS 等功能的支持。
Nginx 支持许多模块,这些模块可以扩展 Nginx 的功能。下面列举一些常用的模块及其功能:

  1. HTTP 模块:支持 HTTP 和 HTTPS 协议,包括反向代理、静态文件处理、压缩、缓存、负载均衡等功能。
  2. Stream 模块:支持 TCP 和 UDP 协议,包括反向代理、负载均衡、TCP 和 UDP 转发等功能。
  3. Upstream 模块:支持负载均衡,包括 Round Robin、ip_hash、least_conn 等算法。
  4. Cache 模块:支持缓存功能,可以对静态文件和动态内容进行缓存。
  5. Rewrite 模块:支持重写 URL,包括重定向、反向代理、隐藏 URL 等功能。
  6. SSL 模块:支持 HTTPS 协议和 SSL/TLS 加密,包括证书管理、加密套件配置等功能。
  7. Access 模块:支持访问控制,可以通过 IP 限制、HTTP 认证等方式控制访问。
  8. Gzip 模块:支持 Gzip 压缩,可以压缩 HTTP 响应,提高网站性能。
    下面是一个示例配置文件,其中包含了 Rewrite、SSL 和 Gzip 模块的配置:
http {
    server {
        listen       80;
        server_name  example.com;
         # Rewrite 模块配置,将所有 HTTP 请求重定向到 HTTPS
        location / {
            return 301 https://$server_name$request_uri;
        }
    }
     server {
        listen       443 ssl;
        server_name  example.com;
         # SSL 模块配置,指定证书和私钥文件的路径
        ssl_certificate      /path/to/certificate.crt;
        ssl_certificate_key  /path/to/private.key;
         # Gzip 模块配置,压缩 HTTP 响应
        gzip on;
        gzip_types text/plain text/css application/json application/javascript;
         location / {
            # 反向代理配置
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

在上面的示例中,首先配置了 Rewrite 模块,在 HTTP 的监听端口 80 上将所有请求都重定向到 HTTPS 上;然后在 HTTPS 的监听端口 443 上配置了 SSL 模块,指定证书和私钥文件的路径,并启用了 Gzip 模块以提高网站性能;最后在 location / 中配置了反向代理,将请求转发到本地的端口 8080,同时设置了 Host 和 X-Real-IP 等头部信息。

8. 如何配置 Nginx 的缓存功能?

答案:可以使用 proxy_cache_path 指令来配置缓存。同时在 location 指令中添加 proxy_cache 和 proxy_cache_bypass 参数来控制缓存逻辑。
要启用 Nginx 的缓存功能,需要使用 Cache 模块。以下是一个简单的示例配置文件,使用 Cache 模块对静态文件进行缓存:

http {
    # 定义缓存路径和缓存区大小
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache:10m inactive=60m;
    # 定义缓存文件的名称和缓存时间
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_valid 200 60m;
    # 定义缓存的文件类型和缓存大小
    proxy_cache_bypass $http_pragma;
    proxy_cache_revalidate on;
    proxy_cache_min_uses 1;
    proxy_cache_methods GET HEAD;
    # 静态文件的反向代理配置
    server {
        listen       80;
        server_name  example.com;
        location / {
            proxy_pass http://localhost:8080;
            # 启用缓存
            proxy_cache cache;
            proxy_cache_lock on;
            proxy_cache_bypass $http_pragma;    
            proxy_cache_valid 200 60m;
            # 设置头部信息
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

在上面的示例中,首先在 http 中定义了缓存路径和缓存区大小,然后设置了缓存文件的名称和缓存时间,接着定义了缓存的文件类型和缓存大小。在 location / 中启用了缓存并设置了各种缓存相关的参数,最后进行了反向代理的配置,将请求转发到本地的端口 8080,并设置了 Host 和 X-Real-IP 等头部信息。

9. Nginx 如何限制请求频率?

答案:可以使用 limit_req_zone、limit_req 和 limit_conn_zone 等指令来限制请求频率。

10. 如何在 Nginx 中实现 URL 重写?

答案:可以使用 rewrite 指令来实现 URL 重写。例如:rewrite /foo/(.*) /bar/$1 last。
在 Nginx 中,可以使用 rewrite 指令来实现 URL 重写,具体的实现方法如下:

  1. 打开 Nginx 的配置文件。一般位于 /etc/nginx/nginx.conf
  2. 在要进行 URL 重写的服务块中,使用 rewrite 指令来匹配和重写 URL。例如,要将所有的 HTTP 请求重写为 HTTPS,可以在 HTTP 服务器块中添加以下内容:
   server {
       listen 80;
       server_name example.com;
       rewrite ^(.*)$ https://$server_name$1 permanent;
       ...
   }

这里的 rewrite 指令将匹配 HTTP 请求中的所有内容,并将其重定向到相应的 HTTPS 请求上。
3. 保存配置文件,并重新加载 Nginx 配置以使更改生效。可以使用以下命令重新加载配置:

sudo service nginx reload
  1. 当用户访问 HTTP 网站时,Nginx 将使用 rewrite 指令将其自动重定向到 HTTPS 网站。
    此外, rewrite 指令还支持更复杂的 URL 重写规则,例如,可以使用正则表达式来匹配和重写 URL,或者使用变量和条件语句来控制 URL 重写行为。具体用法可参考 Nginx 官方文档中关于 rewrite 指令的说明。

11. Nginx 热部署的方式有哪些?

答案:Nginx 热部署的方式有两种,一种是使用 nginx -s reload 命令,另一种是使用 USR2 信号,例如:kill -USR2 nginx.pid。
Nginx 热部署主要分为两种方式:平滑重启和重新加载配置文件。下面分别给出示例代码。

  1. 平滑重启
    平滑重启是指在不影响正在处理的请求的情况下,重新加载新的 Nginx 可执行文件。它的步骤是:
  2. 启动一个新的 Nginx 进程;
  3. 新的 Nginx 进程开始接收新的请求,并将已经接收但未处理完的请求转发给旧的 Nginx 进程;
  4. 等旧的 Nginx 进程处理完所有已接收的请求后,结束旧的 Nginx 进程。
    平滑重启的代码示例如下:
# 重新编译 Nginx
cd /path/to/nginx/source/dir
make
make install
 # 发送 USR2 信号给 Nginx
kill -USR2 $(cat /path/to/nginx/pidfile)
 # 等待旧的 Nginx 进程结束
sleep 5
 # 向旧的 Nginx 进程发送 QUIT 信号
kill -QUIT $(cat /path/to/nginx/pidfile.oldbin)

在这个示例中,我们首先在源代码目录重新编译并安装 Nginx。然后,我们向 Nginx 进程发送 USR2 信号,这会使 Nginx 重读配置文件、打开新的日志文件并启动新的工作进程。在启动新的工作进程之后,新的 Nginx 进程开始接收新的请求,并将旧的请求转发给旧的 Nginx 进程进行处理。等旧的 Nginx 进程处理完所有已接收的请求后,我们再向它发送 QUIT 信号,使其优雅地退出。
2. 重新加载配置文件
重新加载配置文件是指在不重启 Nginx 的情况下,重新加载新的配置文件。它的步骤是:

  1. 编辑配置文件并检查语法是否正确;
  2. 向 Nginx 发送 HUP 信号。
    重新加载配置文件的代码示例如下:
vi /etc/nginx/nginx.conf
 # 检查配置文件语法
nginx -t
 # 向 Nginx 发送 HUP 信号
nginx -s hup

在这个示例中,我们首先使用编辑器编辑 Nginx 配置文件 /etc/nginx/nginx.conf ,然后使用 nginx -t 命令检查配置文件语法是否正确。最后,我们向 Nginx 发送 HUP 信号,这会使 Nginx 重新加载配置文件并按照新的配置运行。注意,重新加载配置文件不会影响正在处理的请求,但是如果配置文件中有语法错误或逻辑错误,可能会导致 Nginx 无法正常工作。

12. 如何配置 Nginx 的 gzip 压缩?

答案:可以使用 gzip on 指令来启用压缩,同时使用 gzip_types 指令来指定需要压缩的文件类型。
在 Nginx 中,可以通过配置开启 Gzip 压缩来提高网站性能,具体实现方法如下:

  1. 打开 Nginx 的配置文件。一般位于 /etc/nginx/nginx.conf
  2. 在 HTTP 块中添加以下配置:
gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_min_length 1024;
    gzip_comp_level 4;
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.";

其中:

  • gzip on; 表示启用 Gzip 压缩。
  • gzip_types 指定需要进行压缩的 MIME 类型。这里指定了常见的文本、样式、脚本和 XML 数据等类型。
  • gzip_min_length 指定要进行压缩的最小文件大小,这里指定了 1024 字节,即 1KB。
  • gzip_comp_level 设置压缩级别,范围是 1-9,数字越大压缩率越高,但压缩时间也越长。这里指定为 4。
  • gzip_vary 表示在响应头中添加 Vary: Accept-Encoding ,告诉浏览器使用 Gzip 压缩的版本。
  • gzip_disable 禁止 Gzip 压缩的浏览器类型,这里禁止了 Internet Explorer 6 及以下版本。
  1. 保存配置文件,并重新加载 Nginx 配置,使更改生效。可以使用以下命令重新加载配置:
    sudo service nginx reload
  2. 验证 Gzip 压缩是否生效。可以使用 Chrome 浏览器的开发者工具,查看 HTTP 请求和响应的头信息。如果响应头中包含了 Content-Encoding: gzip ,则表示该请求已经使用了 Gzip 压缩。

13. Nginx 如何实现限制文件上传大小?

答案:可以使用 client_max_body_size 指令来限制文件上传大小。
Nginx 可以通过 ngx_http_core_module 模块来限制文件上传大小。该模块中有一个指令叫做 client_max_body_size ,可以用来限制请求体的大小,从而限制文件上传大小。下面是一个示例配置,限制上传文件的大小为 10MB:

http {
  ...
  client_max_body_size 10m;
  ...
  server {
    ...
  }
}

这个配置中,我们将 client_max_body_size 设置为 10m ,表示最大可以上传 10MB 的文件。如果上传的文件大小超过了这个限制,Nginx 将会返回一个 413 状态码(请求实体过大)。
需要注意的是, client_max_body_size 指令只能在 httpserverlocation 段中使用,并且只能限制请求体的大小而不能限制单个文件的大小。如果需要限制单个文件的大小,可以考虑使用后端应用程序或者其他工具实现。

14. 如何配置 Nginx 的访问日志和错误日志?

答案:可以使用 access_log 和 error_log 指令来配置访问日志和错误日志。

15. 如何禁止访问某个目录或文件?

答案:可以使用 location 指令中的 deny all 参数来禁止访问某个目录或文件。
Nginx 可以通过 ngx_http_access_module 模块来实现禁止访问某个目录或文件的功能。可以通过如下配置来达到目的,以禁止访问 “/secret” 目录为例:

location /secret {
    deny all;
    return 404; #可选,返回404页面
}

我们可以通过这个配置来禁止访问 “/secret” 目录中的所有文件,如果有人试图访问该目录中的任何内容,则会返回 403 状态码或 404 状态码。需要注意的是,如果该目录中还有其他的文件和目录,这些文件和目录仍然可以被访问,因此需要在需要禁止访问的目录的具体配置中设置。
此外,还可以使用 ngx_http_rewrite_module 模块来简化配置,以禁止访问 “/secret” 目录为例:

location /secret {
    rewrite ^ /error/404.html break;
}

这里,所有对 “/secret” 目录的请求都会被重定向到 404 页面。需要注意的是,如果您选择这种方法,请确保 “/error/404.html” 文件存在并包含正确的内容。

16. Nginx 如何实现 IP 白名单或黑名单?

答案:Nginx 可以通过 ngx_http_access_module 模块来实现 IP 白名单或黑名单的功能。使用此模块可以设置允许或禁止访问的 IP 地址。
IP 白名单示例:

http {
    ...
    # 允许访问的 IP 地址列表
    allow     10.0.0.1;
    allow     10.0.0.2;
    deny      all; # 默认禁止所有访问
     # 其他配置项
    ...
}

IP 黑名单示例:

http {
    ...
    # 禁止访问的 IP 地址列表
    deny      10.0.0.3;
    deny      10.0.0.4;
    allow     all; # 默认允许所有访问
     # 其他配置项
    ...
}

可以根据需要设置适当的 IP 地址列表来实现白名单或黑名单的功能。注意要在所有配置项中添加此模块的配置。

17. 如何配置 Nginx 的静态文件缓存?

答案:可以使用 expires 指令来配置静态文件缓存时间,同时使用 add_header 指令来添加 Cache-Control 和 Expires 响应头。
在 Nginx 中配置静态文件缓存可以通过 expires 指令来实现。 expires 指令用于设置客户端缓存文件的过期时间,从而减少重复的 HTTP 请求。以下是一个简单的配置示例:

location /static {
    # 设置静态文件的根目录
    root /var/www/example.com;
    # 设置缓存时间为1小时
    expires 1h;
}

在这个示例中, location /static 表示只有 URL 路径以 /static 开头的请求才会匹配到这个配置块。 root 指令指定了静态文件的根目录,即所有以 /static 开头的请求都会在 /var/www/example.com 目录下查找对应的文件。 expires 指令指定了客户端缓存文件的过期时间,这里设置为1小时。
您还可以通过 add_header 指令添加 Cache-ControlPragma 头信息,进一步控制客户端缓存。例如:

location /static {
    root /var/www/example.com;
    expires 1h;
    add_header Cache-Control "public, max-age=3600";
    add_header Pragma public;
}

在这个示例中, Cache-Control 指令用于控制缓存行为, max-age=3600 表示资源在客户端缓存的最大时间为1小时。 Pragma 指令用于向老版本的 HTTP/1.0 客户端发送兼容的头信息。
需要注意的是,配置静态文件缓存要根据具体情况选择合适的过期时间,过短的时间会增加服务器负担,而过长的时间会导致客户端缓存过多而无法获取最新的文件。

18. 如何查看 Nginx 的运行状态和性能?

答案:可以使用 Nginx 的 status 模块,通过在配置文件中添加如下参数来启用:server { listen 127.0.0.1:8080; location /nginx_status { stub_status on; } }
好的,以下是更为详细的介绍:

  1. 查看 Nginx 进程是否在运行中
    使用 ps aux 命令可以查看当前系统上所有进程的信息,通过 grep 命令可以过滤出包含 nginx 关键字的进程。例如:
ps aux | grep nginx

如果 Nginx 进程在运行中,将会显示出与 Nginx 相关的进程信息,包括进程 ID、占用 CPU 的百分比、内存使用情况等。
2. 查看 Nginx 的版本信息
使用以下命令可查看当前安装的 Nginx 的版本信息:

nginx -v

该命令将会返回 Nginx 的版本号、编译信息等。
3. 查看 Nginx 的配置文件是否有语法错误
使用以下命令可检查 Nginx 配置文件是否有语法错误:

nginx -t

如果配置文件中存在语法错误,该命令将会提示错误信息,否则将会提示 configuration file syntax is ok
4. 查看 Nginx 的运行状态
使用以下命令可查看 Nginx 的运行状态:

systemctl status nginx

该命令将会返回 Nginx 的运行状态,包括是否在运行、进程 ID、最近一次启动时间等。
5. 查看 Nginx 的访问日志
使用以下命令可查看 Nginx 的访问日志:

tail -f /var/log/nginx/access.log

该命令将会显示 Nginx 访问日志的最新内容,适用于需要实时监测访问日志的情况。
6. 查看 Nginx 的错误日志
使用以下命令可查看 Nginx 的错误日志:

tail -f /var/log/nginx/error.log

该命令将会显示 Nginx 错误日志的最新内容,适用于需要实时监测错误日志的情况。
7. 查看 Nginx 的性能数据
可以使用 nginx_status 模块来获取 Nginx 的状态信息,该模块需要在 Nginx 的配置文件中进行配置。例如,在 http 服务器块中添加以下配置:

server {
    listen 80;
    server_name example.com;
    # 配置 nginx_status 模块
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1; # 允许本地访问
        deny all;
    }
    ...
}

然后,在浏览器中访问 http://example.com/nginx_status 即可查看 Nginx 的性能数据,包括活跃连接数、请求数、处理时间等。如果需要进行更加详细的监测,则可以使用一些第三方工具,如 top 命令、 iftop 命令等来监测 Nginx 的 CPU、内存、网络等性能数据。

19. Nginx 如何实现 WebSocket 的反向代理?

答案:可以添加如下配置来实现 WebSocket 的反向代理:location /ws/ { proxy_pass http://websocket_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection “upgrade”; }
在 Nginx 中使用反向代理实现 WebSocket 时需要设置相应的配置。下面是一个示例配置:

nginx
http {
    # WebSocket 配置
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
     upstream websocket {
        # WebSocket 服务器地址及端口
        server example.com:8888;
    }
     server {
        listen 80;
        server_name example.com;
         location / {
            # 反向代理 WebSocket
            proxy_pass http://websocket;
            proxy_set_header Host $host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_read_timeout 86400;
            proxy_http_version 1.0;
        }
    }
}

在这个示例配置中,我们使用了 map 指令将请求头 http_upgrade 映射为 upgradeclose ,以判断是否为 WebSocket 请求。使用 upstream 块定义 WebSocket 服务器的地址及端口。在 server 块中,我们将客户端的 WebSocket 请求通过 proxy_pass 配置转发到实际的 WebSocket 服务器。在 location 块中,设置了一些必须的请求头和参数,包括:

  • proxy_set_header Host $host :设置 Host 请求头,避免出现一些奇怪的问题;
  • proxy_set_header Upgrade $http_upgradeproxy_set_header Connection $connection_upgrade :将请求头 UpgradeConnection 设置为与客户端请求一致,以支持 WebSocket 连接;
  • proxy_read_timeout 86400 :设置超时时间为一天,以避免 WebSocket 连接超时;
  • proxy_http_version 1.0 :将协议版本设置为 HTTP/1.0 ,以避免 Nginx 默认使用 HTTP/1.1 引发的错误。
    这样配置后,客户端的 WebSocket 请求就会被 Nginx 反向代理到实际的 WebSocket 服务器,从而实现 WebSocket 通信。

20. 如何使用 Nginx 实现 HTTP Basic 认证?

答案:可以使用 auth_basic 指令来实现 HTTP Basic 认证。比如: location /secure/ { auth_basic “Restricted”; auth_basic_user_file /usr/local/nginx/conf/htpasswd; }

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面试官问到关于Nginx常见面试题时,以下是一些可能被问到的问题及其回答: 1. 什么是NginxNginx是一个高性能的开源Web服务器和反向代理服务器。它可以处理大量并发连接,并具有低内存消耗的特点,因此被广泛用于构建高性能的Web应用和服务。 2. Nginx的主要特点有哪些? Nginx的主要特点包括: - 高性能:Nginx采用异步非阻塞的事件驱动模型,能够处理大量并发连接。 - 负载均衡:Nginx可以作为反向代理服务器,实现负载均衡,将请求分发到多个后端服务器上。 - 高可靠性:Nginx具有自动故障恢复和热部署的能力,可以保证服务的高可用性。 - 动态模块化:Nginx支持动态加载模块,可以根据需要添加或删除功能模块。 - 可扩展性:Nginx可以通过添加第三方模块来扩展功能,满足不同场景的需求。 3. Nginx和Apache有什么区别? Nginx和Apache是两种常见的Web服务器软件,它们之间的区别包括: - 连接处理方式:Nginx采用异步非阻塞的事件驱动模型,而Apache采用多进程或多线程模型。 - 内存消耗:Nginx的内存消耗相对较低,适合处理大量并发连接;而Apache的内存消耗相对较高。 - 静态文件处理:Nginx在处理静态文件时效率更高,而Apache在处理动态内容和模块化方面更强大。 - 配置方式:Nginx配置文件相对简洁,语法更加简单易懂;而Apache的配置文件相对复杂。 4. 如何配置Nginx实现反向代理? 要配置Nginx实现反向代理,可以按照以下步骤进行: - 在Nginx配置文件中,使用`location`指令指定需要代理的请求路径。 - 使用`proxy_pass`指令指定代理的目标服务器地址。 - 可选地,可以使用`proxy_set_header`指令设置代理请求头信息。 - 保存配置文件并重新加载Nginx

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值