nginx簡介
nginx是一個高性能、輕量級的服務器,可同時作爲web服務器、反向代理服務器。正向代理是代替客戶端(用戶)訪問服務器,反向代理是代替服務器接收、處理請求。
nginx的特點
- 穩定性高
- 系統資源佔用少
- 併發能力強
一般用nginx反向代理tomcat(負載均衡)、代理靜態資源。
windows下使用nginx
啓動、關閉nginx的2種方式
1、雙擊啓動,Ctrl+Shift+Esc任務管理器結束nginx的2個進程來關閉nginx,也可以命令行結束
#查看nginx進程的pid
tasklist | findstr nginx
#結束nginx的2個進程
taskkill /f /pid pid1
taskkill /f /pid pid2
如果修改了nginx的配置,需要重啓nginx使之生效
2、命令行cd到nginx主目錄
#啓動
start nginx
#停止
nginx -s stop
#退出,退出之前會強制停止nginx
nginx -s quit
#重新加載配置
nginx -s reload
如果操作過程中要重新加載配置,第二種方便些。
linux下使用nginx
安裝
.tar.gz中是nginx的源碼,需要自己編譯安裝,先放到/usr/local下
#安裝依賴
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
yum -y install gcc automake autoconf libtool make
#解壓
tar -xzvf nginx-1.16.1.tar.gz
rm nginx-1.16.1.tar.gz
#進入解壓目錄
cd nginx-1.16.1
#指定安裝目錄
mkdir /usr/local/nginx
./configure --prefix=/usr/local/nginx
#編譯
make
#安裝
make install
#刪除解壓目錄
cd ..
rm -r nginx-1.16.1
#開啓80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
fire-wall --reload
常用命令
都是調用sbin下的nginx,先切換到nginx/sbin下
./nginx #啓動nginx
./nginx -s stop #停止
./nginx -s quit #停止並退出
./nginx -s reload #重新加載配置
./nginx -v #查看nginx版本
設置開機啓動(可選)
vim /etc/rc.d/rc.local
末尾加上 /usr/local/nginx/sbin/nginx
nginx常用配置(反向代理、代理靜態資源)
#gzip on;
#指定tomcat集羣、要使用的負載均衡算法
upstream servers{
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
server {
listen 80;
server_name localhost;
#字符集使用utf-8
charset utf-8;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
#反向代理tomcat
proxy_pass http://servers;
}
#代理靜態資源
location ~* \.(html|css|js|gif|jpg|png|mp4)$ {
#設置靜態資源根目錄,相對於nginx主目錄,在主目錄下新建文件夾static,把靜態資源放進去即可
root static;
#設置瀏覽器緩存的靜態資源的有效期,到期後再次訪問時會重新從nginx加載。秒s,分m,時h,天d
expires 7d;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
nginx的負載均衡算法
1、輪詢(默認)
輪詢適合服務器性能差不多的情況,默認使用的就是輪詢,不需要設置什麼。
將列表中的節點排成一圈,從前往後,找空閒的服務器來處理請求。
2、加權輪詢
設置權重,權重大的輪到的機會更大,適合服務器性能有明顯差別的情況,性能好的權重設置大些。
upstream servers{
server 192.168.1.1:8080 weight=1;
server 192.168.1.2:8080 weight=3;
server 192.168.1.3:8080 weight=2;
}
3、ip_hash
根據用戶ip的hash值來轉發請求,同一用戶(ip)的請求都會被轉發給同一個服務器處理,可解決分佈式session問題
upstream servers{
ip_hash;
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
4、url_hash(第三方)
根據請求的url來轉發,將url相同的請求轉發給同一服務器處理。一直處理某個url,該服務器上會有這個url請求的緩存,可減少處理時間
upstream servers{
hash $request_uri;
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
5、fair(第三方)
根據服務器響應時間來分發請求,響應時間短的說明負載小、性能充足,分發給它的請求多些,fair 公平。
upstream servers{
fair;
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
ip_hash、url_hash都是使用特定服務器節點來處理特定請求,如果該節點故障,nginx會剔除不可用的節點,將特定請求轉發給其它節點處理,url_hash影響不大,但ip_hash會丟失之前的session數據。
url_hash、fair都依賴第三方模塊,需要安裝相應的模塊。
只使用單個nginx容易發生單點故障,一般要用 LVS+keepalive+nginx 實現nginx的高可用。