Nginx 反向代理负载均衡页面缓存URL重写及读写分离具体解释
Posted yxwkaifa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 反向代理负载均衡页面缓存URL重写及读写分离具体解释相关的知识,希望对你有一定的参考价值。
大纲
一、前言
二、环境准备
三、安装与配置nginx
四、Nginx之反向代理
五、Nginx之负载均衡
六、Nginx之页面缓存
七、Nginx之URL重写
八、Nginx之读写分离
注。操作系统为 CentOS 6.4 x86_64 , Nginx 是版本号是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm
一、前言
在前面的几篇博文中我们主要解说了Nginx作为Webserver知识点,基本的知识点有nginx的理论具体解释、nginx作为webserver的操作解说、nginx作为LNMP架构的解说。不清楚的博友能够回头看看。在这一篇博客中我们主要解说。 nginx的反向代理、负载均衡、缓存、URL重写以及读写分离具体解释。好了,以下我们来具体说一说。
二、环境准备
1. 操作系统
-
CentOS 6.4 x86_64
2.软件版本号
-
Nginx 1.4.2
3.实验拓扑
注,实验拓扑见下文。
4.安装yum源
1
2
3
|
[[email protected] ~] # rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm [[email protected] ~] # rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm [[email protected] ~] # rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm |
5.各节点时间同步
1
2
3
|
[[email protected] ~] # ntpdate 202.120.2.101 [[email protected] ~] # ntpdate 202.120.2.101 [[email protected] ~] # ntpdate 202.120.2.101 |
6.关闭防火墙与SELinux
1
2
3
4
5
6
7
8
9
10
11
12
|
[[email protected] ~] # service iptables stop
[[email protected] ~] # chkconfig iptables off
[[email protected] ~] # getenforce
Disabled [[email protected] ~] # service iptables stop
[[email protected] ~] # chkconfig iptables off
[[email protected] ~] # getenforce
Disabled [[email protected] ~] # service iptables stop
[[email protected] ~] # chkconfig iptables off
[[email protected] ~] # getenforce
Disabled |
三、安装Nginx
1.解压
1
|
[[email protected] src] # tar xf nginx-1.4.2.tar.gz |
2.新建nginx用户与组
1
2
3
4
|
[[email protected] src] # groupadd -g 108 -r nginx
[[email protected] src] # useradd -u 108 -r -g 108 nginx
[[email protected] src] # id nginx
uid=108(nginx) gid=108(nginx) 组=108(nginx) |
3.准备编译配置文件
1
2
|
[[email protected] src] # yum install -y pcre-devel openssl-devel [[email protected] nginx-1.4.2] # ./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module
--http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre |
4.编译并安装
1
|
[[email protected] nginx-1.4.2] # make && make install |
5.为nginx提供SysV init脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
[[email protected] ~] # cat /etc/init.d/nginx
#!/bin/sh
# # nginx - this script starts and stops the nginx daemon
# # chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc .d /init .d /functions # Source networking configuration.
. /etc/sysconfig/network # Check that networking is up.
[ "$NETWORKING"
= "no"
] && exit 0
nginx= "/usr/sbin/nginx" prog=$( basename
$nginx) NGINX_CONF_FILE= "/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx
] && . /etc/sysconfig/nginx lockfile= /var/lock/subsys/nginx make_dirs() {
# make required directories
user=`nginx -V 2>&1 |
grep "configure arguments:"
| sed
‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -` options=`$nginx -V 2>&1 |
grep ‘configure arguments:‘ `
for
opt in
$options; do if
[ ` echo
$opt | grep
‘.*-temp-path‘ ` ]; then value=` echo
$opt | cut
-d "=" -f 2`
if
[ ! -d "$value"
]; then # echo "creating" $value
mkdir
-p $value && chown
-R $user $value fi fi done } start() {
[ -x $nginx ] ||
exit 5
[ -f $NGINX_CONF_FILE ] ||
exit 6
make_dirs
echo
-n $ "Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo [ $retval - eq
0 ] && touch
$lockfile return
$retval } stop() {
echo
-n $ "Stopping $prog: " killproc $prog -QUIT
retval=$?
echo [ $retval - eq
0 ] && rm
-f $lockfile return
$retval } restart() {
configtest ||
return $?
stop
sleep
1 start
} reload() {
configtest ||
return $?
echo
-n $ "Reloading $prog: " killproc $nginx -HUP
RETVAL=$?
echo } force_reload() {
restart
} configtest() {
$nginx -t -c $NGINX_CONF_FILE
} rh_status() {
status $prog
} rh_status_q() {
rh_status > /dev/null
2>&1 } case
"$1" in start)
rh_status_q &&
exit 0
$1
;;
stop)
rh_status_q ||
exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q ||
exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q ||
exit 0
;;
*)
echo
$ "Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit
2 esac |
6.为此脚本赋予运行权限
1
|
[[email protected] ~] # chmod +x /etc/init.d/nginx |
7.加入至服务管理列表,并让其开机自己主动启动
1
2
3
4
|
[[email protected] ~] # chkconfig --add nginx
[[email protected] ~] # chkconfig nginx on
[[email protected] ~] # chkconfig nginx --list
nginx 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭 |
8.启动nginx
1
2
|
[[email protected] ~] # service nginx start
正在启动 nginx: [确定] |
9.查看一下port
1
2
|
[[email protected] ~] # netstat -ntlp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3889 /nginx |
10.測试一下
好了,Nginx安装与配置就到这里。以下我们来说一说Nginx的反向代理。
四、Nginx之反向代理
在配置nginx反向代理之间我们得先准备两台測试server,Web1与Web2。
1.安装httpd
1
2
|
[[email protected] ~] # yum install -y httpd [[email protected] ~] # yum install -y httpd |
2.提供測试页面
1
2
|
[[email protected] ~] # echo "<h1>web1.test.com</h1>" > /var/www/html/index.html [[email protected] ~] # echo "<h1>web2.test.com</h1>" > /var/www/html/index.html |
3.启动httpd服务
1
2
3
4
|
[[email protected] ~] # service httpd start
正在启动 httpd: [确定] [[email protected] ~] # service httpd start
正在启动 httpd: [确定] |
4.測试一下
5.简单说一下。正向代理与反向代理
(1).正向代理的概念
正向代理。也就是传说中的代理,他的工作原理就像一个跳板,简单的说。我是一个用户,我訪问不了某站点,可是我能訪问一个代理server。这个代理server呢,他能訪问那个我不能訪问的站点,于是我先连上代理server,告诉他我须要那个无法訪问站点的内容,代理server去取回来。然后返回给我。从站点的角度,仅仅在代理server来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料。这取决于代理告不告诉站点。
结论就是。正向代理 是一个位于client和原始server(origin server)之间的server。为了从原始server取得内容,client向代理发送一个请求并指定目标(原始server),然后代理向原始server转交请求并将获得的内容返回给client。client必需要进行一些特别的设置才干使用正向代理。
(2).反向代理的概念
继续举例:
例用户訪问 http://www.test.com/readme,但www.test.com上并不存在readme页面。他是偷偷从另外一台server上取回来,然后作为自己的内容返回用户,但用户并不知情。这里所提到的
www.test.com
这个域名相应的server就设置了反向代理功能。
结论就是,反向代理正好相反,对于client而言它就像是原始server。而且client不须要进行不论什么特别的设置。
client向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将推断向何处(原始server)转交请求。并将获得的内容返回给client。就像这些内容原本就是它自己的一样。
(3).两者差别
从用途上来讲:
正向代理的典型用途是为在防火墙内的局域网client提供訪问Internet的途径。正向代理还能够使用缓冲特性降低网络使用率。反向代理的典型用途是将防火墙后面的server提供给Internet用户訪问。
反向代理还能够为后端的多台server提供负载平衡。或为后端较慢的server提供缓冲服务。另外,反向代理还能够启用高级URL策略和管理技术。从而使处于不同webserver系统的web页面同一时候存在于同一个URL空间下。
从安全性来讲:
正向代理同意client通过它訪问随意站点而且隐藏client自身,因此你必须採取安全措施以确保仅为经过授权的client提供服务。反向代理对外都是透明的,訪问者并不知道自己訪问的是一个代理。
6.nginx 代理模块
http 代理官方中文文档:http://www.howtocn.org/nginx:nginx%E6%A8%A1%E5%9D%97%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%E4%B8%AD%E6%96%87%E7%89%88:standardhttpmodules:httpproxy
说明:代理模块的指令有非常多我这里仅仅解说重要的proxy_pass,想了解很多其它代理指令请參考官方中文文档。
这个模块能够转发请求到其它的server。
例如以下例:
1
2
3
4
|
location / { proxy_pass http: //localhost :8000; proxy_set_header X-Real-IP $remote_addr; } |
注意,当使用http proxy模块(甚至FastCGI),全部的连接请求在发送到后端server之前nginx将缓存它们,因此,在測量从后端传送的数据时,它的进度显示可能不对。
实验拓扑:
7.配置http反向代理
1
2
3
4
5
6
|
[[email protected] ~] # cd /etc/nginx/ [[email protected] nginx] # cp nginx.conf nginx.conf.bak #备份一个原配置文件 [[email protected] nginx] # vim nginx.conf location / { proxy_pass http: //192 .168.18.201; } |
指令说明:proxy_pass
语法:proxy_pass
URL
默认值:no
使用字段:location, location中的if字段
这个指令设置被代理server的地址和被映射的URI,地址能够使用主机名或IP加port号的形式,比如:proxy_pass
http://localhost:8000/uri/;
8.又一次载入一下配置文件
1
2
3
4
|
[[email protected] ~] # service nginx reload nginx: the configuration
file /etc/nginx/nginx .conf syntax is ok nginx: configuration
file /etc/nginx/nginx .conf
test is successful 又一次加载 nginx: [确定] |
9.測试一下
注,大家能够看到,当我们訪问192.168.18.208时。被
以上是关于Nginx 反向代理负载均衡页面缓存URL重写及读写分离具体解释的主要内容,如果未能解决你的问题,请参考以下文章