一.什么是Nginx:
Nginx是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。
二.Nginx作用:
反向代理,集群,虛擬服務器,負載均衡,動靜分離,解決跨域問題等
三.安裝Nginx:
1.鏈接 https://nginx.org/en/download.html,如下
2.linux和windows版本下載完后解壓(windows版本解壓即可)
以linux為例,解壓后得到
3.進入文件夾后可以看到目錄
4.執行
./configure
5.如果出現錯誤如下,則
(1)安裝編譯工具及庫文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
(2)安裝PCRE,鏈接https://sourceforge.net/projects/pcre/files/pcre/
下載PRCE安裝包並解壓,例如下圖
進入解壓后的文件夾,找到configure並執行
cd prce-8.43.tar.gz
./configure
安裝並查看prce版本
make && make install
pcre-config --version
6.再次進入nginx-1.14.2文件夾,執行
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.43
7.再執行make(注意上面那行代碼,這里默認會去找/usr/local/src/ 下的prce-8.43文件夾),然后make install完成安裝。
8.查看nginx版本(上面指定的目錄)
/usr/local/webserver/nginx/sbin/nginx -v
例如
9.啟動nginx,進入第6步中--prefix所指定的文件夾中,再進入sbin文價夾中,執行./nginx
(在nginx文件夾中重啟是./nginx -s reopen)
10.查看nginx是否啟動,例如
nginx默認端口是80,所以直接訪問ip地址,例如下圖所示,即可知nginx啟動成功
四.使用Nginx
1.靜態資源文件夾里的文件可以直接在外部訪問,例如
2.實現反向代理(可以不暴露真實IP地址)
修改nginx.conf配置文件
注意:上面那個箭頭指向的地址,必須在主機hosts文件中設置地址映射(域名解析),如下圖
重新加載配置文件
./nginx -s reload
測試:
如果反向代理沒有成功,可以查看log日志,找到並進入logs文件夾,輸入
cat error.log
例如下圖
如果發現正常啟動成功,卻沒有成功配置反向代理。可以看看是否是自己修改了正確的配置文件(注意,nginx解壓后的conf文件夾中有一個配置文件,而nginx啟動目錄下的文件夾中有一個nginx.conf配置文件,還有一個nginx.conf.default配置文件,可以試着將三個配置文件都修改試試,如果是按照上面安裝步驟,應該是只修改的是/usr/local/webserver/nginx/conf中的nginx.conf)
3.實現集群(使用nginx實現負載均衡)
負載均衡算法:
輪詢機制:在配置文件http中添加 (請求會輪流轉發到129和130兩個服務器的tomcat服務器)
upstream backserver { server 192.168.2.129:8080; server 192.168.2.130:8080; }
注意:proxy_pass指向的是backserver ,如http://backserver
權重(比例分配):
upstream backserver { server 192.168.2.129:8080 weight=10; //129訪問10次,130訪問一次 server 192.168.2.130:8080 weight=1; }
IP綁定:(隨機綁定一個,而且綁定后一個ip地址就固定訪問一個服務器了,可以解決session共享問題,可一旦該服務器掛了,會出現數據丟失)
upstream backserver { ip_hash; server 192.168.2.129:8080; server 192.168.2.130:8080; }
4.Nginx宕機容錯機制
通過上述安裝的Nginx默認是開啟宕機容錯機制的,比如說上面集群中server 192.168.2.129:8080掛掉,它會自動找130的服務器
如果想要添加宕機容錯規則的話,可以在配置文件中的proxy_pass下面添加
proxy_connect_timeout 5; #最大連接時間 proxy_send_timeout 5; #最大發送時間 proxy_read_timeout 5; #最大讀取時間