柚子快報激活碼778899分享:運維 Nginx詳解
柚子快報激活碼778899分享:運維 Nginx詳解
文章目錄
概述Nginx的特點主要功能Nginx應用場景Nginx的架構什么是域名什么是反向代理什么是負載均衡高可用Nginx 配置文件詳解Nginx配置文件各個模塊說明Nginx實現(xiàn)多端口服務Nginx實現(xiàn)多域名服務uptream負載均衡常用配置項說明proxy_pass中url末尾帶/與不帶/的區(qū)別nginx比apache的優(yōu)點Nginx 反向代理為什么能夠提升服務器性能Nginx 多進程模型是如何實現(xiàn)高并發(fā)的
概述
Nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。由俄羅斯的程序設計師Igor Sysoev所開發(fā),官方測試nginx能夠支支撐5萬并發(fā)鏈接,并且cpu、內存等資源消耗卻非常低,運行非常穩(wěn)定。Nginx 是一款非常強大的 Web 服務器和反向代理服務器,其高效的事件驅動架構使其能夠輕松處理高并發(fā)請求。通過靈活的配置文件,Nginx 可以滿足多種需求,從簡單的靜態(tài)內容服務到復雜的負載均衡和反向代理。廣泛用于靜態(tài)內容服務、負載均衡、反向代理、緩存、以及作為 API 網關等。它以輕量級、高并發(fā)、高擴展性著稱,能夠處理大量的并發(fā)連接。
Nginx的特點
高性能:Nginx使用異步、非阻塞事件驅動模型,能夠高效地處理大量并發(fā)連接,相對于傳統(tǒng)的進程或線程模型,Nginx使用更少的內存和CPU資源。 高并發(fā):Nginx的官方測試顯示其能夠支撐高達5萬并發(fā)連接,這在同類型的網頁服務器中表現(xiàn)突出。 低資源消耗:在3萬并發(fā)連接下,Nginx開啟的10個進程僅消耗約150M內存。 穩(wěn)定性高:Nginx運行非常穩(wěn)定,適用于大型高并發(fā)網站、在線視頻、物聯(lián)網、云計算等場景。 模塊化設計:Nginx的功能通過模塊實現(xiàn),用戶可以根據(jù)需求加載不同的模塊,擴展性好。 豐富的功能:支持HTTP/2、反向代理、負載均衡、緩存、SSL/TLS、WebSocket等。
主要功能
靜態(tài)內容服務:Nginx 可以非常高效地提供靜態(tài)文件(如 HTML、CSS、JavaScript、圖片等)。由于其事件驅動架構,Nginx 能夠處理大量的并發(fā)請求,適合高流量的靜態(tài)內容網站。 反向代理:Nginx 可以作為反向代理,將客戶端請求轉發(fā)到后端服務器(如 Apache、Tomcat、Node.js 等)。Nginx 作為反向代理時可以處理 SSL 終止、負載均衡、緩存等任務。 負載均衡:Nginx 支持多種負載均衡策略,如輪詢、加權輪詢、IP 哈希等,可以在多臺后端服務器之間分發(fā)請求,從而提高應用的可用性和擴展性。 緩存:Nginx 支持對靜態(tài)和動態(tài)內容進行緩存,減少后端服務器的壓力,提高響應速度。 SSL/TLS 支持:Nginx 能夠處理 SSL/TLS 加密連接,提供安全的 HTTPS 服務,并且支持 SNI(Server Name Indication)用于托管多個 SSL 站點。 URL 重寫和重定向:Nginx 支持使用正則表達式進行 URL 重寫和重定向,這是 SEO 優(yōu)化和 URL 友好性的重要功能。 訪問控制:Nginx 支持基于 IP 地址的訪問控制列表(ACL),可以允許或拒絕對特定資源的訪問。 Gzip 壓縮:Nginx 支持對響應內容進行 Gzip 壓縮,減少數(shù)據(jù)傳輸量,提高網頁加載速度。 WebSocket支持:Nginx也支持WebSocket協(xié)議,可用于實時通信應用程序。 訪問控制和安全:Nginx可以使用訪問控制、基于IP地址的訪問限制等來提高服務器的安全性,有效保護Web應用程序和服務器。
Nginx應用場景
http服務器。Nginx是一個http服務可以獨立提供http服務??梢宰鼍W頁靜態(tài)服務器。 虛擬主機??梢詫崿F(xiàn)在一臺服務器虛擬出多個網站。例如個人網站使用的虛擬主機。 反向代理,負載均衡。當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集群可以使用nginx做反向代理。并且多臺服務器可以平均分擔負載,不會因為某臺服務器負載高宕機而某臺服務器閑置的情況。 Nginx因其性能優(yōu)異、高可靠性、豐富的模塊化支持和簡單易用等優(yōu)勢,被廣泛應用于靜態(tài)文件服務、反向代理和負載均衡、緩存服務器、SSL加速、WebSocket、訪問控制和安全等多種場景。在中國大陸,許多知名網站如百度、京東、騰訊、淘寶等都使用了Nginx作為其Web服務器或反向代理服務器。
Nginx的架構
Nginx采用模塊化設計,核心功能和擴展功能都通過模塊實現(xiàn)。模塊分為核心模塊、標準HTTP模塊和第三方模塊。Nginx的核心架構設計是其高性能和高可用性的關鍵,主要包括以下部分: 事件驅動模型:基于epoll(Linux)、kqueue(FreeBSD)等高效的I/O多路復用機制,實現(xiàn)事件的高效分發(fā)和處理。 Master-Worker進程模型: Master進程:負責管理Worker進程,處理信號和管理共享資源。 Worker進程:處理實際的請求,每個Worker進程獨立處理不同的連接,互不干擾,提高了并發(fā)處理能力和穩(wěn)定性。 Nginx如何處理HTTP請求。 Nginx使用反應器模式。主事件循環(huán)等待操作系統(tǒng)發(fā)出準備事件的信號,這樣數(shù)據(jù)就可以從套接字讀取,在該實例中讀取到緩沖區(qū)并進行處理。單個線程可以提供數(shù)萬個并發(fā)連接。
什么是域名
域名就是網站。www.baidu.com www.taobao.com www.jd.com Dns服務器:把域名解析為ip地址。保存的就是域名和ip的映射關系。 一級域名:Baidu.com,Taobao.com,Jd.com 二級域名:www.baidu.com,Image.baidu.com,Item.baidu.com 三級域名:1.Image.baidu.com,Aaa.image.baidu.com 一個域名對應一個ip地址,一個ip地址可以被多個域名綁定。
什么是反向代理
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發(fā)給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現(xiàn)為一個反向代理服務器。
反向代理服務器決定哪臺服務器提供服務。
返回代理服務器不提供服務器
兩個域名指向同一臺nginx服務器,用戶訪問不同的域名顯示不同的網頁內容。
兩個域名是www.sian.com.cn和www.sohu.com
nginx服務器使用虛擬機192.168.101.3
通過在upstream節(jié)點里面配置server(主機名+端口號確定唯一主機)實現(xiàn)反向代理;
什么是負載均衡高可用
nginx作為負載均衡器,所有請求都到了nginx,可見nginx處于非常重點的位置,如果nginx服務器宕機后端web服務將無法提供服務,影響嚴重。為了屏蔽負載均衡服務器的宕機,需要建立一個備份機。主服務器和備份機上都運行高可用(High Availability)監(jiān)控程序,通過傳送諸如“I am alive”這樣的信息來監(jiān)控對方的運行狀況。當備份機不能在一定的時間內收到這樣的信息時,它就接管主服務器的服務IP并繼續(xù)提供負載均衡服務;當備份管理器又從主管理器收到“I am alive”這樣的信息時,它就釋放服務IP地址,這樣的主服務器就開始再次提供負載均衡服務。 Nginx的負載均衡和高可用 通過keepalived+Nginx實現(xiàn)Nginx的高可用和負載均衡
Nginx 配置文件詳解
Nginx 的配置文件通常位于 /etc/nginx/nginx.conf,它采用層次化結構,通過塊(block)來組織配置項。以下是一個典型的 Nginx 配置文件示例, Nginx的配置文件nginx.conf位于其安裝目錄的conf目錄下。 nginx.conf由多個塊組成,最外面的塊是main,main包含Events和HTTP,HTTP包含upstream和多個Server,Server又包含多個location:具體結構如下所示 全局配置
user www-data; # Nginx 運行的用戶
worker_processes auto; # Nginx 進程數(shù),auto 表示自動選擇,通常為 CPU 核心數(shù)
error_log /var/log/nginx/error.log warn; # 錯誤日志路徑和級別
pid /var/run/nginx.pid; # PID 文件位置
#事件模塊配置
events {
worker_connections 1024; # 每個 worker 進程的最大連接數(shù)
use epoll; # 使用 epoll 事件驅動模型(Linux 下高效模型)
}
#HTTP 模塊配置
http {
include /etc/nginx/mime.types; # 文件擴展名與 MIME 類型映射表
default_type application/octet-stream; # 默認 MIME 類型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; # 訪問日志
sendfile on; # 開啟高效文件傳輸模式
keepalive_timeout 65; # 長連接超時時間
gzip on; # 開啟 Gzip 壓縮
gzip_disable "msie6"; # 禁用 IE6 的 gzip
# 虛擬主機配置
server {
listen 80; # 監(jiān)聽端口
server_name example.com www.example.com; # 服務器名稱(域名)
root /var/www/html; # 網站根目錄
index index.html index.htm; # 默認首頁文件
# 重寫規(guī)則
location / {
try_files $uri $uri/ =404;
}
# 靜態(tài)文件緩存設置
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
access_log off;
}
# 反向代理設置
location /api/ {
proxy_pass http://backend_server; # 后端服務器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 錯誤頁面
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
internal;
}
# SSL 配置示例(僅供參考)
listen 443 ssl;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
}
}
########### 每個指令必須有分號結束。#################
#user administrator administrators; #配置用戶或者組,默認為nobody nobody。
#worker_processes 2; #允許生成的進程數(shù),默認為1
#pid /nginx/pid/nginx.pid; #指定nginx進程運行文件存放地址
error_log log/error.log debug; #制定日志路徑,級別。這個設置可以放入全局塊,http塊,server塊,級別以此為:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #設置網路連接序列化,防止驚群現(xiàn)象發(fā)生,默認為on
multi_accept on; #設置一個進程是否同時接受多個網絡連接,默認為off
#use epoll; #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大連接數(shù),默認為512
}
http {
include mime.types; #文件擴展名與文件類型映射表
default_type application/octet-stream; #默認文件類型,默認為text/plain
#access_log off; #取消服務日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式
access_log log/access.log myFormat; #combined為日志格式的默認值
sendfile on; #允許sendfile方式傳輸文件,默認為off,可以在http塊,server塊,location塊。
sendfile_max_chunk 100k; #每個進程每次調用傳輸數(shù)量不能大于設定的值,默認為0,即不設上限。
keepalive_timeout 65; #連接超時時間,默認為75s,可以在http,server,location塊。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #熱備
}
error_page 404 https://www.baidu.com; #錯誤頁
server {
keepalive_requests 120; #單連接請求上限次數(shù)。
listen 4545; #監(jiān)聽端口
server_name 127.0.0.1; #監(jiān)聽地址
location ~*^.+$ { #請求的url過濾,正則匹配,~為區(qū)分大小寫,~*為不區(qū)分大小寫。
#root path; #根目錄
#index vv.txt; #設置默認頁
proxy_pass http://mysvr; #請求轉向mysvr 定義的服務器列表
deny 127.0.0.1; #拒絕的ip
allow 172.18.5.54; #允許的ip
}
}
}
Nginx配置文件各個模塊說明
全局塊:配置影響nginx全局的指令。一般有運行nginx服務器的用戶組,nginx進程pid存放路徑,日志存放路徑,配置文件引入,允許生成worker process數(shù)等。events塊:配置影響nginx服務器或與用戶的網絡連接。有每個進程的最大連接數(shù),選取哪種事件驅動模型處理連接請求,是否允許同時接受多個網路連接,開啟多個網絡連接序列化等。http塊:可以嵌套多個server,配置代理,緩存,日志定義等絕大多數(shù)功能和第三方模塊的配置。如文件引入,mime-type定義,日志自定義,是否使用sendfile傳輸文件,連接超時時間,單連接請求數(shù)等。server塊:配置虛擬主機的相關參數(shù),一個http中可以有多個server。location塊:配置請求的路由,以及各種頁面的處理情況。 user www-data;:指定 Nginx 運行的用戶。 worker_processes auto;:指定工作進程的數(shù)量。一般設為 CPU 的核心數(shù)或自動檢測。 事件模塊 worker_connections 1024;:指定每個工作進程可以同時處理的最大連接數(shù)。 use epoll;:指定使用 epoll 事件模型(適用于 Linux 系統(tǒng))。 HTTP 模塊 include /etc/nginx/mime.types;:包含 MIME 類型文件,用于文件類型識別。 log_format 和 access_log:配置訪問日志的格式和位置。 sendfile on;:啟用高效的文件傳輸機制。 keepalive_timeout 65;:保持連接的超時時間(秒)。 gzip on;:啟用 Gzip 壓縮。 虛擬主機(server block) server:定義一個虛擬主機,Nginx 可以通過配置多個 server 塊來管理多個站點。 listen 80;:監(jiān)聽端口號,80 為默認的 HTTP 端口。 server_name example.com www.example.com;:指定主機名稱(域名),支持多個名稱。 root /var/www/html;:指定網站的根目錄。 index index.html index.htm;:定義默認的主頁文件。 location 塊 location /:配置處理根路徑請求的規(guī)則,try_files $uri
u
r
i
/
=
404
;
表示嘗試訪問
U
R
I
,若文件不存在則返回
404
。
l
o
c
a
t
i
o
n
?
?
(
˙
j
p
g
∣
j
p
e
g
∣
p
n
g
∣
g
i
f
∣
i
c
o
∣
c
s
s
∣
j
s
)
uri/ =404; 表示嘗試訪問 URI,若文件不存在則返回 404。 location ~* \.(jpg|jpeg|png|gif|ico|css|js)
uri/=404;表示嘗試訪問URI,若文件不存在則返回404。location??(˙?jpg∣jpeg∣png∣gif∣ico∣css∣js):為特定文件類型(如圖片、CSS、JS)設置緩存期限,并關閉訪問日志。 location /api/:定義反向代理規(guī)則,將 /api/ 路徑的請求轉發(fā)到后端服務器。 錯誤頁面 error_page 404 /404.html;:指定自定義的 404 錯誤頁面。 SSL 配置 listen 443 ssl;:監(jiān)聽 443 端口并啟用 SSL。 ssl_certificate 和 ssl_certificate_key:指定 SSL 證書和密鑰文件。 ssl_protocols 和 ssl_ciphers:配置支持的 SSL/TLS 協(xié)議和加密算法。 常用命令 啟動 Nginx:sudo systemctl start nginx 停止 Nginx:sudo systemctl stop nginx 重啟 Nginx:sudo systemctl restart nginx 重新加載配置:sudo systemctl reload nginx 檢查配置文件語法:sudo nginx -t
Nginx實現(xiàn)多端口服務
眾所周知,一個Tomcat只能綁定一個端口,但是一個Nginx服務卻可以通過配置不同端口,來支持不同的訪問,具體步驟如下所示: 復制Nginx自帶的html文件夾,并命名為html2,作為一個單獨的訪問路徑,如下所示:
Nginx實現(xiàn)多域名服務
在網絡世界中,域名方便用戶記憶及傳播,且擁有有特殊的含義,代表一個獨一無二的服務。Nginx可以通過配置不同的域名來區(qū)分不同的服務,如下所示: 復制Nginx自帶的html文件夾,并命名為html3,作為一個單獨的訪問路徑,如下所示:
uptream負載均衡常用配置項說明
很多大型的網站中,ngixn常常作為反向代理sever負載上游web server結合高可用機制構建一個大型web集群,而要通過nginx構建這樣的一個集群,必然少不來nginx一個很重要的模塊:負載均衡模塊(upstream),如下所示為nginx負載均衡配置項介紹。 upstream 塊配置項說明 語法:upstream name {…} //指定負載均含name(名稱) 配置塊:http upstream塊定義了一個上游服務器的集群,便于反向代理中的proxy_pass使用。例如: upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; } server { location / { proxy_pass http://backend; } } 1.2 server 塊配置項說明 語法:server name [parameters]; 配置塊:upstream server配置項指定了一臺上游服務器的名字,這個名字可以是域名、IP地址端口、UNIX句柄等,在其后還可以跟下列參數(shù): weight=number:設置向這臺上游服務器轉發(fā)的權重,默認為1。 max_fails=number:該選項與fail_timeout配合使用,指在fail_timeout時間段內,如果向當前的上游服務器轉 發(fā)失敗次數(shù)超過number,則認為在當前的fail_timeout時間段內這臺上游服務器不可用。max_fails默認為1,如果設置為0,則表示 不檢查失敗次數(shù)。 fail_timeout=time:fail_timeout表示該時間段內轉發(fā)失敗多少次后就認為上游服務器暫時不可用,用于優(yōu)化反向代理功能。它與向上游服務器建立連接的超時時間、讀取上游服務器的響應超時時間等完全無關。fail_timeout默認為10秒。 down:表示所在的上游服務器永久下線,只在使用ip_hash配置項時才有用。 backup:在使用ip_hash配置項時它是無效的。它表示所在的上游服務器只是備份服務器,只有在所有的非備份上游服務器都失效后,才會向所在的上游服務器轉發(fā)請求。 例如 upstream backend { server backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; }
proxy_pass中url末尾帶/與不帶/的區(qū)別
注意:當location為正則表達式匹配模式時,proxy_pass中的url末尾是不允許有"/"的,因此正則表達式匹配模式不在討論范圍內。 測試地址:http://192.168.171.129/test/tes.jsp
場景一:
location ^~ /test/ {
proxy_pass http://192.168.171.129:8080/server/;
}
代理后實際訪問地址:http://192.168.171.129:8080/server/tes.jsp
場景二:
location ^~ /test {
proxy_pass http://192.168.171.129:8080/server/;
}
代理后實際訪問地址:http://192.168.171.129:8080/server//tes.jsp
場景三:
location ^~ /test/ {
proxy_pass http://192.168.171.129:8080/;
}
代理后實際訪問地址:http://192.168.171.129:8080/tes.jsp
場景四:
location ^~ /test {
proxy_pass http://192.168.171.129:8080/;
}
代理后實際訪問地址:http://192.168.171.129:8080//tes.jsp
proxy_pass配置中url末尾不帶/時,如url中不包含path,則直接將原uri拼接在proxy_pass中url之后;如url中包含path,則將原uri去除location匹配表達式后的內容拼接在proxy_pass中的url之后 測試地址:http://192.168.171.129/test/tes.jsp 場景一:
location ^~ /test/{
proxy_pass http://192.168.171.129:8080/server;
}
代理后實際訪問地址:http://192.168.171.129:8080/servertes.jsp
場景二:
location ^~ /test {
proxy_pass http://192.168.171.129:8080/server;
}
代理后實際訪問地址:http://192.168.171.129:8080/server/tes.jsp
場景三:
location ^~ /test/ {
proxy_pass http://192.168.171.129:8080;
}
代理后實際訪問地址:http://192.168.171.129:8080/test/tes.jsp
場景四:
location ^~ /test {
proxy_pass http://192.168.171.129:8080;
}
代理后實際訪問地址:http://192.168.171.129:8080/test/tes.jsp
nginx比apache的優(yōu)點
nginx 相對 apache 的優(yōu)點: 1)輕量級,同樣起 web 服務,比 apache 占用更少的內存及資源 2)抗并發(fā),nginx 處理請求是異步非阻塞的,而 apache 則是阻塞型的,在高并發(fā)下 nginx 能保持 3)低資源低消耗高性能 4)高度模塊化的設計,編寫模塊相對簡單 5)社區(qū)活躍,各種高性能模塊出品迅速啊 apache 相對 nginx 的優(yōu)點: 1)rewrite,比 nginx 的 rewrite 強大 2)模塊超多,基本想到的都可以找到 3)少 bug,nginx 的 bug 相對較多 4)超穩(wěn)定,一般來說,需要性能的 web 服務,用 nginx 。 如果不需要性能只求穩(wěn)定,那就 apache 吧。
Nginx 反向代理為什么能夠提升服務器性能
對于后端是動態(tài)服務來說,比如 Java 和 PHP。這類服務器(如 JBoss 和 PHP-FPM)的 IO 處理能力往往不高。 Nginx 有個好處是它會把 Request 在讀取完整之前 buffer 住,這樣交給后端的就是一個完整的 HTTP 請求,從而提高后端的效率,而不是斷斷續(xù)續(xù)的傳遞(互聯(lián)網上連接速度一般比較慢)。 同樣,Nginx 也可以把response 給 buffer 住,同樣也是減輕后端的壓力。
Nginx 多進程模型是如何實現(xiàn)高并發(fā)的
進程數(shù)與并發(fā)數(shù)不存在很直接的關系。這取決取 server 采用的工作方式。如果一個 server 采用一個進程負責一 個 request 的方式,那么進程數(shù)就是并發(fā)數(shù)。那么顯而易見的,就是會有很多進程在等待中。等什么?最多的應該是等待網絡傳輸。 Nginx 的異步非阻塞工作方式正是利用了這點等待的時間。在需要等待的時候,這些進程就空閑出來待命了。因 此表現(xiàn)為少數(shù)幾個進程就解決了大量的并發(fā)問題。 apache 是如何利用的呢,簡單來說:同樣的 4 個進程,如果采用一個進程負責一個 request 的方式,那么,同時進來 4 個 request 之后,每個進程就負責其中一個,直至會話關閉。期間,如果有第 5 個 request 進來了。就無法及時反應了,因為 4 個進程都沒干完活呢,因此,一般有個調度進程,每當新進來了一個 request,就新開個進程來處理。 nginx 不這樣,每進來一個 request,會有一個 worker 進程去處理。但不是全程的處理,處理到什么程度呢?處理到可能發(fā)生阻塞的地方,比如向上游(后端)服務器轉發(fā) request,并等待請求返回。那么,這個處理的 worker 不會這么傻等著,他會在發(fā)送完請求后,注冊一個事件:“如果 upstream返回了,告訴我一聲,我再接著干”。于是他就休息去了。此時,如果再有 request 進來,他就可以很快再按這種方式處理。而一旦上游服務器返回了,就會觸發(fā)這個事件, worker 才會來接手,這個 request 才會接著往下走。由于 web server 的工作性質決定了每個 request 的大部份生命都是在網絡傳輸中,實際上花費在 server 機器上的時間片不多。這是幾個進程就解決高并發(fā)的秘密所在。webserver 剛好屬于網絡 io 密集型應用,不算是計算密集型。異步,非阻塞,使用 epoll,和大量細節(jié)處的優(yōu)化。也正是 nginx 之所以然的技術基石。
柚子快報激活碼778899分享:運維 Nginx詳解
精彩鏈接
本文內容根據(jù)網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。