nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
来源:互联网 发布:阿里云开放华北区域 编辑:程序博客网 时间:2024/06/05 11:51
一、后端的Real Server的准备
两台RS服务器(192.168.1.104/192.168.1.105)要事先配置好nginx。
并且nginx访问均是用ip访问即可,方便实验效果!
二、nginx代理服务器192.168.1.103(假设外网ip是111.112.114.23)的配置
1.nginx反向代理和缓存
0)安装依赖软件(如果是ubuntu系统,则sudo apt-get update && sudo apt-get upgrade && sudo apt-get install libpcre3 libpcre3-dev zlib1g-dev libssl-dev build-essential openssl libssl0.9.8 libssl-dev)
[root@node1 ~]# yum install -y pcre pcre-devel openssl openssl-devel gcc
1)首先添加用户nginx,实现以之运行nginx服务进程:
[root@node1 ~]# groupadd -r nginx
[root@node1 ~]# useradd -r -g nginx -s /bin/false -M nginx #-M参数表示创建用户时不创建用户家目录
2)接着开始编译和安装:
[root@node1 ~]# cd /usr/loca/src
[root@node1 src]# wget http://nginx.org/download/nginx-1.8.0.tar.gz
[root@node1 src]# tar -zxvf nginx-1.8.0.tar.gz
[root@node1 src]# cd nginx-1.8.0
[root@node1 nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre
[root@node1 src]# make && make install
#以上编译安装nginx后,--http-client-body-temp-path、--http-proxy-temp-path、--http-fastcgi-temp-path、--http-uwsgi-temp-path、--http-scgi-temp-path默认的路径就在/usr/local/nginx下,分别是client_body_temp、proxy_temp、fastcgi_temp、scgi_temp、uwsgi_temp
[root@node1 src]# cd /usr/local/nginx/
[root@node1 nginx]# ls
conf html logs sbin
[root@node1 nginx]# /usr/local/nginx/sbin/nginx //nginx启动后,就会出现下面的目录
[root@node1 nginx]# ls /usr/local/nginx/
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
3)反代的实现,和缓存的开启(可参考:nginx缓存配置的操作记录梳理)
[root@node1 src]# vim /usr/local/nginx/conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#要想开启nginx的缓存功能,需要添加此处的两行内容!
#这一行分别表示:定义缓存存储目录,手动创建;缓存级别,表示缓存目录的第一级目录是1个字符,第二级目录是2个字符;内核中建立用于缓存缓存数据源数据的空间,查找缓存的时候,先从这个内核空间中找到,缓存数据的源数据,然后再到对应目录中查找缓存;这一行分别表示:缓存空间最大值;缓存的数据,60分钟内没有被访问过就删除
proxy_cache_path /var/www/cache levels=1:2 keys_zone=mycache:20m max_size=2048m inactive=60m;
#这一行分别表示:创建缓存的时候可能生成一些临时文件存放的位置,自动创建
proxy_temp_path /var/www/cache/tmp;
server {
listen 80;
server_name localhost;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://192.168.1.104/; #代理哪个web服务器
proxy_cache mycache; #内存缓存源数据空间名字,对应我们前面的设定
proxy_cache_valid 200 302 60m; #页面返回码为200 302 的缓存60分
proxy_cache_valid 404 1m; #页面错误响应吗404缓存时间1分
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
[root@node1 src]# mkdir /var/www/cache
[root@node1 src]# /usr/local/nginx/sbin/nginx
4)验证结果
访问http://111.112.114.23,则显示的是http://192.168.1.104的访问结果(如上配置,RS2的反向代理类似)
---------------------------------------------------------------------------------------------------------
再看如下的一个实例配置(nginx.conf文件中已开启缓存功能)
upstream LB-WWW {
ip_hash;
server 192.168.1.101:80 max_fails=3 fail_timeout=30s weight=100;
#max_fails = 3 为允许失败的次数,默认值为1
server 192.168.1.102:80 max_fails=3 fail_timeout=30s weight=100;
#fail_timeout = 30s(也可以是fail_timeout = 30,即后面的秒单位不带) 当max_fails次失败后,暂停将请求分发到该后端服务器的时间
server 192.168.1.118:80 max_fails=3 fail_timeout=30s weight=50;
#由于这三台机器中,前两台配置高,后一台118机器配置低点,三台机器开启的nginx线上数是一样的,所以118机器设置的weight权重低。
}
#weight权限设置低,命中率就会低,这样机器压力就会减轻(若是权重不设置低点,也可以通过减少nginx线程数来减少机器压力);
server {
listen 80;
server_name www.wangshibo.com;
access_log
/usr/local/nginx/logs/www-access
.log main;
error_log
/usr/local/nginx/logs/www-error
.log;
location / {
proxy_pass http:
//LB-WWW
;
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
#跟后端服务器连接超时时间,发起握手等候响应时间
proxy_send_timeout 300;
#后端服务器回传时间,就是在规定时间内后端服务器必须传完所有数据
proxy_read_timeout 600;
#连接成功后等待后端服务器的响应时间,已经进入后端的排队之中等候处理
proxy_buffer_size 256k;
#代理请求缓冲区,会保存用户的头信息以供nginx进行处理
proxy_buffers 4 256k;
#同上,告诉nginx保存单个用几个buffer最大用多少空间
proxy_busy_buffers_size 256k;
#如果系统很忙时候可以申请最大的proxy_buffers
proxy_temp_file_write_size 256k;
#proxy缓存临时文件的大小
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
proxy_cache mycache;
#内存缓存源数据空间名字,对应我们前面的设定
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
}
}
proxy_set_header参数解释
1)proxy_redirect off
语法:proxy_redirect [ default|off|redirect replacement ]
默认值:proxy_redirect default
使用字段:http, server, location
proxy_redirect功能比较强大,其作用是对发送给客户端的URL进行修改。
如果需要修改从被代理服务器传来的应答头中的
"Location"
和
"Refresh"
字段,可以用这个指令设置。
设置为off,表示禁止所有的proxy_redirect指令.
假设被代理服务器返回Location字段为:http:
//localhost
:8000
/two/some/uri/
这个指令:
proxy_redirect http:
//localhost
:8000
/two/
http:
//frontend/one/
;
将Location字段重写为http:
//frontend/one/some/uri/
。
在代替的字段中可以不写服务器名:
proxy_redirect http:
//localhost
:8000
/two/
/;
这样就使用服务器的基本名称和端口,即使它来自非80端口。
如果使用“default”参数,将根据location和proxy_pass参数的设置来决定。
例如下列两个配置等效:
location
/one/
{
proxy_pass http:
//upstream
:port
/two/
;
proxy_redirect default;
}
location
/one/
{
proxy_pass http:
//upstream
:port
/two/
;
proxy_redirect http:
//upstream
:port
/two/
/one/
;
}
在指令中可以使用一些变量:
proxy_redirect http:
//localhost
:8000/ http:
//
$host:$server_port/;
这个指令有时可以重复:
proxy_redirect default;
proxy_redirect http:
//localhost
:8000/ /;
proxy_redirect ;
/;
参数off将在这个字段中禁止所有的proxy_redirect指令:
proxy_redirect off;
proxy_redirect default;
proxy_redirect http:
//localhost
:8000/ /;
proxy_redirect ;
/;
利用这个指令可以为被代理服务器发出的相对重定向增加主机名:
---------------------------------------------------------------------------------------------------
实例说明:
比如在做nginx反向代理时出了一点点问题,原来后端节点用的端口是8080,通过反向代理后,使用wireshark抓包发现location头域数值为http:
//192
.168.1.154:8080
/huihui/
,
如果把这个返回给客户端肯定是不可以的,看起来别扭而且还暴露了后端节点的具体信息。所以在这里用到了nginx的proxy_redirect指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值。
前期配置(暴露了后端节点信息)
[root@localhost nginx]
# cat test.conf
server {
listen 80;
- nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
- Nginx反向代理+负载均衡+健康探测+缓存
- Nginx的反向代理,负载均衡,缓存,URL重写以及读写分离
- nginx反向代理,负载均衡,缓存的配置文件,带注释
- Nginx: Nginx反向代理、负载均衡、缓存、URL重写及读写分离
- nginx配置:反向代理 负载均衡 后端健康检查 缓存
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- (转)NGINX 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- 在搜索引擎强调原创之下如何正确发布外链
- 使用ROBOCOPY增量备份文件
- nfs 多台服务器共享目录
- Python的发展方向
- RabbitMQ消息队列(一): Detailed Introduction 详细介绍
- nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
- jsonp详解
- 51nod-1128-正整数分组 V2
- 新的开始
- sql中的 IF 条件语句的用法
- google实战tensorlfow之mnist
- android比较好的资源地址
- iOS 禁止UITableView区头滚动
- Callable与Future