01 nginx基礎概念
1.1 什么是nginx
l?是一個高性能的HTTP和反向代理服務器
l?特點:占有內存少,并發能力強
l?事實上Nginx的并發能力確實在同類型的網頁服務器中表現較好
l?可以作為靜態頁面的web服務器,同時還支持CGI協議的動態語言,如perl、PHP
l?不支持java,java程序只能通過與tomcat配合完成
l 專為性能優化而開發,是線上非常注重效率,能經受高負載的考驗,最大支持的并發連接數是50000個
l 支持熱部署,啟動特別容易,并且幾乎做到7*24不間斷運行,即使運行幾個月也不需要重新啟動,還能夠在不間斷服務的情況下,對軟件版本進行升級
1.2 反向代理
1) 正向代理
在客戶端(瀏覽器)配置代理服務器,通過代理服務器進行互聯網訪問的過程

2)反向代理
反向代理:其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問。
我們需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器并獲取數據,然后在返回給客戶端,
此時反向代理服務器和目標服務器對外是一臺服務器,暴露的是代理服務器地址,隱藏了真是服務器的IP地址。

?1.3 負載均衡
普通請求處理方式:客戶端發送多個請求到服務器,服務器處理請求,有一些可能要與數據庫進行交互,服務器處理完畢后,再講結果返回給服務端
?
單個服務器解決不了,我們增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器上的情況改為請求分發到多個服務器上,將負載分發到不同的服務器,就是我們所說的負載均衡

1.4 動靜分離
為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的服務器來解析,加快解析速度,降低原來單個服務器的壓力
?
?

?02 nginx安裝,常用命令和配置文件
2.1 nginx安裝(linux)結合docker
步驟一:docker search nginx

?步驟二:拉取最新版本的Nginx

?步驟三:新建并運行

?步驟四:訪問

說明:
安裝完成后,我們可以使用以下命令來運行 nginx 容器:
$ docker run --name nginx-test -p 8080:80 -d nginx
參數說明:
- --name nginx-test:容器名稱。
- -p 8080:80: 端口進行映射,將本地 8080 端口映射到容器內部的 80 端口。
- -d nginx: 設置容器在在后臺一直運行。
注意:
- 其中的會出現加載時間過長的問題,其原因是配置文件中的問題,需要修改
- 配置文件中的端口與啟動映射的管口要保持一致才行
?安裝完成之后,在user多出來一個文件夾local/nginx,在Nginx中有sbin啟動腳本
?
?2.2 常用命令
01 使用nginx操作命令的前提條件:必須進入nginx的目錄中/user/local/nginx/sbin
02 查看nginx的版本號:./nginx -V
? 
03 啟動nginx: ?./nginx
? 
?04? 關閉nginx: ?./nginx -s stop
? 
? 05 查看nginx狀態: ?ps -ef | grep nginx

?06 重新加載nginx: ?./nginx -s reload

?2.3配置文件
01 配位文件的位置

?02 配置文件的內容
#===================全局塊開始======================
#user nobody;
#工作進程數,一般配置成和cpu數量一致
worker_processes 1;
#全局錯誤日志及pid文件存放位置
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#nginx 啟動master進程pid號
#pid logs/nginx.pid;
#=================全局塊結束============================
#==============events塊開始======================
events {
#標識單個worker進程的最大并發數
worker_connections 1024;
}
#============events塊結束============================
#============http塊開始(nginx服務器中配置最頻繁的部分,配置虛擬主機,監聽端口,請求轉發等等)==========================
http {
#引入 mime 類型定義文件
include mime.types;
default_type application/octet-stream;
#設置日志生成格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#連接的超時時間
#keepalive_timeout 0;
keepalive_timeout 65;
#解開注釋就是開啟gzip壓縮
#gzip on;
#此處配置多臺tomcat服務器(名稱不能有下劃線:webServer)
upstream webServer{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
#此處配置多臺tomcat服務器(名稱不能有下劃線:webs2Server)
#upstream webs2Server{
#server 192.168.30.19:8083;
#server 192.168.32.12:8085;
#}
server {
#定義當前這個server監聽的端口
listen 80;
#定義使用localhost訪問
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#默認請求地址,如果請求是:192.168.10.80:80/ 那么會進入這個里面的tomcat反向代理地址
#一個location里面只能有一個proxy_pass
location / {
#此處可以配置Tomcat反向代理地址比如:
#此處可以引用上面upstream 的多臺tomcat;也可以單獨配置一臺
proxy_pass http://127.0.0.1:8081/; #配置單臺
#proxy_pass http://webServer/; #引用上面的多臺
#引用上面的多臺配置
# root html; #默認的網站根目錄的位置
#index index.html index.htm; #網站的歡迎頁,起始頁
}
#表示如果請求是:192.168.10.80:80/web 那么會進入這個里面的tomcat反向代理地址
location /web {
#此處引用上面的配置的多臺tomcat
#proxy_pass http://127.0.0.1:8082/;
#proxy_pass http://w eb2Server/; #引用上面的多臺Tomcat配置
}
#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;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ .php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
?03 配置文件組成
1)有但部分組成

? 
03 nginx配置實例-反向代理
1)?實現效果:打開瀏覽器,在瀏覽器地址欄輸入地址www.123.com,跳轉到linux系統tomcat主頁面中
2)?準備工作
(1)在linux系統安裝tomcat,并使用默認端口8080 ?

?(3)在windows系統中通過瀏覽器訪問tomcat服務器

3)?訪問過程分析

4)?具體配置
(1)?在nginx中進行 請求轉發的配置(反向代理)
??????? 
5)?最終測試
?????? 
?
?
04 nginx配置實例--反向代理02
1)實現效果:
使用nginx反向代理,根據訪問的路徑不同跳轉到不同端口的服務中去
Nginx監聽端口為9001
訪問http://127.0.0.1:9001/edu/ 直接跳轉到127.0.0.1:8080
訪問http://127.0.0.1:9001/vod/ 直接跳轉到127.0.0.1:8081
2)準備工作
?。?)?準備兩個tomcat服務器,一個是8080端口,一個是8081端口
?。?)?準備文件夾和測試頁面
3)具體配置
?。?)找到nginx的配置文件,進行反向代理配置

?。?)開放對外訪問的端口號 9001, 8080,,8081
4)最終測試

說明:
? 
?05 nginx配置實例--負載均衡
1)?實現效果
瀏覽器地址欄輸入地址http://192.168.17.129/edu/a.html 負載均衡效果,平均到8080和8081端口中
2)?準備工作
- 準備兩臺tomcat服務器,分別是8080,,8081
- 在兩臺tomcat里面webapps目錄中,創建名稱為edu文件夾,在edu文件夾中創建頁面a.html
3)?在nginx的配置文件中進行負載均衡的配置工作

?06nginx分配服務器策略
第一種:輪詢(默認)
每個請求按照時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,會被自動踢出
第二種: 權重
weight代表權重,默認為1,權重越高被分配的客戶端越多
? 
通過修改weight的值即可
第三種:ip_hash:按照每個請求訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題

? 可以解決session共享問題
第四種:fair:按后端服務器的響應時間來分配請求,響應時間短的優先分配
? 
?07 ngnix配置實例--動靜分離
動靜分離簡單來說就是把動態請求和靜態請求分開,不能理解為把動態頁面和靜態頁面物理分離
????? 
動靜分離的兩種方式
- 純粹的把靜態文件獨立成單獨的域名,放到獨立的服務器上,(兩個tomcat)(主流推崇)
- 動態和靜態文件混合在一起發布,通過nginx來分開處理

1)?準備工作
?
2)? 具體配置
在nginx配置文件中進行配置

?3)最終測試
??? 
? 
?08 nginx配置高可用集群
01 什么是高可用
面臨的問題:如果nginx宕機(即請求無法實現的效果)

?
?高可用

(1)需要兩臺nginx服務器
(2)需要keepalived
(3)需要一個虛擬ip

?
?安裝之后,在etc里面生成目錄keepalived,有文件keepalived.conf

4.完成高可用配置(主從配置)
配置文件keepalived.conf(兩臺服務器都需要)

?
?主服務器

?
?腳本文件

?
?備份服務器

?腳本文件


最終測試:
(1)在瀏覽器地址欄輸入虛擬ip地址 192.168.17.50
?
訪問

(2)把主服務器(192.168.17.129)nginx和keepalived停止(先停keepalived,再停止nginx),然后輸入192.168.17.50,仍能正常訪問
?
?從(備)服務器中的效果

?瀏覽器
?
?09 nginx原理解析

?
?
本文摘自 :https://www.cnblogs.com/

