nginx 下载配置,反向代理,集群,redis集群

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集群到此完毕










posted @ 2019-06-10 11:32  7411  阅读(2337)  评论(0编辑  收藏  举报