nginx反向代理缓存服务器的构建
一:代理服务可简单的分为正向代理和反向代理:
正向代理:用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上, 然后由代理服务器去访问Web服务器,并将Web服务器的Response回传给客户端:
反向代理:与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提供的服务就是反向代理. 反向代理服务器接受来自Internet的连接,然后将请求转发给内部网络上的服务器,并将Response回传给Internet上请求连接的客户端。
1. 反向代理(Reverse Proxy)方式是指以代理服务器来接受客户端的连接请求,然后将请求转发给网络上的web服务器(可能是apache、nginx、tomcat、iis等),并将从web服务器上得到的结果返回给请求连接的客户端。
2. 反向代理的作用:
保护网站的安全、通过配置缓存功能加速web请求、实现负载均衡
二、什么是nginx
1.Nginx简介:
Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
它是由俄罗斯程序员IgorSysoev所开发的。起初是供俄国大型的门户网站及搜索引擎Rambler(俄语:Рамблер)使用。此软件BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OSX、Solaris,以及Microsoft Windows等操作系统中运行。
3. Nginx的核心特点:
跨平台、配置异常简单、非阻塞、高并发连接、事件驱动、master/worker结构、内存消耗小、内置的健康检查功能、节省带宽、稳定性高。
三、Nginx+apache构筑Web服务器集群的负载均衡
配置nginx作为反向代理和负载均衡,同时利用其缓存功能,将静态页面在nginx缓存,以达到降低后端服务器连接数的目的并检查后端web服务器的健康状况。
1、安装nginx
环境:
OS:centos7.2
nginx:192.168.31.83
apache1:192.168.31.141
apache2:192.168.31.250
安装zlib-devel、pcre-devel等依赖包
[root@www ~]# yum -y install gcc gcc-c++make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel
注:
结合proxy和upstream模块实现后端web负载均衡
使用proxy模块实现静态文件缓存
结合nginx默认自带的ngx_http_proxy_module模块 和ngx_http_upstream_module模块实现后端服务器的健康检查,也可以使用第三方模块nginx_upstream_check_module
使用nginx-sticky-module扩展模块实现Cookie会话黏贴(保持会话)
使用ngx_cache_purge实现更强大的缓存清除功能
上面提到的2个模块都属于第三方扩展模块,需要提前下好源码,然后编译时通过--add-moudle=src_path一起安装。
安装nginx
[root@www ~]# groupadd www #添加www组
[root@www ~]# useradd -g www www -s/sbin/nologin #创建nginx运行账户www并加入到www组,不允许www用户直接登录系统
#tar zxf nginx-1.10.2.tar.gz
#tar zxf ngx_cache_purge-2.3.tar.gz
#tar zxf master.tar.gz
# cd nginx-1.10.2/
[root@www nginx-1.10.2]# ./configure--prefix=/usr/local/nginx1.10 --user=www --group=www --with-http_stub_status_module--with-http_realip_module --with-http_ssl_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 --with-pcre --add-module=../ngx_cache_purge-2.3--with-http_flv_module --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42
[root@www nginx-1.10.2]# make && make install
注:nginx的所有模块必须在编译的时候添加,不能再运行的时候动态加载。
优化nginx程序的执行路径
[root@www nginx-1.10.2]# ln -s /usr/local/nginx1.10/sbin/nginx/usr/local/sbin/
[root@www nginx-1.10.2]# nginx -t
[root@www nginx-1.10.2]# mkdir -p/var/tmp/nginx/client
[root@www nginx-1.10.2]# chown -Rwww:www /var/tmp/nginx/
[root@www nginx-1.10.2]# nginx -t
nginx: the configuration file/usr/local/nginx1.10/conf/nginx.conf syntax is ok
nginx: configuration file/usr/local/nginx1.10/conf/nginx.conf test is successful
2、编写nginx服务脚本:
[root@www ~]# vi /etc/init.d/nginx内容如下:
#!/bin/bash
# chkconfig: 2345 99 20
# description: Nginx Service ControlScript
PROG="/usr/local/nginx1.10/sbin/nginx"
PIDF="/usr/local/nginx1.10/logs/nginx.pid"
case "$1" in
start)
netstat -anplt |grep ":80"&> /dev/null &&pgrep "nginx" &> /dev/null
if [ $? -eq0 ]
then
echo "Nginx service alreadyrunning."
else
$PROG -t &> /dev/null
if [ $? -eq0 ] ; then
$PROG
echo "Nginx service startsuccess."
else
$PROG -t
fi
fi
;;
stop)
netstat -anplt |grep ":80"&> /dev/null &&pgrep "nginx" &> /dev/null
if [ $? -eq0 ]
then
kill -s QUIT $(cat $PIDF)
echo "Nginx service stopsuccess."
else
echo "Nginx service alreadystop"
fi
;;
restart)
$0 stop
$0 start
;;
status)
netstat -anplt |grep ":80"&> /dev/null &&pgrep "nginx" &> /dev/null
if [ $? -eq0 ]
then
echo "Nginx service isrunning."
else
echo "Nginx is stop."
fi
;;
reload)
netstat -anplt |grep ":80"&> /dev/null &&pgrep "nginx" &> /dev/null
if [ $? -eq0 ]
then
$PROG -t &> /dev/null
if [ $? -eq0 ] ; then
kill -s HUP $(cat $PIDF)
echo "reload Nginx configsuccess."
else
$PROG -t
fi
else
echo "Nginx service is notrun."
fi
;;
*)
echo "Usage: $0{start|stop|restart|reload}"
exit 1
esac
[root@www ~]# chmod +x /etc/init.d/nginx
[root@www ~]# chkconfig --add nginx
[root@www ~]# chkconfignginx on
[root@www ~]# service nginx start
Nginx service start success.
[root@www ~]# service nginx status
Nginx service is running.
[root@www ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3977/nginx: master
[root@www ~]# firewall-cmd --permanent--add-port=80/tcp
success
[root@www ~]# firewall-cmd --reload
Success
注:如果你想在已安装好的nginx上添加第三方模块,依然需要重新编译,但为了不覆盖你原有的配置,请不要make install,而是直接拷贝可执行文件:
# nginx–V
[root@wwwnginx-1.10.2]#./configure--add-module=…… #你的第三方模块
[root@wwwnginx-1.10.2] #make后不要make install,改为手动拷贝,先备份
[root@wwwnginx-1.10.2] #cp /usr/local/nginx1.10/sbin/nginx/usr/local/nginx1.10/sbin/nginx.bak
[root@wwwnginx-1.10.2] #cp objs/nginx /usr/local/nginx1.10/sbin/nginx
配置nginx反向代理:反向代理+负载均衡+健康探测
查看nginx加载的模块
[root@www ~]## nginx -V
nginx version: nginx/1.10.2
built by gcc 4.8.5 20150623 (Red Hat4.8.5-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb2013
TLS SNI support enabled
configure arguments:--prefix=/usr/local/nginx1.10 --user=www --group=www --with-http_stub_status_module--with-http_realip_module --with-http_ssl_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 --with-pcre--add-module=../ngx_cache_purge-2.3 --with-http_flv_module--add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42
nginx的所有模块必须在编译的时候添加,不能再运行的时候动态加载
3、nginx-sticky-module模块:
这个模块的作用是通过cookie黏贴的方式将来自同一个客户端(浏览器)的请求发送到同一个后端服务器上处理,这样一定程度上可以解决多个backend servers的session同步的问题 —— 因为不再需要同步,而RR轮询模式必须要运维人员自己考虑session同步的实现。
另外内置的ip_hash也可以实现根据客户端IP来分发请求,但它很容易造成负载不均衡的情况,而如果nginx前面有CDN网络或者来自同一局域网的访问,它接收的客户端IP是一样的,容易造成负载不均衡现象。nginx-sticky-module的cookie过期时间,默认浏览器关闭就过期。
这个模块并不合适不支持 Cookie 或手动禁用了cookie的浏览器,此时默认sticky就会切换成RR。它不能与ip_hash同时使用。
4、load-balance其它调度方案:
nginx的负载均衡模块支持的其它调度算法:轮询(默认)、ip_hash、least_conn、
url_hash、fair
5、负载均衡与健康检查:
nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到下一个节点来提供访问。
6、nginx的proxy缓存使用:
缓存也就是将js、css、image等静态文件从后端服务器缓存到nginx指定的缓存目录下,既可以减轻后端服务器负担,也可以加快访问速度,但这样缓存及时清理成为了一个问题,所以需要ngx_cache_purge这个模块来在过期时间未到之前,手动清理缓存。
proxy模块中常用的指令时proxy_pass和proxy_cache.
nginx的web缓存功能的主要是由proxy_cache、fastcgi_cache指令集和相关指令集完成,proxy_cache指令负责反向代理缓存后端服务器的静态内容,fastcgi_cache主要用来处理FastCGI动态进程缓存
清除缓存:
上述配置的proxy_cache_purge指令用于方便的清除缓存,但必须按照第三方的ngx_cache_purge模块才能使用
使用ngx_cache_purge模块清除缓存(直接删除缓存目录下的文件也算一种办法):
GET方式请求URL
即使用配置文件中的location ~ /purge(/.*)
浏览器访问http://192.168.31.83/purge/your/may/path来清除缓存
备注:
(1)purge是ngx_cache_pure模块指令
(2)your/may/path是要清除的缓存文件URL路径
扩展知识1:
nginx修改版本等信息
1、vi/usr/local/src/nginx-1.0.12/src/core/nginx.h #编译前编辑
#define nginx_version
#define NGINX_VERSION
#define NGINX_VER
#define NGINX_VAR
修改上面的信息,即可更改nginx显示版本。
2、vi/usr/local/src/nginx-1.0.12/src/http/ngx_http_special_response.c #编译前编辑
static u_charngx_http_error_full_tail[] =
static u_charngx_http_error_tail[] =
修改上面的信息为你自己的。
3、vi/usr/local/src/nginx-1.0.12/src/http/ngx_http_header_filter_module.c #编译前编辑
static char ngx_http_server_string[]=
修改上面的信息为你自己的。
4、编译完成之后,修改/usr/local/nginx/conf目录下面
fastcgi.conf、fastcgi.conf.default、fastcgi_params、fastcgi_params.default
这四个文件里面的版本名称
/usr/local/nginx/sbin/nginx -V #查看nginx版本号
nginx反向代理缓存服务器的构建的更多相关文章
- nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...
- nginx反向代理-后端服务器组设置
nginx服务器的反向代理时其最常用的重要功能之一,在实际工作中应用广泛,涉及的配置指令也比较多.下面会尽量详细地介绍对应的指令,及其使用状态. 反向代理一般是互联网需要向内网拉取资源,比如访问一个w ...
- nginx反向代理缓存配置
关于nginx的反向代理缓存配置,用的最多的就是CDN公司,目前CDN公司用纯nginx做缓存的已经很少了,基本都用tnginx(阿里的).openresty:但是这两款软件都是基于nignx开发的, ...
- 解决nginx反向代理缓存不起作用的问题
昨天尝试用nginx搭建nuget镜像服务器,镜像服务器需要两个功能:1)反向代理:2)内容缓存. 用nginx做反向代理,配置非常简单,只需在/etc/nginx/nginx.conf中添加一个包含 ...
- Windows Server2012 r2 nginx反向代理图片服务器
1.下载nginx http://nginx.org/en/download.html,本人下载的1.18.0版本 2.下载 Windows Service Wrapper(winsw.exe) v ...
- 服务器Nginx 反向代理 其他服务器 8181端口 失败的问题
排查方向: 1. 检查服务器的防火墙 2. 检查安全策略 3. 关掉Nginx 服务器上的安全软件 如360 软件会照成这个问题 来自为知笔记(Wiz)
- Nginx 反向代理Tomcat服务器获取真实IP问题
1.nginx.conf 配置 修改 Server location配置 增加 proxy_set_header X-Real-IP $remote_addr; #保留代理之前的真实客户端ip pro ...
- nginx 反向代理apache服务器 配置java与PHP共存环境
listen 80; listen 443; ssl on; ssl_certificate /passport.crt; ssl_certificate_key /passport.key; ssl ...
- 正向代理 forward proxy、反向代理 reverse proxy、透明代理 transparent proxy nginx反向代理原理和配置讲解 防止外部客户机获取内部内容服务器的重定向 URL 缓存命中
[大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器 - Edison Chou - 博客园http://www.cnblogs.com/edisonchou/p/4126742.html 图 ...
随机推荐
- stm32 map文件的分析
相信有较大项目开发经验的朋友都曾遇到内存溢出的问题,那么大家都是如何分析这类问题的呢?大家遇到HardFault_Handler 有对map分析过吗? 首先讲述一下关于map在MDK-ARM中的配置. ...
- layui禁用侧边导航栏点击事件
layui是一款优秀的前端模块化css框架,作者是贤心 —— 国内的一位前端大佬. 我用layui做过两个完整的项目,对她的感觉就是,这货非常适合做后台管理界面,且基于jquery,很容易上手.当然, ...
- swift4.2 打印所有系统字体
func showAllFonts(){ let familyNames = UIFont.familyNames var index:Int = 0 for familyName in family ...
- SAP ALV 修改数字需要添零问题
问题描述: 修改左列数字,如果想要输入3,那么要输3000,敲空格,才会在ALV里显示为3. 原因: 变量ERFMG引用的域类型小数点位置为3位,当输入数字1时,默认往前数3位,作为小数点位置,变成0 ...
- [leetcode]103. Binary Tree Zigzag Level Order Traversal二叉树来回遍历
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- 监测多个textFiled.text的长度同时不小于0
#pragma mark - 显示超过11位不让输入 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: ...
- webpack(一) 安装使用
(一)webpack的安装 webpack是基于node.js,因此需要安装node.js. 安装好node.js 后,全局安装webpack,命令如下 npm install webpack -g ...
- JSP使用sessionScope获取session值
场景:有些实体对象可以放到HttpSession对象中,保正在一个会话期间可以随时获取这个对象的属性,例如可以将登录用户的信息写入session,以保证页面随时可以获取并显示这个用户的状态信息.下面以 ...
- centos7下swoole1.9的安装与HttpServer的使用
一.下载swoole源码包 https://github.com/swoole/swoole-src/releases 如:swoole-src-1.9.6.tar.gz 二.编译安装 > yu ...
- Split Array into Consecutive Subsequences
659. Split Array into Consecutive Subsequences You are given an integer array sorted in ascending or ...