nginx 带宽_前端工程师不可不知的Nginx知识
歷史背景
互聯網的全球化導致了互聯網的數據量快速增長,加上在本世紀初摩爾定律在單核 CPU 上的失效,CPU 朝著多核方向發展,而 Apache 顯然并沒有做好多核架構的準備,它的一個進程同一時間只能處理一個連接,處理完一個請求后才能處理下一個,這無疑不能應對如今互聯網上海量的用戶。況且進程間切換的成本是非常高的。在這種背景下,Nginx 應運而生,可以輕松處理數百萬、上千萬的連接。
Nginx 優勢
- 高并發高性能
- 可擴展性好
- 高可靠性
- 熱部署
- 開源許可證
Nginx 主要應用場景
- 靜態資源服務,通過本地文件系統提供服務
- 反向代理服務、負載均衡
- API服務、權限控制,減少應用服務器壓力
Nginx 配置文件和目錄
通過 rpm -ql nginx 可以查看 Nginx 安裝的配置文件和目錄。
如圖是我在某某云上安裝的最新穩定版本的Nginx的配置文件及目錄。
- /etc/nginx/nginx.conf 核心配置文件
- /etc/nginx/conf.d/default.conf 默認http服務器配置文件
- /etc/nginx/fastcgi_params fastcgi配置
- /etc/nginx/scgi_params scgi配置
- /etc/nginx/uwsgi_params uwsgi配置
- /etc/nginx/koi-utf
- /etc/nginx/koi-win
- /etc/nginx/win-utf 這三個文件是編碼映射文件,因為作者是俄國人
- /etc/nginx/mime.types 設置HTTP協議的Content-Type與擴展名對應關系的文件
- /usr/lib/systemd/system/nginx-debug.service
- /usr/lib/systemd/system/nginx.service
- /etc/sysconfig/nginx
- /etc/sysconfig/nginx-debug 這四個文件是用來配置守護進程管理的
- /etc/nginx/modules 基本共享庫和內核模塊
- /usr/share/doc/nginx-1.18.0 幫助文檔
- /usr/share/doc/nginx-1.18.0/COPYRIGHT 版權聲明
- /usr/share/man/man8/nginx.8.gz 手冊
- /var/cache/nginx Nginx的緩存目錄
- /var/log/nginx Nginx的日志目錄
- /usr/sbin/nginx 可執行命令
- /usr/sbin/nginx-debug 調試執行可執行命令
關于 Nginx 的常用命令以及配置文件語法很容易就可以搜到,本文不作贅述,下面從 Nginx 的功能以及實際場景出發看一看各個場景下 Nginx 可以提供給我們哪些配置項。在此之前,我們先來明確兩個概念:
正向代理 Forward proxy
一句話解釋正向代理,正向代理的對象是客戶端,服務器端看不到真正的客戶端。
resolver 8.8.8.8 # 谷歌的域名解析地址 server {location / {# 當客戶端請求我的時候,我會把請求轉發給它# $http_host 要訪問的主機名 $request_uri 請求路徑proxy_pass http://$http_host$request_uri;} }反向代理 Reverse proxy
一句話解釋反向代理,反向代理的對象是服務端,客戶端看不到真正的服務端。
跨域
跨域是前端工程師都會面臨的場景,跨域的解決方案有很多。不過要知道在生產中,要么使用 CORS 、要么使用 Nginx 反向代理來解決跨域。在 Nginx 的配置文件中進行如下配置即可:
server {listen 80;server_name localhost; # 用戶訪問 localhost,反向代理到 http://webcanteen.comlocation / {proxy_pass http://webcanteen.com} }Gzip
Gzip 是互聯網上非常普遍的一種數據壓縮格式,對于純文本來說可以壓縮到原大小的 40%,可以節省大量的帶寬。不過需要注意的是,啟用 Gzip 所需的 HTTP 最低版本是 1.1。
location ~ .*. (jpg|png|gif)$ {gzip off; #關閉壓縮root /data/www/images; } location ~ .*. (html|js|css)$ {gzip on; #啟用壓縮gzip_min_length 1k; # 超過1K的文件才壓縮gzip_http_version 1.1; # 啟用gzip壓縮所需的HTTP最低版本gzip_comp_level 9; # 壓縮級別,壓縮比率越高,文件被壓縮的體積越小gzip_types text/css application/javascript; # 進行壓縮的文件類型root /data/www/html; }請求限制
對于大流量惡意的訪問,會造成帶寬的浪費,給服務器增加壓力。往往對于同一 IP 的連接數以及并發數進行限制。
關于請求限制主要有兩種類型:
- limit_conn_module 連接頻率限制
- limit_req_module 請求頻率限制
訪問控制
關于訪問控制主要有兩種類型:
- -http_access_module 基于 IP 的訪問控制
- -http_auth_basic_module 基于用戶的信任登陸
(基于用戶的信任登陸不是很安全,本文不做配置介紹)
以下是基于 IP 的訪問控制:
ab命令
ab命令全稱為:Apache bench,是 Apache 自帶的壓力測試工具,也可以測試 Nginx、IIS 等其他 Web 服務器。
- -n 總共的請求數
- -c 并發的請求數
防盜鏈
防盜鏈的原理就是根據請求頭中 referer 得到網頁來源,從而實現訪問控制。這樣可以防止網站資源被非法盜用,從而保證信息安全,減少帶寬損耗,減輕服務器壓力。
location ~ .*.(jpg|png|gif)$ { # 匹配防盜鏈資源的文件類型# 通過 valid_referers 定義合法的地址白名單 $invalid_referer 不合法的返回403 valid_referers none blocked 127.0.0.1;if ($invalid_referer) {return 403;} }負載均衡 Load Balance
當我們的網站需要解決高并發、海量數據問題時,就需要使用負載均衡來調度服務器。將請求合理的分發到應用服務器集群中的一臺臺服務器上。
Nginx 可以為我們提供負載均衡的能力,具體配置如下:
# upstream 指定后端服務器地址 # weight 設置權重 # server 中會將 http://webcanteen 的請求轉發到 upstream 池中 upstream webcanteen {server 127.0.0.1:66 weight=10;server 127.0.0.1:77 weight=1;server 127.0.0.1:88 weight=1; } server {location / {proxy_pass http://webcanteen} }后端服務器狀態
后端服務器支持以下的狀態配置:
- down:當前服務器不參與負載均衡
- backup:當其他節點都無法使用時的備用服務器
- max_fails:允許請求失敗的次數,若到達就會休眠
- fail_timeout:經過max_fails次失敗后,服務器的暫停時間,默認為10s
- max_conns:限制每個服務器的最大接收連接數
分配方式
- 輪詢(默認),每個請求按照時間順序輪流分配到不同的后端服務器,如果某臺后端服務器宕機,Nginx 輪詢列表會自動將它去除掉。
- weight(加權輪詢),輪詢的加強版,weight 和訪問幾率成正比,主要用于后端服務器性能不均的場景。
- ip_hash,每個請求按照訪問 IP 的 hash 結果分配,這樣每個訪問可以固定訪問一個后端服務器。
- url_hash,按照訪問 URL 的 hash 結果來分配請求,使得每個URL定向到同一個后端服務器上,主要應用于后端服務器為緩存時的場景。
- 自定義hash,基于任意關鍵字作為 hash key 實現 hash 算法的負載均衡
- fair,按照后端服務器的響應時間來分配請求,響應時間短則優先分配。
鏈接:https://juejin.im/post/6864085814571335694
來源:掘金
總結
以上是生活随笔為你收集整理的nginx 带宽_前端工程师不可不知的Nginx知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界简易水电梯制作
- 下一篇: 口袋妖怪黑2巨金怪性格和努力值如何选择