30个Nginx常问面试题
文章目录
- 1 请简述 Nginx 是什么以及它的主要用途?
- 2 请解释一下 Nginx 的工作原理?
- 3 请解释一下 Nginx 的反向代理是什么?
- 4 请解释一下 Nginx 的负载均衡是什么?
- 5 如何在 Nginx 中配置 SSL 证书?
- 6 请解释一下 Nginx 的 location 指令?
- 7 如何在 Nginx 中配置重定向?
- 8 如何在 Nginx 中配置访问日志和错误日志?
- 9 请解释一下 Nginx 的 gzip 压缩功能?
- 10 如何在 Nginx 中配置防盗链?
- 11 如何在 Nginx 中配置 IP 黑名单?
- 12 如何在 Nginx 中配置基于 IP 的访问限制?
- 13 如何在 Nginx 中配置 HTTP Basic 认证?
- 14 如何在 Nginx 中配置缓存?
- 15 如何在 Nginx 中优雅地重启或升级?
- 16 如何在 Nginx 中配置 WebSocket?
- 17 如何在 Nginx 中配置长连接?
- 18 如何在 Nginx 中配置 CORS?
- 19 如何在 Nginx 中配置 HTTP/2?
- 20 如何在 Nginx 中配置 FastCGI?
- 21 如何在 Nginx 中配置静态文件服务?
- 22 如何在 Nginx 中配置 HTTPS 强制跳转?
- 23 如何在 Nginx 中配置虚拟主机?
- 24 如何在 Nginx 中配置 URL 重写?
- 25 如何在 Nginx 中配置自定义 404 页面?
- 26 如何在 Nginx 中配置请求体大小限制?
- 27 如何在 Nginx 中配置请求超时时间?
- 28 如何在 Nginx 中配置响应头?
- 29 如何在 Nginx 中配置代理超时时间?
- 30 如何在 Nginx 中配置代理头部字段?
在当今的互联网时代,服务器的稳定性和高效性是保障服务质量的关键。Nginx,作为一款开源、高性能、稳定、简单且可扩展的 HTTP 和反向代理服务器,已经在全球范围内得到了广泛的应用。无论是作为负载均衡器,以保证系统的高可用性,还是作为 HTTP 服务器处理静态文件,或者作为反向代理服务器,Nginx 都展现出了其出色的性能和灵活的配置能力。因此,对 Nginx 的理解和掌握,对于网络工程师、系统管理员、后端开发者等角色来说,都是非常重要的。本文将为您详细解答关于 Nginx 的 30 个常问面试题,帮助您更好地理解和应用 Nginx。
nginx的使用场景可以参考这篇文章“Nginx八大应用场景及其配置指南”
请简述 Nginx 是什么以及它的主要用途?
Nginx 是一个开源的、高性能的、稳定的、简单的、可扩展的 HTTP 和反向代理服务器,也可以作为 IMAP/POP3/SMTP 服务的代理服务器。Nginx 用于服务器的负载均衡,它可以保证系统的高可用性,同时还可以作为 HTTP 服务器处理静态文件或者反向代理。
请解释一下 Nginx 的工作原理?
Nginx 使用了异步事件驱动的方式来处理请求,这使得 Nginx 在处理大量并发连接时,性能非常高。Nginx 由主进程和多个工作进程组成。主进程主要用于读取和评估配置文件,管理工作进程。工作进程则负责处理实际的请求。
请解释一下 Nginx 的反向代理是什么?
反向代理是 Nginx 的一项重要功能。它指的是 Nginx 服务器接收到客户端的请求后,将请求转发到后端的服务器上,然后再将后端服务器的响应结果返回给客户端。反向代理可以隐藏真实的服务器地址,提供负载均衡,加强网络安全等。
location / {
proxy_pass http://backend;
}
请解释一下 Nginx 的负载均衡是什么?
负载均衡是 Nginx 的另一项重要功能。它是通过将请求分发到多个服务器,以分散单一服务器的压力,提高系统的处理能力和可用性。
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
}
如何在 Nginx 中配置 SSL 证书?
在 Nginx 中配置 SSL 证书,需要在 server 块中指定 ssl_certificate 和 ssl_certificate_key。
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
请解释一下 Nginx 的 location 指令?
location 指令定义了如何处理特定类型的请求。location 可以根据请求的 URI 匹配不同的处理方式,例如反向代理、重定向、静态文件处理等。
location /images/ {
root /data;
}
如何在 Nginx 中配置重定向?
在 Nginx 中,可以使用 rewrite 或者 return 指令来配置重定向。
location /oldpath/ {
rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;
}
如何在 Nginx 中配置访问日志和错误日志?
在 Nginx 中,access_log 和 error_log 指令用于配置访问日志和错误日志。
http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
请解释一下 Nginx 的 gzip 压缩功能?
Nginx 的 gzip 功能可以压缩 HTTP 响应数据,减少数据的传输量,提高网络传输速度。
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}
如何在 Nginx 中配置防盗链?
在 Nginx 中,可以使用 valid_referers 和 if 指令来配置防盗链。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
valid_referers none blocked www.example.com example.com;
if ($invalid_referer) {
return 403;
}
}
如何在 Nginx 中配置 IP 黑名单?
在 Nginx 中,可以使用 allow 和 deny 指令来配置 IP 黑名单。
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
deny all;
}
如何在 Nginx 中配置基于 IP 的访问限制?
在 Nginx 中,可以使用 limit_req_zone 和 limit_req 指令来配置基于 IP 的访问限制。
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location / {
limit_req zone=one burst=5;
}
}
}
如何在 Nginx 中配置 HTTP Basic 认证?
在 Nginx 中,可以使用 auth_basic 和 auth_basic_user_file 指令来配置 HTTP Basic 认证。
location /secret/ {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/.htpasswd;
}
如何在 Nginx 中配置缓存?
在 Nginx 中,可以使用 proxy_cache_path、proxy_cache 和 proxy_cache_valid 指令来配置缓存。
http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cache_zone:10m;
server {
location / {
proxy_cache cache_zone;
proxy_cache_valid 200 1h;
proxy_pass http://backend;
}
}
}
如何在 Nginx 中优雅地重启或升级?
使用 Nginx 的信号管理命令,可以优雅地重启或升级 Nginx,不影响正在处理的请求。
# 重启
kill -HUP `cat /var/run/nginx.pid`
# 升级
kill -USR2 `cat /var/run/nginx.pid`
如何在 Nginx 中配置 WebSocket?
在 Nginx 中,可以使用 proxy_http_version、proxy_set_header 和 proxy_pass 指令来配置 WebSocket。
location /ws/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://backend;
}
如何在 Nginx 中配置长连接?
在 Nginx 中,可以使用 keepalive_timeout 和 send_timeout 指令来配置长连接。
http {
keepalive_timeout 60;
send_timeout 60;
}
如何在 Nginx 中配置 CORS?
在 Nginx 中,可以使用 add_header 指令来配置 CORS。
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
}
如何在 Nginx 中配置 HTTP/2?
在 Nginx 中,可以在 listen 指令中添加 http2 参数来配置 HTTP/2。
server {
listen 443 ssl http2;
server_name www.example.com;
}
如何在 Nginx 中配置 FastCGI?
在 Nginx 中,可以使用 fastcgi_pass、fastcgi_param 和 include 指令来配置 FastCGI。
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
如何在 Nginx 中配置静态文件服务?
在 Nginx 中,可以使用 root 和 index 指令来配置静态文件服务。
location / {
root /usr/share/nginx/html;
index index.html;
}
如何在 Nginx 中配置 HTTPS 强制跳转?
在 Nginx 中,可以使用 return 指令来配置 HTTPS 强制跳转。
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}
如何在 Nginx 中配置虚拟主机?
在 Nginx 中,可以通过配置多个 server 块来配置虚拟主机。
server {
listen 80;
server_name www.example1.com;
# ...
}
server {
listen 80;
server_name www.example2.com;
# ...
}
如何在 Nginx 中配置 URL 重写?
在 Nginx 中,可以使用 rewrite 指令来配置 URL 重写。
location / {
rewrite ^/user/(\d*)$ /user?id=$1;
}
如何在 Nginx 中配置自定义 404 页面?
在 Nginx 中,可以使用 error_page 指令来配置自定义 404 页面。
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
如何在 Nginx 中配置请求体大小限制?
在 Nginx 中,可以使用 client_max_body_size 指令来配置请求体大小限制。
http {
client_max_body_size 10m;
}
如何在 Nginx 中配置请求超时时间?
在 Nginx 中,可以使用 client_body_timeout、client_header_timeout 和 send_timeout 指令来配置请求超时时间。
http {
client_body_timeout 10;
client_header_timeout 10;
send_timeout 10;
}
如何在 Nginx 中配置响应头?
在 Nginx 中,可以使用 add_header 指令来配置响应头。
location / {
add_header X-Frame-Options SAMEORIGIN;
}
如何在 Nginx 中配置代理超时时间?
在 Nginx 中,可以使用 proxy_connect_timeout、proxy_send_timeout 和 proxy_read_timeout 指令来配置代理超时时间。
location / {
proxy_connect_timeout 10;
proxy_send_timeout 10;
proxy_read_timeout 10;
proxy_pass http://backend;
}
如何在 Nginx 中配置代理头部字段?
在 Nginx 中,可以使用 proxy_set_header 指令来配置代理头部字段。
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://backend;
}