十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
Nginx("engine x")是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP服務(wù)器。Nginx是由Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點(diǎn)開發(fā)的,它已經(jīng)在該站點(diǎn)上運(yùn)行超過兩年了。Nginx超越Apache的高性能和穩(wěn)定性,使得國(guó)內(nèi)使用Nginx作為web服務(wù)器的網(wǎng)站越來越多,其中包括新浪博客、新浪播客、網(wǎng)易新聞、騰訊網(wǎng)、搜 狐博客等門戶網(wǎng)站頻道,六間房、56.com等視頻分享網(wǎng)站,Discuz!官方論壇、水木社區(qū)等知名論壇盛大在線、金山逍遙網(wǎng)等網(wǎng)絡(luò)游戲網(wǎng)站豆瓣、人人網(wǎng)、YUPOO相冊(cè)、金山愛詞霸、迅雷在線等新興Web 2.0網(wǎng)站。
Nginx作為HTTP服務(wù)器,有以下幾項(xiàng)基本特性:
1.處理靜態(tài)文件,索引文件以及自動(dòng)索引:打開文件描述符緩沖
2.無緩存的反向代理加速,簡(jiǎn)單的負(fù)載均衡和容錯(cuò)
3. FastCGI,簡(jiǎn)單的負(fù)載均衡和容錯(cuò)
4.模塊化的結(jié)構(gòu):
包括gzipping, byte ranges, chunked responses, 以及 SSI-filter等filter。
如果由FastCGI或其它代理服務(wù)器處理單頁中存在的多個(gè)SSI則這項(xiàng)處理可以并行運(yùn)行而不需要相
互等待。
5.支持SSL 和 TLS SN
三、Nginx的安裝安裝Nginx步驟很簡(jiǎn)單,在安裝Nginx之前需要安裝Nginx的依賴(配置好yum源后)
主要依賴如下:
1.安裝gccyum -y install gcc 2.安裝pcre
yum install -y pcre-devel 3.安裝zlib
下載zlib-1.2.8.tar.gz yum info zlib 獲得下載地址http://www.zlib.net/ tar -zxvf zlib-1.2.8.tar.gz 報(bào)錯(cuò):gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now mv zlib-1.2.8.tar.gz zlib-1.2.8.tar tar -xvf zlib-1.2.8.tar cd zlib-1.2.8 ./configure make make install 4.安裝Nginx
下載 :http://nginx.org/en/download.html tar -zxvfnginx-1.10.1.tar.gz cdnginx-1.10.1 ./configure make make install 默認(rèn)的安裝目錄為/usr/local/nginx
四、Nginx的配置Nginx.conf是主配置文件 , Nginx的nginx.conf 的配置說明如下:
user root; #運(yùn)行用戶 worker_processes 1; #啟動(dòng)進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等 error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; #工作模式及連接數(shù)上限 events { use epoll; #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能 worker_connections 1024; #單個(gè)后臺(tái)worker process進(jìn)程的并發(fā)鏈接數(shù) # multi_accept on; } #設(shè)定http服務(wù)器,利用它的反向代理功能提供負(fù)載均衡支持 http { include /etc/nginx/mime.types;#設(shè)定mime類型,類型由mime.type文件定義 default_type application/octet-stream; access_log /var/log/nginx/access.log; #設(shè)定日志格式 #sendfile 指令指定 nginx 是否調(diào)用 sendfile 函數(shù)(zero copy 方式)來輸出文件,對(duì)于普通應(yīng)用, #必須設(shè)為 on,如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為 off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime. sendfile on; #tcp_nopush on; #連接超時(shí)時(shí)間 #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; #開啟gzip壓縮 gzip on; gzip_disable "MSIE [1-6].(?!.*SV1)"; #設(shè)定請(qǐng)求緩沖 client_header_buffer_size 1k; large_client_header_buffers 4.4k; #設(shè)定負(fù)載均衡的服務(wù)器列表 upstream mysvr { #weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大 server 10.30.20.25:9200 weight=5; server 10.30.20.25:9200 weight=1; server 192.168.8.3:80 weight=6; } server { listen 80; #監(jiān)聽80端口 access_log logs/access.log main; #設(shè)定本虛擬主機(jī)的訪問日志 #默認(rèn)請(qǐng)求 location / { root html; #指定對(duì)應(yīng)uri的資源查找路徑,這里html為相對(duì)路徑 index index.php index.html index.htm; #指定首頁index文件的名稱,可以配置多個(gè),以空格分開。如有多個(gè),按配置順序查找 } # 定義錯(cuò)誤提示頁面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
五、Nginx與Elasticsearch結(jié)合使用Elasticsearch是一種先進(jìn)的,高性能的,可擴(kuò)展的開源搜索引擎,提供全文搜索和實(shí)時(shí) 分析的結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù)。
它的特定是可以通過HTTP使用RESTful API,很容易的融入現(xiàn)有的web架構(gòu)。因此在高 并發(fā)的情況下,采用nginx反向代理負(fù)載均衡到多臺(tái)Elasticsearch 服務(wù)器上。
架構(gòu)圖:
這種架構(gòu)的優(yōu)點(diǎn):
記錄每個(gè)API請(qǐng)求的日志 支持大量的客戶端連接,不管有沒有啟用keepalives,比長(zhǎng)連接(使用keepalives)到elasticsearch服務(wù)器小的多 負(fù)載均衡的請(qǐng)求Elasticsearch服務(wù)器 緩存數(shù)據(jù),減少同一內(nèi)容再次請(qǐng)求Elasticsearch服務(wù)器。NGINX Plus 還提供HTTP API 對(duì)緩存數(shù)據(jù)的清除接口 提供主動(dòng)健康檢測(cè)(僅nginx plus),不斷檢測(cè)后端Elasticsearch服務(wù)器是否正常,并主動(dòng)的進(jìn)行切換。 報(bào)告豐富的監(jiān)控指標(biāo)(僅nginx plus),提供監(jiān)控和管理。 支持通過HTTP API動(dòng)態(tài)的配置上游服務(wù)器組(僅nginx plus),可以從上游服務(wù)器組中添加和刪除,上線或下線,改變權(quán)重 安全驗(yàn)證。只讓持有賬戶名密碼的客戶端訪問到ES集群。 對(duì)特殊接口如"_shutdown"限制訪問。(這個(gè)功能相當(dāng)實(shí)用) 帶角色的訪問控制(比如user角色擁有數(shù)據(jù)訪問權(quán)限,admin角色擁有集群管控權(quán)限)下表比較Elasticsearch 、Elasticsearch +nginx F/OSS、Elasticsearch +NGINX Plus 的功能:
Elasticsearch client nginx F/OSS NGINX Plus Horizontal scalability Y Y Y Keepalive optimization Y Y Centralized HTTP access logs Y Y Queuing and concurrency control Y Response caching Y Y Failover of failed connections Y Y Y Active monitoring of Elasticsearch nodes Y(some clients) Y Advanced load balancing methods Y Y Weighted load balancing Y Y Dynamic reconfiguration Y Status monitoring Y General-purpose HTTP load balancing Y Y簡(jiǎn)單說明Nginx服務(wù)器nginx.conf的配置文件的主要內(nèi)容。
1.設(shè)置請(qǐng)求日志
#全局錯(cuò)誤日志及PID文件 error_log /usr/local/nginx/logs/error.log; pid /usr/local/nginx/logs/nginx.pid; http { #設(shè)定日志格式 access_log /usr/local/nginx/logs/access.log; }
2.工作模式及連接數(shù)上限
events { use epoll; #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能 worker_connections 1024; #單個(gè)后臺(tái)worker process進(jìn)程的并發(fā)鏈接數(shù) # multi_accept on; }
3.設(shè)定負(fù)載均衡的服務(wù)器列表
upstream mysvr { #weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大 #本機(jī)上的elasticsearch開啟9200端口 server 10.30.20.25:9200 weight=5; server 10.30.20.24:9200 weight=1; server 10.30.20.23:9200 weight=6; }
4.設(shè)定請(qǐng)求緩存
client_header_buffer_size 1k; large_client_header_buffers 4.4k;
5.安全驗(yàn)證
server { listen 80; auth_basic "Protected Elasticsearch"; auth_basic_user_file passwords; location / { proxy_pass http://mysvr; proxy_redirect off; } }
passwords文件和nginx.conf在同一目錄,里面的格式是按行的"用戶名:crypt(3)加密后的密碼串":
$ printf "john:$(openssl passwd -crypt s3cr3t)n" > passwords
做完以上配置后重啟nginx,則直接訪問服務(wù)會(huì)被禁止:
$ curl -i 10.30.20.25:80 # HTTP/1.1 401 Unauthorized # ...
通過正確的用戶名密碼規(guī)則可順利訪問:
$ curl -ijohn:s3cr3t@10.30.20.25:80 # HTTP/1.1 200 OK # ...
6.對(duì)特殊接口如"_shutdown"限制訪問
location / { if ($request_filename ~ _shutdown) { return 403; break; } proxy_pass http://mysvr; proxy_redirect off; }
做了此配置之后,直接訪問_shutdown會(huì)被拒絕:
$ curl -i -X POST john:s3cr3t@10.30.20.25:80/_cluster/nodes/_shutdown # HTTP/1.1 403 Forbidden # ....
7.帶角色的訪問控制
區(qū)分admins和users兩種權(quán)限,admins可以訪問一切API,而users只允許訪問_search和_analyze接口。
# Allow access to /_search and /_analyze for authenticated "users" server { listen 80; auth_basic "Elasticsearch Users"; auth_basic_user_file users; location / { return 403; } location ~* ^(/_search|/_analyze) { proxy_pass http://mysvr; proxy_redirect off; } } # Allow access to anything for authenticated "admins" server { listen 80; auth_basic "Elasticsearch Admins"; auth_basic_user_file admins; location / { proxy_pass http://mysvr; proxy_redirect off; } }
參考鏈接:
http://www.codes51.com/article/detail_157850.html
http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html
http://www.ttlsa.com/nginx/nginx-elasticsearch/
來自為知筆記(Wiz)