新華通訊社 主管 中國新聞技術工作者聯合會 主辦

自主研發自主掌控系列| Nginx服務器應用“秘籍”

作者:劉旻昊
發布時間 2018-04-27
   

    新采編發系統是由新華社技術局主持研發,服務于新華社全社新聞采編報道日常業務的新一代新聞采編系統,是2016年實施的“新華全媒工程”的重要組成部分,該系統提供信息匯聚、報道策劃、全媒生產、產品發布等四大類主要功能。新供稿系統是“新華全媒工程”的另一個重要組成部分,是落實新華社供稿線路優化調整升級工作方案的核心技術建設工程,系統于2017年5月上線,創新性地將大數據智能推薦、即時通訊、APP客戶端等技術運用于通訊社供稿服務,引領新華社供稿服務躋身世界先進水平。為了落實領導關于“遵循新聞傳播規律和新興媒體發展規律,運用互聯網技術體系,提升技術人員對先進技術的自主掌控能力”的要求,新采編發系統項目組采用了先進、開放的互聯網技術架構,為系統上線后的自主運維提供了充足空間和發揮余地。
    這就是Nginx作為Web服務器進入新采編發系統項目組視線的主要原因。作為一個草根出身的軟件,Nginx在業界的鼎鼎大名也許你并不陌生。十多年前,它剛一誕生就出手不凡,很好地解決了傳統Web服務器Apache無法hold住的C10K的問題(即一臺物理服務器達到并發量1萬時,Apache就會承受不了)。
    在新華社新一代技術系統架構中,Nginx作為接入層的重要環節扮演了至關重要的角色,通過自主掌控Nginx軟件的安裝配置,靈活運用各種內置、第三方模塊及自定義lua腳本,不僅可以完成基本的代理轉發和軟負載,還能通過對流量的多種控制處理實現認證鑒權、SSL卸載、限速分流、接入審計等功能,以滿足用戶和應用系統的多種需求。
    Nginx是一款開源免費的HTTP和反向代理服務器,它由俄羅斯人伊戈爾·塞索耶夫編寫,最早發布于2004年。十多年來,由于其出色的性能,Nginx在互聯網突飛猛進的時代里飛速發展,根據W3Techs網站的報告,目前全球TOP 1000的網站中有接近六成在使用Nginx,包括Netflix, Dropbox, Wikipedia等,而排名第二的Apache僅占16.5%。Nginx最突出的特性包括高并發、輕量級、穩定,這得益于它使用異步、非阻塞、事件驅動的方式處理請求,測試顯示它能處理高達Apache4倍之多的并發請求量,同時使用的內存資源卻遠低于Apache。

            圖 全球Web服務器排名
    要使用Nginx,第一步要掌握Nginx的安裝:
    在安裝Nginx之前,首先要安裝3個依賴軟件包:PCRE正則表達式庫,zlib壓縮庫和OpenSSL加密工具集,Nginx的配置、壓縮和ssl功能中需要用到這些軟件。
    安裝Nginx包括3步,配置、編譯和安裝,首先需要在Nginx官網http://nginx.org/下載源碼包,一般建議使用穩定版(Stable Version)。
    在配置階段,由于Nginx使用高度模塊化的架構設計,需要手動設置各個模塊的開關選項。對于默認關閉的Nginx內置模塊,可以使用--with-module_name的方式開啟開關,對于第三方模塊,可以使用--add-module=/path/to/module的方式加以集成。
    啟用一些常用的內置模塊的配置如下:
? --with-stream 四層協議轉發
? --with-http_ssl_module     支持https
? --with-http_gzip_static_module Gzip靜態模塊
? --with-http_geoip_module   GeoIP模塊
? --with-http_flv_module 為FLV文件提供服務端偽流媒體支持
? --with-http_stub_status_module 狀態信息頁
    Nginx有大量的第三方模塊,官網上提供了所有第三方模塊的清單:         https://www.nginx.com/resources/wiki/modules/index.html,一些常用的第三方模塊包括:
? nginx_upstream_check_module 主動健康檢查  ? nginx-sticky-module  會話保持
? ngx_log_if 日志過濾
    使用make和make install,就完成編譯安裝了。
    安裝完成后,還需要掌握Nginx的基本控制命令:
? nginx 啟動nginx
? nginx -s stop 立刻停止
? nginx -s quit 溫柔停止
? nginx -s reload 重載配置文件
  了解完安裝和基本控制,來看看Nginx具體能扮演哪些角色吧:
1. 反向代理
    應用部署好了,如何讓用戶能訪問到呢?這正是Nginx反向代理的用武之地,用戶通過域名訪問的請求到達Nginx服務器后,Nginx可以根據域名和路徑區分這些請求并轉發給不同的后端服務器集群,即使用戶無法通過網絡直達這些后端服務器。Nginx四層和七層的代理分別使用ngx_stream_proxy_module和ngx_http_proxy_module模塊,都用proxy_pass URL的方式配置實現。
2. 負載均衡
    應用服務器出問題了怎么辦?不要緊,將Nginx用做軟負載,能夠將影響程度降低至最低。Nginx可以提供靈活多變的負載配置,包括輪詢、加權輪詢、IP哈希、主備等等,用于滿足多樣的需求。此外,還可以通過集成nginx_upstream_check_module第三方模塊,進一步實現基于tcp和http的主動健康檢查,讓Nginx的負載均衡能力如虎添翼。
3. 訪問控制
    并非所有的系統都全部面向互聯網開放,有的系統只允許辦公網絡訪問,還有的系統里某些頁面可以對互聯網開放,其它頁面則僅允許特定的內部IP訪問,面對這些細粒度的訪問控制需求,通過使用ngx_http_access_module模塊,Nginx可以提供基于七層的靈活的黑白名單方式配置訪問控制策略。
4. 認證鑒權
    有些應用系統想要加把鎖,輸入正確的用戶名密碼才能訪問,nginx默認自帶的認證模塊就可以實現,通過ngx_http_auth_basic_module模塊,結合htpasswd命令生成用戶名及對應密碼數據庫文件,Nginx可以很輕松地實現這種認證。另一種認證方式也很流行,Nginx+Lua(類似Openresty)可以讓用戶在訪問業務系統之前先通過統一的用戶認證系統登錄、過濾并鑒權。
5、SSL卸載
    近年來,HTTPS逐漸取代HTTP成為傳輸協議界的新寵,眾多互聯網網站開始從HTTP切換到HTTPS,以實現加密、可信訪問。Nginx的 ngx_http_ssl_module模塊對https提供了必要的支持,想要實施HTTPS的網站可以將證書安裝在Nginx服務器上,由Nginx進行ssl密文數據流的卸載。
6、限速限流
    當遇到真實的流量遠遠大于系統測試的可承載流量時,一方面可能讓系統垮掉,另一方面可能擁堵出口帶寬,這時就必須進行限流。限流是從上到下貫穿整個應用的,接入層作為最外面的屏障,需要做好整個系統的限流。對于Nginx來講,限流有多種方式,可以使用ngx_http_core_module核心模塊對連接數進行限制,也可以對訪問頻率進行限制,還可以啟用過載保護sysgurad模塊。
7、接入審計
    可以通過搭建ELK平臺收集和分析接入層Nginx日志,實現可視化的接入審計及分析平臺,消息隊列可以采用Redis或Kafka。
    除了上述種種應用場景,Nginx還有一個運維人員不可不知的炫酷操作——平滑升級。作為一個互聯網軟件,Nginx版本迭代升級比較頻繁,對運維人員來說,為了享受新版本的新特性,免不了要對生產環境的Nginx進行版本升級,而平滑升級操作可以在業務毫無感知的情況下完成,運維人員只需在備份并替換sbin目錄下的可執行文件后,使用kill -s USR2 `cat /path/to/nginx.pid`命令,讓Nginx開始新舊版本并行運行,隨后再優雅退出舊進程即可。看到這里,你有沒有躍躍欲試了呢,快去體驗一下這款Web服務器神器吧。(完)(作者單位:新華社通信技術局技術實驗室)

Copyright 1993-2018 Chinese Mass Media Technology, All Rights Reserved
中國傳媒科技雜志社版權所有 京ICP備16053505號-1
伊人成人综合,伊人成综合人网,伊人222综合网图片,Av在线伊人综合网 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>