Nginx
什麼是 Nginx?
Nginx 是俄羅斯人編寫的十分輕量級的 HTTP 服務器,Nginx,它的發音爲“engine X”,是一個高性能的HTTP和反向代理服務器,同時也是一個 IMAP/POP3/SMTP 代理服務器。Nginx 是由俄羅斯人 Igor Sysoev 爲俄羅斯訪問量第二的 Rambler.ru 站點開發的,它已經在該站點運行超過兩年半了。Igor Sysoev 在建立的項目時,使用基於 BSD 許可。
Nginx 特點
Nginx 做爲 HTTP 服務器,有以下幾項基本特性:
處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝. 無緩存的反向代理加速,簡單的負載均衡和容錯.
FastCGI,簡單的負載均衡和容錯. 模塊化的結構。包括 gzipping, byte ranges, chunkedresponses,以及 SSI-filter 等 filter。如果由 FastCGI 或其它代理服務器處理單頁中存在的多個 SSI,則這項處理可以並行運行,而不需要相互等待。 支持 SSL 和 TLSSNI. Nginx
專爲性能優化而開發,性能是其最重要的考量,實現上非常注重效率 。它支持內核 Poll 模型,能經受高負載的考驗,有報告表明能支持高達
50,000 個併發連接數。Nginx 具有很高的穩定性。其它 HTTP服務器,當遇到訪問的峯值,或者有人惡意發起慢速連接時,也很可能會導致服務器物理內存耗盡頻繁交換,失去響應,只能重啓服務器。
實驗環境:
1設置一臺新的虛擬機:
安裝包:nginx-1.14.0
安裝環境:因爲nginx是靜態服務器安裝和以往安裝環境不同分三步走:
1> ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio #configure編譯安裝nginx源程序生成makefile文件在make編譯過程中讀取MAKEFILE文件
2> make
3> make install
實驗步驟:
tar zxf nginx-1.14.0.tar.gz
cd nginx-1.14.0/src/core/
vim nginx.h
#define NGINX_VER "nginx/" #刪除nginx版本顯示
cd /root/nginx-1.14.0/auto/cc/
vim gcc #取消gcc的編譯調試
# debug
#CFLAGS="$CFLAGS -g"
yum install gcc pcre-devel openssl-devel -y#nginx安裝中的依賴性安裝包
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio #configure編譯安裝nginx源程序生成makefile文件在make編譯過程中讀取MAKEFILE文件
make
make install
修改操作系統配置使之與程序相匹配
cd /usr/local/nginx/conf/
vim nginx.conf #主配置文件
events {
worker_connections 65535; #worker能接受的最大文件連接數
}
nginx -s reload
lscpu #查看cpu內核個數
vim nginx.conf
worker_processes auto;#自動設置
#worker_processes 2; #當服務器中cpu個數爲2個時設置爲2 01 10 表示他兩種方式
#worker_cpu_affinity 01 10;
sysctl -a |grep file #查看程序能接受最大文件連接數
vim /etc/security/limits.conf
nginx - nofile 65536 #修改操作系統能支持的最大文件數
我的虛擬機cpu個數是6個這裏的worker_processes可以設置爲6也可以設置爲auto自動識別系統工作線程數
開啓nginx訪問其網頁
cd /usr/local/nginx/
du -sh
cd sbin/
pwd #/usr/local/nginx/sbin/
ln -s /usr/local/nginx/sbin/nginx /sbin/
nginx -t #檢測語法nginx有自動進行健康檢測
nginx #開啓nginx服務
nginx -s stop #關閉
nginx
nginx -s reload #重新加載nginx
cd /usr/local/nginx/html/ #nginx根目錄
vim test.html
訪問nginx網頁:
nginx中的參數部署:
useradd -M -d /usr/local/nginx/ nginx #nginx用戶在nginx組中
vim nginx.conf #主配置文件位置:/usr/local/nginx/sbin
user nginx nginx; #用戶以nginx用戶身份訪問,nginx用戶組訪問
負載均衡:
**哈希算法:均衡調度站調度最先是哪個服務器,就一直在哪個服務器上面取數據,除非該服務器壞掉纔會調度到新的服務器,或着有新的域名訪問,纔會重新調度。
vim nginx.conf
http {
upstream westos { #調度方法,設置它爲westos
ip_hash; #哈希算法
server 172.25.30.2:80; #real server1
server 172.25.30.3:80; #real server2
}
include mime.types;
default_type application/octet-stream;
server {
listen 80; #端口爲80端口
server_name www.westos.org;
# 訪問域名
location /{ #當客戶端訪問時,調度站直接扔給westos來進行調度
proxy_pass http://westos;
}
}
nginx -s reload
加權均衡調度 該設置應用於多臺服務器中有一臺服務器性能相比於其他服務器來說更好一點,調度站就會優先選擇性能好的服務器並傾向於好的服務器在其上面調度數據概率根大
vim nginx.conf
http {
upstream westos {
#ip_hash;
server 172.25.30.2:80;
server 172.25.30.2:80 weight=2;
server 172.25.30.3:80;
}
include mime.types;
default_type application/octet-stream;
cat nginx.conf | grep weight
nginx -t
nginx -s reload
訪問結果:
備用 當兩臺web服務器都壞掉時使用迴環接口將lvs設置爲備用服務器
vim nginx.conf
http {
upstream westos {
#ip_hash;
server 172.25.30.2:80;
server 172.25.30.3:80;
server 127.0.0.1:80 backup; #使用迴環接口將調度站本身設置爲備用,不到萬不得已他是不會上戰場的
}
include mime.types;
default_type application/octet-stream;
}
nginx -t
cat nginx.conf | grep backup
nginx -s reload
當兩個real server都掛掉時:502
配置文件:
添加新的功能模塊
當我們安裝的版本不支持我們要用的算法時就會出現下面類似的情況:
面對這種情況我們可以安裝新的版本添加新的模塊功能但不希望覆蓋我們源有的版本就需要:
在nginx中添加功能添加新的模塊需要重新.configure+make+make install
Congigure #靜態編譯生成MAKEFILE
make
make install
安裝能夠支持新功能版本:
#當安裝的nginx版本不支持某些功能時,可以安裝其他版本,但是又不想覆蓋掉原來的nginx:
下載安裝包nginx-1.10.1.tar.gz nginx-sticky-module-ng.tar.gz
nginx -s stop
tar zxf nginx-1.10.1.tar.gz
tar zxf nginx-sticky-module-ng.tar.gz
cd nginx-1.10.1
./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-sticky-module-ng
make
make install
安裝部署:
cp /usr/local/nginx/conf/nginx.conf /opt/nginx/conf/ #配置相同但可以支持sticky算法
cd /opt/nginx/conf/
vim nginx.conf
http {
upstream westos {
sticky; #算法
server 172.25.30.2:80;
server 172.25.30.3:80;
}
include mime.types;
default_type application/octet-stream;
/opt/nginx/sbin/nginx -t #檢測語法是否錯誤
/opt/nginx/sbin/nginx #絕對路徑開啓該服務避免和/sbin下的nginx衝突
/opt/nginx/sbin/nginx -s reload #重新加載該服務
在客戶端訪問:www.westos.org
for i in {1..10}; do curl www.westos.org;done