1.淘寶nginx的學習使用,安裝
下載源碼包
http://tengine.taobao.org/download/tengine-2.2.0.tar.gz
2.卸載掉之前,學習yum時候,安裝的nginx軟件,
yum remove nginx -y
3。解決編譯安裝nginx的軟件依賴
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
4.解壓縮源碼包,安裝
源碼編譯安裝三部曲
1.釋放makefile
./configure --prefix=/opt/tnginx220
2.編譯nginx
make
3.編譯安裝
make install
4.編譯完成后,tnginx就可以用了
學習nginx的代碼目錄結構
[root@master tnginx220]# pwd
/opt/tnginx220
[root@master tnginx220]#
[root@master tnginx220]# ll
total 8
drwx------. 2 nobody root 6 Mar 11 08:51 client_body_temp
drwxr-xr-x. 2 root root 4096 Mar 11 08:50 conf #放nginx所有配置文件的地兒
drwx------. 2 nobody root 6 Mar 11 08:51 fastcgi_temp
drwxr-xr-x. 2 root root 40 Mar 11 08:50 html #存放前端 html文件的
drwxr-xr-x. 2 root root 4096 Mar 11 08:50 include
drwxr-xr-x. 2 root root 41 Mar 11 08:52 logs #nginx的日志文件夾
drwxr-xr-x. 2 root root 6 Mar 11 08:50 modules
drwx------. 2 nobody root 6 Mar 11 08:51 proxy_temp
drwxr-xr-x. 2 root root 35 Mar 11 08:50 sbin #存放nginx二進制命令的
drwx------. 2 nobody root 6 Mar 11 08:51 scgi_temp
drwx------. 2 nobody root 6 Mar 11 08:51 uwsgi_temp
5.啟動淘寶nginx
./nginx
6.添加linux的PATH變量,快捷使用nginx命令
echo $PATH
PATH="/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tnginx220/sbin"
7.學習nginx的主配置文件nginx.conf
http內核模塊
//公共的配置定義在http{}
http { //http層開始
...
//使用Server配置網站, 每個Server{}代表一個網站(簡稱虛擬主機)
'server' {
listen 80; //監聽端口, 默認80
server_name localhost; //提供服務的域名或主機名
access_log host.access.log //訪問日志
//控制網站訪問路徑
'location' / {
root /usr/share/nginx/html; //存放網站代碼路徑
index index.html index.htm; //服務器返回的默認頁面文件
}
//指定錯誤代碼, 統一定義錯誤頁面, 錯誤代碼重定向到新的Locaiton
error_page 500 502 503 504 /50x.html;
}
...
//第二個虛擬主機配置
'server' {
...
}
include /etc/nginx/conf.d/*.conf; //包含/etc/nginx/conf.d/目錄下所有以.conf結尾的文件
} //http層結束
8.基於域名的多虛擬主機實戰
(一個服務器上,可以運行兩個乃至多個網站)
1。環境准備,准備好2個域名 ,這里是模擬的本地域名解析 ,找到hosts文件
由於我們是想配置windows,可以訪問不同的 域名,因此配置windows的hosts
編輯文件 C:\Windows\System32\drivers\etc\hosts
寫入
192.168.11.229 s17dnf.com
192.168.11.229 s17xiaohua.com
9.配置nginx支持多虛擬主機
修改nginx.conf 修改2個server虛擬主機的配置
#dnf的虛擬主機
server {
listen 80;
server_name s17dnf.com;
# 當我們訪問s17dnf.com:80/的時候,就進入這個虛擬主機,且找到這個location,進行網站資源分配
location / {
root /opt/s17dnf/;
index index.html;
}
}
#第二個虛擬主機,s17校花網
server{
listen 80;
server_name s17xiaohua.com;
location / {
root /opt/s17xiaohua/;
index index.html;
}
}
分別修改兩個網址的根目錄數據
mkdir -p /opt/{s17dnf,s17xiaohua}
分別在/opt/s17dnf/創建index.html
/opt/s17xiaohua/創建index.html
10.修改完配置文件,檢測語法
nginx -t
11。平滑加載nginx(不重啟nginx,重新讀取配置文件)
nginx -s reload
12.nginx的訪問日志功能
編輯 nginx.conf
打開注釋
http {
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;
13.網站的404頁面優化
編輯nginx.conf ,配置如下
server {
listen 80;
server_name s17dnf.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /opt/s17dnf;
index index.html index.htm;
}
#打開這個參數的配置,開啟錯誤頁面
error_page 404 /404.html;
error_page 401 /401.html;
}
14.拒絕ip訪問
location / {
deny 你想限制的ip;
root /opt/s17dnf;
index index.html index.htm;
}
15.nginx的反向代理
生活中的代理
我們百姓 -> 房屋中介 -> 房東
百姓 -> 黃牛手里有票 -> 12306的火車票,賣完了
瀏覽器客戶端 -> nginx 這個代理 -> django
瀏覽器 -> django
16.nginx反向代理的實現
1.實驗環境准備
192.168.11.229 真實資源服務器,模擬django ,理解為房東的房屋資源
192.168.11.136 nginx代理服務器 ,理解為 房屋中介
2.思路
我們作為客戶端,訪問 代理服務器, ,代理服務器,將資源服務器上的東西,進行返回
3.配置 資源服務器 192.168.11.229 s17dnf.com
4.配置代理服務器 192.168.11.136
修改192.168.11.136這台機器的nginx配置文件,開啟反向代理
配置nginx.conf的server{}如下
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
#反向代理參數,當我們請求192.168.11.136:80/的時候,進入這里server,然后location進行資源分配
proxy_pass http://192.168.11.229; #就是間接的訪問了 192.168.11.229:80/
}
}
17.nginx負載均衡是發送給一組服務器池
思路介紹:
#定義一個負載均價池
upstream myserver {
server 192.168.11.229;
server 192.168.11.xx;
}
#通過反向代理轉發
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
#反向代理參數,當我們請求192.168.11.136:80/的時候,進入這里server,然后location進行資源分配
proxy_pass myserver; #就是間接的訪問了 192.168.11.229:80/
}
}
18.配置nginx負載均衡
環境准備,三台服務器
三台機器都是通過nginx實現的
192.168.11.136 反向代理服務器
192.168.11.229 資源服務器1 這個機器是返回的dnf頁面
192.168.11.176 資源服務器2 這個配置的是 index.html 來了老弟
1.配置反向代理服務器 192.168.11.136
修改nginx.conf如下參數
#定義負載均衡池
upstream s17server {
server 192.168.11.229;
server 192.168.11.176;
}
#轉發請求給負載均衡池
location / {
proxy_pass http://s17server;
}
2.此時通過負載均衡器 192.168.11.136,進行訪問測試,默認是輪詢機制
3.nginx負載均衡算法
調度算法 概述
輪詢 按時間順序逐一分配到不同的后端服務器(默認)
weight 加權輪詢,weight值越大,分配到的訪問幾率越高
upstream s17server {
server 192.168.11.229 weight=8;
server 192.168.11.176 weight=2;
}
ip_hash 每個請求按訪問IP的hash結果分配,這樣來自同一IP的固定訪問一個后端服務器
url_hash 按照訪問URL的hash結果來分配請求,是每個URL定向到同一個后端服務器
least_conn 最少鏈接數,那個機器鏈接數少就分發
19.redis哨兵配置
redis主從
一主兩從的方案
1.環境准備,准備一主兩從的redis架構
redis-6379.conf
port 6379
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/opt/redis/6379/"
redis-6380.conf
port 6380
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/opt/redis/6380/"
slaveof 127.0.0.1 6379
redis-6381.conf
port 6381
daemonize yes
logfile "6381.log"
dbfilename "dump-6381.rdb"
dir "/opt/redis/6381/"
slaveof 127.0.0.1 6379
2.准備三個數據文件夾
mkdir -p /opt/redis/{6379,6380,6381}
3。分別啟動三個數據庫
[root@master sbredis]# redis-server redis-6379.conf
[root@master sbredis]# redis-server redis-6380.conf
[root@master sbredis]# redis-server redis-6381.conf
4.檢測主從狀態
redis-cli -p 6379 info replication
redis-cli -p 6380 info replication
redis-cli -p 6381 info replication
5.准備三個redis哨兵,進行檢測主從狀態
准備三個哨兵的配置文件,同時也要創建三個哨兵的文件夾mkdir -p /opt/{26379,26380,26381}
redis-26379.conf
port 26379
dir /opt/redis/26379/
logfile "26379.log"
daemonize yes
sentinel monitor s17ms 127.0.0.1 6379 2
sentinel down-after-milliseconds s17ms 30000
sentinel parallel-syncs s17ms 1
sentinel failover-timeout s17ms 180000
redis-26380.conf
redis-26381.conf
#三個配置文件,僅僅是端口的不同,通過命令快速生成配置文件
[root@master sbredis]# sed "s/26379/26380/g" redis-26379.conf > redis-26380.conf
[root@master sbredis]# sed "s/26379/26381/g" redis-26379.conf > redis-26381.conf
6.分別啟動三個哨兵
[root@master sbredis]# redis-sentinel redis-26379.conf
[root@master sbredis]# redis-sentinel redis-26380.conf
[root@master sbredis]# redis-sentinel redis-26381.conf
7.檢測哨兵,主從狀態
redis-cli -p 26379 info sentinel
#看到如下信息,就和我一樣了
[root@master sbredis]# redis-cli -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=s17ms,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
8.測驗,干掉master redis,是否自動切換
9.再次啟動redis 6379 查看它是否加入 主從集群
redis-cluster搭建
1.准備6個數據庫節點,也就是6個redis實例,也就是6個配置文件
配置文件如下
redis-7000.conf redis-7002.conf redis-7004.conf
redis-7001.conf redis-7003.conf redis-7005.conf
配置文件,內容如下
port 7000
daemonize yes
dir "/opt/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-require-full-coverage no
分別准備6個redis節點,通過sed命令快速創建,僅僅是端口的區分
[root@master clusterredis]# sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf
[root@master clusterredis]#
[root@master clusterredis]# sed "s/7000/7002/g" redis-7000.conf > redis-7002.conf
[root@master clusterredis]# sed "s/7000/7003/g" redis-7000.conf > redis-7003.conf
[root@master clusterredis]#
[root@master clusterredis]#
[root@master clusterredis]#
[root@master clusterredis]# sed "s/7000/7004/g" redis-7000.conf > redis-7004.conf
[root@master clusterredis]# sed "s/7000/7005/g" redis-7000.conf > redis-7005.conf
2.分別啟動6個數據庫實例
root@master clusterredis]# redis-server redis-7000.conf
[root@master clusterredis]# redis-server redis-7001.conf
[root@master clusterredis]# redis-server redis-7002.conf
[root@master clusterredis]# redis-server redis-7003.conf
[root@master clusterredis]# redis-server redis-7004.conf
[root@master clusterredis]# redis-server redis-7005.conf
3.開始分配redis數據庫的槽位, 通過ruby腳本,自動化分配槽位
4.配置ruby的解釋器環境
1.下載源碼
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
2.釋放編譯文件
#安裝ruby
tar -xvf ruby-2.3.1.tar.gz
./configure --prefix=/opt/ruby/
make && make install
3.配置ruby的環境變量
4.下載ruby操作redis的模塊
wget http://rubygems.org/downloads/redis-3.3.0.gem
5.通過ruby的包管理工具安裝它
gem install -l redis-3.3.0.gem
6.通過ruby的腳本,自動化分配redis虛擬槽位,開啟集群功能
/opt/redis-4.0.10/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
7.驗證集群是否開啟
redis-cli -p 7000 cluster info
8.登陸redis集群,寫入數據,查看數據流向
數據會在集群中,在節點間重定向
9.redis集群到此完畢