Nginx 面試 40 問 記好了
回復(fù)架構(gòu)師獲取資源
大家好,我是你們的朋友架構(gòu)君,一個會寫代碼吟詩的架構(gòu)師。
'javajgs.com';
什么是Nginx? Nginx 有哪些優(yōu)點? Nginx應(yīng)用場景? Nginx怎么處理請求的? Nginx 是如何實現(xiàn)高并發(fā)的? 什么是正向代理? 什么是反向代理? 反向代理服務(wù)器的優(yōu)點是什么? Nginx目錄結(jié)構(gòu)有哪些? Nginx配置文件nginx.conf有哪些屬性模塊? cookie和session區(qū)別? 為什么 Nginx 不使用多線程? nginx和apache的區(qū)別 什么是動態(tài)資源、靜態(tài)資源分離? 為什么要做動、靜分離? 什么叫 CDN 服務(wù)? Nginx怎么做的動靜分離? Nginx負載均衡的算法怎么實現(xiàn)的?策略有哪些? 如何用Nginx解決前端跨域問題? Nginx虛擬主機怎么配置? location的作用是什么? 限流怎么做的? 漏桶流算法和令牌桶算法知道? Nginx配置高可用性怎么配置? Nginx怎么判斷別IP不可訪問? 在nginx中,如何使用未定義的服務(wù)器名稱來阻止處理請求? 怎么限制瀏覽器訪問? Rewrite全局變量是什么? Nginx 如何實現(xiàn)后端服務(wù)的健康檢查? Nginx 如何開啟壓縮? ngx_http_upstream_module的作用是什么? 什么是C10K問題? Nginx是否支持將請求壓縮到上游? 如何在Nginx中獲得當前的時間? 用Nginx服務(wù)器解釋-s的目的是什么? 如何在Nginx服務(wù)器上添加模塊? 生產(chǎn)中如何設(shè)置worker進程的數(shù)量呢? nginx狀態(tài)碼 省內(nèi)存空間
什么是Nginx?
跨平臺、配置簡單。 非阻塞、高并發(fā)連接:處理 2-3 萬并發(fā)連接數(shù),官方監(jiān)測能支持 5 萬并發(fā)。 內(nèi)存消耗小:開啟 10 個 Nginx 才占 150M 內(nèi)存。 成本低廉,且開源。 穩(wěn)定性高,宕機的概率非常小。 內(nèi)置的健康檢查功能:如果有一個服務(wù)器宕機,會做一個健康檢查,再發(fā)送的請求就不會發(fā)送到宕機的服務(wù)器了。重新將請求提交到其他的節(jié)點上
Nginx 應(yīng)用場景?
http服務(wù)器。Nginx是一個http服務(wù)可以獨立提供http服務(wù)。可以做網(wǎng)頁靜態(tài)服務(wù)器。 虛擬主機。可以實現(xiàn)在一臺服務(wù)器虛擬出多個網(wǎng)站,例如個人網(wǎng)站使用的虛擬機。 反向代理,負載均衡。當網(wǎng)站的訪問量達到一定程度后,單臺服務(wù)器不能滿足用戶的請求時,需要用多臺服務(wù)器集群可以使用nginx做反向代理。并且多臺服務(wù)器可以平均分擔(dān)負載,不會應(yīng)為某臺服務(wù)器負載高宕機而某臺服務(wù)器閑置的情況。 nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口網(wǎng)關(guān),對每個接口服務(wù)進行攔截。
Nginx 怎么處理請求的?
server { # 第一個Server區(qū)塊開始,表示一個獨立的虛擬主機站點
listen 80;# 提供服務(wù)的端口,默認80
server_name localhost; # 提供服務(wù)的域名主機名
location / { # 第一個location區(qū)塊開始
root html; # 站點的根目錄,相當于Nginx的安裝目錄
index index.html index.html; # 默認的首頁文件,多個用空格分開
} # 第一個location區(qū)塊結(jié)果首先,Nginx 在啟動時,會解析配置文件,得到需要監(jiān)聽的端口與 IP 地址,然后在 Nginx 的 Master 進程里面先初始化好這個監(jiān)控的Socket(創(chuàng)建 S ocket,設(shè)置 addr、reuse 等選項,綁定到指定的 ip 地址端口,再 listen 監(jiān)聽)。 然后,再 fork(一個現(xiàn)有進程可以調(diào)用 fork 函數(shù)創(chuàng)建一個新進程。由 fork 創(chuàng)建的新進程被稱為子進程 )出多個子進程出來。 之后,子進程會競爭 accept 新的連接。此時,客戶端就可以向 nginx 發(fā)起連接了。當客戶端與nginx進行三次握手,與 nginx 建立好一個連接后。此時,某一個子進程會 accept 成功,得到這個建立好的連接的 Socket ,然后創(chuàng)建 nginx 對連接的封裝,即 ngx_connection_t 結(jié)構(gòu)體。 接著,設(shè)置讀寫事件處理函數(shù),并添加讀寫事件來與客戶端進行數(shù)據(jù)的交換。 最后,Nginx 或客戶端來主動關(guān)掉連接,到此,一個連接就壽終正寢了。
Nginx 是如何實現(xiàn)高并發(fā)的?
什么是正向代理?
什么是反向代理?
反向代理總結(jié)就一句話:代理端代理的是服務(wù)端。
反向代理服務(wù)器的優(yōu)點是什么?
Nginx 目錄結(jié)構(gòu)有哪些?
tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp
├── conf # Nginx所有配置文件的目錄
│ ├── fastcgi.conf # fastcgi相關(guān)參數(shù)的配置文件
│ ├── fastcgi.conf.default # fastcgi.conf的原始備份文件
│ ├── fastcgi_params # fastcgi的參數(shù)文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types # 媒體類型
│ ├── mime.types.default
│ ├── nginx.conf # Nginx主配置文件
│ ├── nginx.conf.default
│ ├── scgi_params # scgi相關(guān)參數(shù)文件
│ ├── scgi_params.default
│ ├── uwsgi_params # uwsgi相關(guān)參數(shù)文件
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp # fastcgi臨時數(shù)據(jù)目錄
├── html # Nginx默認站點目錄
│ ├── 50x.html # 錯誤頁面優(yōu)雅替代顯示文件,例如當出現(xiàn)502錯誤時會調(diào)用此頁面
│ └── index.html # 默認的首頁文件
├── logs # Nginx日志目錄
│ ├── access.log # 訪問日志文件
│ ├── error.log # 錯誤日志文件
│ └── nginx.pid # pid文件,Nginx進程啟動后,會把所有進程的ID號寫到此文件
├── proxy_temp # 臨時目錄
├── sbin # Nginx命令目錄
│ └── nginx # Nginx的啟動命令
├── scgi_temp # 臨時目錄
└── uwsgi_temp # 臨時目錄Nginx 配置文件 nginx.conf 有哪些屬性模塊?
worker_processes 1;# worker進程的數(shù)量
events { # 事件區(qū)塊開始
worker_connections 1024;# 每個worker進程支持的最大連接數(shù)
} # 事件區(qū)塊結(jié)束
http { # HTTP區(qū)塊開始
include mime.types;# Nginx支持的媒體類型庫文件
default_type application/octet-stream;# 默認的媒體類型
sendfile on;# 開啟高效傳輸模式
keepalive_timeout 65;# 連接超時
server { # 第一個Server區(qū)塊開始,表示一個獨立的虛擬主機站點
listen 80;# 提供服務(wù)的端口,默認80
server_name localhost;# 提供服務(wù)的域名主機名
location / { # 第一個location區(qū)塊開始
root html;# 站點的根目錄,相當于Nginx的安裝目錄
index index.html index.htm;# 默認的首頁文件,多個用空格分開
} # 第一個location區(qū)塊結(jié)果
error_page 500502503504 /50x.html;# 出現(xiàn)對應(yīng)的http狀態(tài)碼時,使用50x.html回應(yīng)客戶
location = /50x.html { # location區(qū)塊開始,訪問50x.html
root html;# 指定對應(yīng)的站點目錄為html
}
}
......cookie 和 session 區(qū)別?
共同:
區(qū)別:
存放在客戶端瀏覽器 每個域名對應(yīng)一個cookie,不能跨躍域名訪問其他cookie 用戶可以查看或修改cookie http響應(yīng)報文里面給你瀏覽器設(shè)置 鑰匙(用于打開瀏覽器上鎖頭)
存放在服務(wù)器(文件,數(shù)據(jù)庫,redis) 存放敏感信息 鎖頭
為什么 Nginx 不使用多線程?
nginx和apache的區(qū)別

什么是動態(tài)資源、靜態(tài)資源分離?
為什么要做動、靜分離?
什么叫 CDN 服務(wù)?
Nginx 怎么做的動靜分離?
location /image/ {
root /usr/local/static/;
autoindex on;
}
步驟:
# 創(chuàng)建目錄
mkdir /usr/local/static/image
# 進入目錄
cd /usr/local/static/image
# 上傳照片
photo.jpg
# 重啟nginx
sudo nginx -s reloadNginx 負載均衡的算法怎么實現(xiàn)的?策略有哪些?
1 .輪詢(默認)
upstream backserver {
server 192.168.0.12;
server 192.168.0.13;
}2. 權(quán)重 weight
# 權(quán)重越高,在被訪問的概率越大,如上例,分別是20%,80%。
upstream backserver {
server 192.168.0.12 weight=2;
server 192.168.0.13 weight=8;
}3. ip_hash( IP綁定)
upstream backserver {
ip_hash;
server 192.168.0.12:88;
server 192.168.0.13:80;
}4. fair(第三方插件)
# 哪個服務(wù)器的響應(yīng)速度快,就將請求分配到那個服務(wù)器上。
upstream backserver {
server server1;
server server2;
fair;
}upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}如何用 Nginx 解決前端跨域問題?
Nginx 虛擬主機怎么配置?
基于虛擬主機配置域名
# 當客戶端訪問www.lijie.com,監(jiān)聽端口號為80,直接跳轉(zhuǎn)到data/www目錄下文件
server {
listen 80;
server_name www.lijie.com;
location / {
root data/www;
index index.html index.htm;
}
}
# 當客戶端訪問www.lijie.com,監(jiān)聽端口號為80,直接跳轉(zhuǎn)到data/bbs目錄下文件
server {
listen 80;
server_name bbs.lijie.com;
location / {
root data/bbs;
index index.html index.htm;
}
}基于端口的虛擬主機
# 當客戶端訪問www.lijie.com,監(jiān)聽端口號為8080,直接跳轉(zhuǎn)到data/www目錄下文件
server {
listen 8080;
server_name 8080.lijie.com;
location / {
root data/www;
index index.html index.htm;
}
}
# 當客戶端訪問www.lijie.com,監(jiān)聽端口號為80直接跳轉(zhuǎn)到真實ip服務(wù)器地址 127.0.0.1:8080
server {
listen 80;
server_name www.lijie.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}location的作用是什么?
注意:~ 代表自己輸入的英文字母

# 優(yōu)先級1,精確匹配,根路徑
location =/ {
return 400;
}
# 優(yōu)先級2,以某個字符串開頭,以av開頭的,優(yōu)先匹配這里,區(qū)分大小寫
location ^~ /av {
root /data/av/;
}
# 優(yōu)先級3,區(qū)分大小寫的正則匹配,匹配/media*****路徑
location ~ /media {
alias /data/static/;
}
# 優(yōu)先級4 ,不區(qū)分大小寫的正則匹配,所有的****.jpg|gif|png 都走這里
location ~* .*\.(jpg|gif|png|js|css)$ {
root /data/av/;
}
# 優(yōu)先7,通用匹配
location / {
return 403;
}限流怎么做的?
正常限制訪問頻率(正常流量) 突發(fā)限制訪問頻率(突發(fā)流量) 限制并發(fā)連接數(shù)
實現(xiàn)三種限流算法
1、正常限制訪問頻率(正常流量):
# 定義限流維度,一個用戶一分鐘一個請求進來,多余的全部漏掉
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
# 綁定限流維度
server{
location/seckill.html{
limit_req zone=zone;
proxy_pass http://lj_seckill;
}
}2、突發(fā)限制訪問頻率(突發(fā)流量):
# 定義限流維度,一個用戶一分鐘一個請求進來,多余的全部漏掉
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
# 綁定限流維度
server{
location/seckill.html{
limit_req zone=zone burst=5 nodelay;
proxy_pass http://lj_seckill;
}
}3、 限制并發(fā)連接數(shù)
http {
limit_conn_zone $binary_remote_addr zone=myip:10m;
limit_conn_zone $server_name zone=myServerName:10m;
}
server {
location / {
limit_conn myip 10;
limit_conn myServerName 100;
rewrite / http://www.lijie.net permanent;
}
}漏桶流算法和令牌桶算法知道?
漏桶算法

令牌桶算法

Nginx配置高可用性怎么配置?
server {
listen 80;
server_name www.lijie.com;
location / {
### 指定上游服務(wù)器負載均衡服務(wù)器
proxy_pass http://backServer;
###nginx與上游服務(wù)器(真實訪問的服務(wù)器)超時時間 后端服務(wù)器連接的超時時間_發(fā)起握手等候響應(yīng)超時時間
proxy_connect_timeout 1s;
###nginx發(fā)送給上游服務(wù)器(真實訪問的服務(wù)器)超時時間
proxy_send_timeout 1s;
### nginx接受上游服務(wù)器(真實訪問的服務(wù)器)超時時間
proxy_read_timeout 1s;
index index.html index.htm;
}
}Nginx怎么判斷別IP不可訪問?
# 如果訪問的ip地址為192.168.9.115,則返回403
if ($remote_addr = 192.168.9.115) {
return 403;
}在nginx中,如何使用未定義的服務(wù)器名稱來阻止處理請求?
怎么限制瀏覽器訪問?
## 不允許谷歌瀏覽器訪問 如果是谷歌瀏覽器返回500
if ($http_user_agent ~ Chrome) {
return 500;
}
Rewrite全局變量是什么?
$remote_addr //獲取客戶端ip
$binary_remote_addr //客戶端ip(二進制)
$remote_port //客戶端port,如:50472
$remote_user //已經(jīng)經(jīng)過Auth Basic Module驗證的用戶名
$host //請求主機頭字段,否則為服務(wù)器名稱,如:blog.sakmon.com
$request //用戶請求信息,如:GET ?a=1&b=2 HTTP/1.1
$request_filename //當前請求的文件的路徑名,由root或alias和URI request組合而成,如:/2013/81.html
$status //請求的響應(yīng)狀態(tài)碼,如:200
$body_bytes_sent // 響應(yīng)時送出的body字節(jié)數(shù)數(shù)量。即使連接中斷,這個數(shù)據(jù)也是精確的,如:40
$content_length // 等于請求行的“Content_Length”的值
$content_type // 等于請求行的“Content_Type”的值
$http_referer // 引用地址
$http_user_agent // 客戶端agent信息,如:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
$args //與$query_string相同 等于當中URL的參數(shù)(GET),如a=1&b=2
$document_uri //與$uri相同 這個變量指當前的請求URI,不包括任何參數(shù)(見$args) 如:/2013/81.html
$document_root //針對當前請求的根路徑設(shè)置值
$hostname //如:centos53.localdomain
$http_cookie //客戶端cookie信息
$cookie_COOKIE //cookie COOKIE變量的值
$is_args //如果有$args參數(shù),這個變量等于”?”,否則等于”",空值,如?
$limit_rate //這個變量可以限制連接速率,0表示不限速
$query_string // 與$args相同 等于當中URL的參數(shù)(GET),如a=1&b=2
$request_body // 記錄POST過來的數(shù)據(jù)信息
$request_body_file //客戶端請求主體信息的臨時文件名
$request_method //客戶端請求的動作,通常為GET或POST,如:GET
$request_uri //包含請求參數(shù)的原始URI,不包含主機名,如:/2013/81.html?a=1&b=2
$scheme //HTTP方法(如http,https),如:http
$uri //這個變量指當前的請求URI,不包括任何參數(shù)(見$args) 如:/2013/81.html
$request_completion //如果請求結(jié)束,設(shè)置為OK. 當請求未結(jié)束或如果該請求不是請求鏈串的最后一個時,為空(Empty),如:OK
$server_protocol //請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1,如:HTTP/1.1
$server_addr //服務(wù)器IP地址,在完成一次系統(tǒng)調(diào)用后可以確定這個值
$server_name //服務(wù)器名稱,如:blog.sakmon.com
$server_port //請求到達服務(wù)器的端口號,如:80Nginx 如何實現(xiàn)后端服務(wù)的健康檢查?
Nginx 如何開啟壓縮?
http {
# 開啟gzip
gzip on;
# 啟用gzip壓縮的最小文件;小于設(shè)置值的文件將不會被壓縮
gzip_min_length 1k;
# gzip 壓縮級別 1-10
gzip_comp_level 2;
# 進行壓縮的文件類型。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建議開啟
gzip_vary on;
}


1、圖片類型
2、大文件
ngx_http_upstream_module的作用是什么?
什么是C10K問題?
Nginx是否支持將請求壓縮到上游?
如何在Nginx中獲得當前的時間?
Proxy_set_header THE-TIME $date_gmt;
用Nginx服務(wù)器解釋-s的目的是什么?
如何在Nginx服務(wù)器上添加模塊?
生產(chǎn)中如何設(shè)置worker進程的數(shù)量呢?
nginx狀態(tài)碼
fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300;
fastcgi_buffer_size 32k; fastcgi_buffers 8 32k;
proxy_buffer_size 16k; proxy_buffers 4 16k;
將php-fpm.conf的0s的0s改成一個時間
文章來源:https://blog.csdn.net/wuzhiwei549/article/details/122758937
這些年小編給你分享過的干貨
2.優(yōu)質(zhì)ERP系統(tǒng)帶進銷存財務(wù)生產(chǎn)功能(附源碼)
3.優(yōu)質(zhì)SpringBoot帶工作流管理項目(附源碼)
5.SBoot+Vue外賣系統(tǒng)前后端都有(附源碼)

轉(zhuǎn)發(fā)在看就是最大的支持??
評論
圖片
表情
