第一,   nginx 的介绍

1 nginx 从0.7.48 版本后凯斯,支持烈士squid的缓存功能。该缓存是把URL及相关组合当作key,然后用md5编码哈希后保存在硬盘上,因此nginx 支持任意的URl连接,同时也支持404/301/302 这样非200 状态码。虽然目前官方nginx web 缓存服务器只能为指定的URL或者状态码设置过期时间,但是不支持类似squid的purge 指令,需要手动清除缓存页面,但是,通过第三方的nginx模块,可以清楚指定URL的缓存,当然nginx的web缓存服务主要是由proxy_cache相关指令集和fastcgi_cache相关指令集构成,而proxy_cache 主要是用于反向代理,又来缓存后端服务器的内容源而Fastcgi_cache 主要缓存的是动态程序

下载相关的软件包

prce-8.00.tar.gz    ngx_cache_purge-1.2.tar.gz   nginx-0.8.53.tar.gz

第三 安装相关的软件包

#tar  xvf  prce-8.00.tar.gz

#cd  prce-8.00

#./configure

#make && make install

#useradd -s /sbin/nologin  www

#cd ../

#tar –xvf ngx_cache_purge-1.2.tar.gz

#tar  nginx-0.8.53.tar.gz

#cd nginx-0.8.53

#./configure  --user=www –group=www –add-module=../ngx_cache_purge-1.2 –prefix=/usr/local/nginx  --with-http_stub_status_module   --with-http_ssl_module

#make && make install

第四,修改并配置nginx

#cd /usr/local/nginx/conf

#vim nginx.conf

#nginx 运行的用户 user  nobody;

#开启的进程数

worker_processes  1;

#定义错误日志的路径及其日志级别

error_log /usr/local/nginx/logs/error.log crit;

#nginx 的进程

pid        logs/nginx.pid;

#specifiles the value for maximum file descriptors that can be opened by this process

#文件句柄数,和系统单进程打开的文件数相同,不必理会进程个数

worker_rlimit_nofile  65535;

events {

use epoll;

worker_connections  1024; #定义的是单个进程的连接数,该值受系统进程打开文件数限制,需要修改打开的文件句柄数,但是max_client = worker_proxesses X work_connextions,

}

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" '

'"request_method $scheme://$host$request_uri $server_protocol" $status $body_bytes_sent'

'"$http_user_agent" "$http_x_forwarded_for"';

# 指定服务器名称哈希的大小,hash bucket size 等于一路处理器缓存大小,与server_names_hash_max_size 共同控制保存服务器名的HASH表

server_names_hash_bucket_size 128;

# 以下两项是设定客户端请求Header头缓存去的大小,4 为个数。128k 为大小。申请4个128k。当http 的uri太长或者request header 过大时会报414  Request URI too large 或者400 bad request

client_header_buffer_size 32k;

large_client_header_buffers 4 128k;

#HTTP请求的BODY 最大限制,若超出此值,报413 Request Entity Too Lager

client_max_body_size 8m;

#缓冲去代理用户请求的最大字节数,可以理解为先保存本地,然后在传给用户

client_body_buffer_size 32k;

#不允许客户端主动关闭连接,如果该项为设置在nginx的日志中可能出现499 错误

proxy_ignore_client_abort on;

#nginx 和后端服务器连接超时时间 发起握手等候响应时间

proxy_connect_timeout 5;

#连接成功后等候后端服务器响应时间,其实已经进入后端的排队等候处理

proxy_read_timeout 60;

#后端服务器数据回传时间,就是在规定的时间内后端服务器必须传完所有的数据

proxy_send_timeout 5;

#代理请求缓存去,该缓存去间保存用户的头信息,以供nginx进行规则处理一般只要保能保存下头信息即可

proxy_buffer_size 32k;

#告诉nginx保存单个用的几个buffer 最大用多少空间

proxy_buffers  4 64k;

#高负载下缓冲大小(proxy_buffers*2)

proxy_busy_buffers_size 128k;,

#设置缓存文件夹大小,如果大于该值,将从upstream 服务器传递请求,而不缓冲到磁盘上

proxy_temp_file_write_size 1024m;

#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。

open_file_cache max=102400 inactive=20s;

#这个是指多长时间检查一次缓存的有效信息。

open_file_cache_valid 30s;

#open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。

open_file_cache_min_uses 1;

#shutdown error display nginx version

# 关闭错误时的nginx 的版本显示

server_tokens off;

#open os function sendfile

# 打开高效的文件传输模式

sendfile        on;

#tcp_nopush     on;

tcp_nopush     on; # 打开linux TCP_CORK,只有sendfile 打开时,该项才有效,用来发送系统HTTP response headers 设置选项的目的是告诉TCP协议不要仅仅为清空发送的缓存而发送报文段。通常三个设置TCPNOPUSH 插口选项。当请求长度超过报文段最大长度时,协议就好可能发出满长度的报文段,这样可以减少报文段的数量,减少的程度取决于每次发送的数量

keepalive_timeout  60;

tcp_nodelay on; #打开TCP_NODELAY 在包含了keepalived 才有效,上面的四项有效的提高了文件传输性能,用sendfile() 函数来转移大量的数据,协议会需要预先解决数据包包头部分,正常情况下包头很小,而且套接字上设置了TCP_NODELAY 。有包头的包将被立即传输,在一些情况下,因为包成功的被对方收到后需要请求对方确认,这样,大量的数据传输就会被延迟而且产生大量不必要的网络流量交换,但是在socket上是指了TCP_CORK ,就像个管道塞住塞子把带有包头的包填满数据,所有的数据根据大小进行填充,自动通过数据包发送出去,但是在数据传送完成是,需要把塞子打开

#开启gzip 的设置

#gzip  on;

gzip  on;

#设置允许压缩的页面的最小字节数,页面字节数从Header 头中的Content-Length中获取建议设置成大于1k的字节数,小于1k可能越压越大

gzip_min_length 1k;

#设置以16k为单位4倍申请内存做压缩结果缓存,默认值是申请跟原始数据相同大小的内存空间存储gzip压缩结果

gzip_buffers 4 16k;

#默认1.1 ,大部分浏览器支持gzip 压缩

gzip_http_version 1.1;

#设置压缩级别 压缩比率1-9,压缩比率越大,越消耗系统资源

gzip_comp_level 2;

#设置压缩列席

gzip_types   text/plain application/x-javascript text/css application/xml;

#设置前端的缓存服务,如squid缓存经过nginx压缩的数据,该选项在做反向代理是设定压缩,后面参数为验证的header头信息,在做相应的压缩处理,

gzip_vary on;

#proxy_cache

# 该处设置的是缓存的目录及其设置的大小

proxy_cache_path  /usr/local/nginx/proxy_temp levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

#设置负载池

upstream backend_server {

server 192.168.2.194:80 ;

# 注weight设置的权重  max_fails 设置的是健康监测失败次数,timeout 设置超时时间 当然此处主要是设置nginx的反向代理及其缓存,对于nginx 的负载均衡,在以后的文章中再详细介绍

# server 192.168.2.107:80 weight=1 max_fails=2 fail_timeout=30s;

}

server {

#注:监听的端口号

listen       80;

#server_name  localhost;

#设置监听的主机名

server_name freehat.blog.51cto.com;

if ($host !~ 'freehat.blog.51cto.com') {

return 403;

}

#charset koi8-r;

#access_log  logs/host.access.log  main;

#location / {

#   root   html;

#   index  index.html index.htm;

#}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html

#

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

#设置扩展名以gif  .jpg .css 等结尾的静态文件缓存

location ~.*\.(gif|jpg|jpeg|png|bmp|sqf|js|css)$

{

#设置防盗链

valid_referers none blocked freehat.blog.51cto.com;

if ($invalid_referer) {

return 404

#如果后端的服务器返回502 504 执行超时等错误,自动将请求转发到upstream 负责均衡池中的另外一台服务器,实现故障转移

proxy_next_upstream http_502 http_504 error timeout invalid_header;

#进行缓存,使用web缓存去cache_one

proxy_cache cache_one;

#以域名,URI,参数组合成web缓存的Key值,Nginx根据Key值哈希,储存缓存内容到二级缓存目录内

#对不同的HTTP 状态码设置不同的缓存时间

proxy_cache_valid 200 304 12h;

proxy_cache_valid any 1m;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

#设定proxy_set_header  Accept-Encoding 或者是后台服务器关闭gzip,该台机器才不会缓存被压缩的文件,造成乱码

proxy_set_header Accept-Encoding "none";

# proxy_set_header Accept-Encoding ""; 同上面一项相同

#设置proxy_cache 支持后台设定的expires , 即使支持HTTP头信息定义的缓存规则

proxy_ignore_headers "Cache-Control" "Expires";

if ( !-e  $request_filename )

{

proxy_pass  http://backend_server;

}注: 该项是如果client 请求的文件在cache 中保存,nginx 直接从cache中把对应的文件返还给client ,不会在去后端的Server 去取对应的文件

expires 1h;  设置过去的时间

             }     

#set don't  php jsp cgi in cache  设置php jsp cgi 不保存在cache中

location ~.*\.(php|jsp|cgi)?$

{

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

proxy_pass http://backend_server;

}

#set js and css cache  expire time 设置js|css 在浏览器中过期的时间

location ~ .*\.(js|css)

{

expires  1h;

}

#clean all cache  设置清除所有的cache

location ~/purge(/.*)

{

allow   127.0.0.1;

allow  192.168.2.0/24;

deny    all;

proxy_cache_purge cache_one $host$1$is_args$args;

}

}

}

第五,启动机及其关闭nginx的命令

1 启动之前检查nginx的主配置文件是否有错误

# /usr/local/nginx/sbin/nginx  -t

2  启动nginx的方式

# /usr/local/nginx/sbin/nginx  -c  /usr/local/nginx/conf/nginx.conf

3 关闭nginx 的方式

# /usr/local/nginx/sbin/nginx  -s  stop

4 平滑启动nginx

#kill  -HUP  `cat /usr/local/nginx/logs/nginx.pid`

转载于:https://blog.51cto.com/freehat/511002

部署nginx反向代理及缓存相关推荐

  1. Nginx 反向代理可以缓存 HTTP POST 请求页面吗?

    2019独角兽企业重金招聘Python工程师标准>>> Nginx 反向代理可以缓存 HTTP POST 请求页面吗? 2017-09-05 景峯 Netkiller 本文节选自&l ...

  2. Nginx反向代理DNS缓存问题

    Nginx反向代理DNS缓存问题 背景 内网环境通过Nginx反向代理访问外网,Nginx配置完成,启动后的一段时间内接口访问正常,一段时间之后,访问拒绝../nginx -s reload 重新加载 ...

  3. yum 代理_教你如何在5分钟轻松部署nginx反向代理

    反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源.同时,用户不需要知道目标服务器的地址,也无须在用户端 ...

  4. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  5. nginx反向代理缓存服务器构建

    博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 代理服务可简单的分为正向代理和反向代理: ...

  6. Nginx反向代理及负载均衡实现过程部署

    Nginx实战进阶篇一 ------------------------------------------------------------------------------- Ningx作为负 ...

  7. .net5 Nginx 反向代理部署

    .net5 Nginx 反向代理部署 几个概念先了解一下 集群 多个服务器(或者软件)呢,都可以完整的完成一个业务 eg:一个业务呢有A,B,C三个流程,服务器甲可以完成A,B,C.服务器乙也可以完成 ...

  8. nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除

    一,nginx反向代理配置 #tomcat 显然就是用户访问www.wolfdream.com(需要设置本地localhost,将www.wolfdream.com指向nginx所在IP)的时候(或将 ...

  9. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

最新文章

  1. 中秋节前,送一波福利
  2. pytorch模型参数信息 计算模型的FLOPs
  3. opencv python 直方图反向投影_python OpenCV学习笔记直方图反向投影的实现
  4. 使用 vue_VUE使用ECharts教程
  5. Django MySQL 多用户_django使用多个数据库的方法实例
  6. 《JAVA并发编程实践JavaConcurrencyinPractice-中文-高清-带书签-完整版(Doug Lea)》
  7. set_set_switching_activity
  8. HTC Vive开发笔记之手柄震动
  9. 关于Autosar中的NM模块的理解
  10. 超好的包体积优化教程,不仅仅是优化
  11. HTML、CSS的思维导图
  12. ansys 服务器无响应,ANSYS出现的各种错误及解决方法
  13. 合格的数据分析师需要具备哪些能力?
  14. 计算任意年份之间的天数
  15. shiro的学习使用
  16. 图集谷-写真集-爬虫-1.0
  17. Android数据库SQLite入坑指南
  18. 怎么理解计算机中的 payload
  19. android v4l2 4路视频,美乐威推出四链路3G-SDI接口的4K M.2采集卡
  20. 计算机双人怎么玩游戏,双人成行游戏双人成行如何联机

热门文章

  1. VTK:几何对象之QuadraticHexahedron
  2. Qt Creator移动平台
  3. C语言用warshall算法求传递闭包transitive closure(附完整源码)
  4. STL常用的遍历算法
  5. springboot 直接转发调用_springboot-过滤器的页面跳转【重定向与请求转发】-异常报错...
  6. 封属于旋转轴密封件吗_氧化铝95瓷属于普通型的一种吗?
  7. 「Swift」第三章String and Character
  8. 跟益达学Solr5之使用Tika从PDF中提取数据导入索引(转字:http://www.tuicool.com/articles/JfUfaey)
  9. showModalDialog和showModelessDialog缓存问题,参数详解,
  10. 检索数据_7_拼接列的值