nginx反向代理与缓存服务
2018-08-23 12:13
399 查看
大家,nginx本身其实是做web服务器的,但后来nginx通过各种第三方模块的支持,提供了更多的功能。本次案例就是nginx做后端apache的反向代理和缓存服务。
下图为nginx反向代理和缓存服务的工作原理。
实验环境:
nginx反向代理:192.168.44.131
源码包:nginx-1.14.0.tar.gz、ngx_cache_purge-2.3.tar.gz、nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz
apache1:192.168.44.137
apache2:192.168.44.138
后端apache1和apache2的配置
nginx上的配置(注意你需要修改的地方是##注释处的配置)
刷新几次,通过F12进入谷歌的开发者工具,查看网络-图片的header,可以看到nginx-cache为hit(命中),这样就说明我们的nginx缓存服务成功了。
现在我们down掉apache1,再次访问http://192.168.44.131
发现服务没有中断,而是访问到了apache2上面的网页。表示我们的upstream的健康检查生效。
下图为nginx反向代理和缓存服务的工作原理。
首先,来自互联网的请求发送到nginx反向代理服务器这里,nginx通过proxy_pass代理后端的服务器、通过upstream做到对后端web服务器的将康检查、负载分配等。 后端的apache收到,nginx代理转发的request,进行处理,并返回response nginx代理收到response,做一些处理后,通过proxy_cache和fastcgi_cache进行缓存,然后发给请求的客户端。 ##本次案例还使用了一个sticky模块用以解决session同步的问题
实验环境:
nginx反向代理:192.168.44.131
源码包:nginx-1.14.0.tar.gz、ngx_cache_purge-2.3.tar.gz、nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz
apache1:192.168.44.137
apache2:192.168.44.138
后端apache1和apache2的配置
yum -y install httpd systemctl enable httpd systemctl start httpd firewall-cmd --add-port=8/tcp --permanent firewall-cmd --reload setenforce 0为测试效果,两个apache的网页做的是不一样的,如下
nginx上的配置(注意你需要修改的地方是##注释处的配置)
1、安装nginx 使用tar解压源码包 tar zxf nginx-1.14.0.tar.gz tar zxfngx_cache_purge-2.3.tar.gz tar zxf nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz 安装依赖包 yum -y install gcc gcc-c++ make libtool pcre-devel pcre zlib-devel zlib openssl-devel openssl 创建运行用户 groupadd -r www ##你的用户 useradd -r -g www -s /sbin/nologin www ##你的组 安装 cd nginx-1.14.0/ ./configure --prefix=/usr/local/nginx --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 ##注意这里配置的时候组和用户写你自己的 ##配置根据自己所需可以选择安装那些模块 ##(--add-module=../ngx_cache_purge-2.3 --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42, 这两个模块是我们源码包解压的模块,分别是用来清除缓存和解决session同步问题的负载均衡调度方案) make make install 安装后的简单处理 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin mkdir -p /var/tmp/nginx/client nginx -t ##nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok ##nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful ##出现上面两行表示主配置文件的语法和测试是没有问题的。 nginx firewall-cmd --add-port=80/tcp --permanent firewall-cmd --reload setenforce 0 ##以下是我的nginx.conf的配置(注意配置文件中的缩进) user www; ##你的用户 worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; error_log logs/error.log; worker_rlimit_nofile 10240; pid logs/nginx.pid; events { use epoll; worker_connections 4096; } 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"' '"$upstream_cache_status"'; access_log logs/access.log main; server_tokens off; sendfile on; keepalive_timeout 65; gzip on; gzip_comp_level 6; gzip_http_version 1.1; gzip_proxied any; gzip_min_length 1k; gzip_buffers 16 8k; gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; gzip_vary on; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 75; proxy_send_timeout 75; proxy_read_timeout 75; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_buffering on; proxy_temp_path /usr/local/nginx/proxy_temp; proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m max_size=1000m inactive=600m max_size=2g; upstream backend { sticky; server 192.168.44.137:80 weight=1 max_fails=2 fail_timeout=10s; server 192.168.44.138:80 weight=1 max_fails=2 fail_timeout=10s; ##你的web服务器地址 } server { listen 80; server_name localhost; charset utf-8; location ~/purge(/.*) { allow 127.0.0.1; allow 192.168.44.0/24; 允许的清除缓存的网段 deny all; proxy_cache_purge my-cache $host$1$is_args$args; } location / { index index.php index.html index.htm; proxy_pass http://backend; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } location ~ .*\.(gif|jpg|png|html|htm|css|js|ico|swf|pdf)(.*) { proxy_pass http://backend; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; pr b68 oxy_cache my-cache; add_header Nginx-Cache $upstream_cache_status; proxy_cache_valid 200 304 301 302 8h; proxy_cache_valid 404 1m; proxy_cache_valid any 1d; proxy_cache_key $host$uri$is_args$args; expires 30d; } location /nginx_status { stub_status on; access_log off; allow 192.168.44.0/24; ##允许查看nginx状态的网段 deny all; } } } ##改完配置文件记得重新加载nginx nginx -s reload访问http://192.168.44.131(nginx代理的地址)
刷新几次,通过F12进入谷歌的开发者工具,查看网络-图片的header,可以看到nginx-cache为hit(命中),这样就说明我们的nginx缓存服务成功了。
现在我们down掉apache1,再次访问http://192.168.44.131
systemctl stop httpd
发现服务没有中断,而是访问到了apache2上面的网页。表示我们的upstream的健康检查生效。
相关文章推荐
- 使用Bind提供域名解析服务2部署缓存服务器
- 蛙蛙推荐:设计一个高效的缓存管理服务
- IM 开源项目 群组服务 缓存设计实现之 群组属性
- RHEL 5服务篇—部署DNS域名解析服务(二)搭建缓存域名解析服务器
- [记]SAF 中缓存服务的实现
- nginx的web缓存服务环境部署记录
- 06.14 memcached缓存服务
- 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级
- 稳扎稳打Silverlight(41) - 3.0Tip/Trick之GPU 加速, Out-Of-Browser, 应用程序库缓存, 合并 ResourceDictionary, 应用程序扩展服务, Silverlight 插件对象
- 用arcgis server发布地图服务并建立缓存后,局域网内机器不能访问缓存图像的可能原因
- 构建Varnish缓存代理服务器以及反向代理Nginx服务配置详解
- 使用微软分布式缓存服务Velocity Part 2——博客园 Terrylee
- 【新手总结】在.Net项目中使用Redis作为缓存服务
- Window环境下配置Redis服务的方法及查看缓存数据的工具介绍
- 百万PV架构中redis缓存服务群集部署
- Redis缓存服务搭建及实现数据读写--转载
- nginx反向代理缓存静态文件
- linux的dns缓存,NSCD服务
- Spring项目中添加Redis服务与缓存同步问题
- 蛙蛙推荐:设计一个高效的缓存管理服务