nginx配置、反向代理缓存、负载均衡

一、nginx基本配置

nginx开启文件目录浏览功能(web上显示目录)

1location / {

2root /data/www/file//指定实际目录绝对路径;   

3autoindexon;//开启目录浏览功能;   

4autoindex_exact_size off;//关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b;   

5autoindex_localtimeon;//开启以服务器本地时区显示文件修改日期!   

6}

php-fpm配置

1location~ \.php(.*)${

2fastcgi_pass127.0.0.1:9000;

3fastcgi_read_timeout7200;

4fastcgi_indexindex.php;

5fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;

6fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;

7fastcgi_paramPATH_INFO$fastcgi_path_info;

8fastcgi_paramPATH_TRANSLATED$document_root$fastcgi_path_info;

9includefastcgi_params;

10}

静态资源读取

1location~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff){

2#所有静态文件直接读取硬盘

3root/var/lib/tomcat7/webapps/JieLiERP/WEB-INF ;

4expires30d;#缓存30天

5}

gzip 压缩

1gzipon;#是否开启gzip

2gzip_buffers324k;#内存中缓冲几块

3gzip_min_length1000;#最小压缩长度

4gzip_comp_level6;#压缩级别[1-9](级别越高压缩的越小,但是越浪费cpu)

5gzip_disable;#正则匹配UA什么样的uri不进行压缩

6gzip_http_version1.1|2.0; 开始压缩htpp协议版本

7gzip_proxied#设置请求者代理服务器,该如何缓存内容 

8gzip_typestext/plain application/xml;#对哪些类型的文件用压缩(图片,mp3这类2进制文件压缩率不高没必要压缩)

9gzip_varyon|off#是否传输压缩标志

二、nginx配置https

1.激活所需要的网站的https获取crt和key证书

2.在nginx配置文件中配置https证书

将http访问域名重定向为https安全访问

1server{

2listen80;

3server_namewww.shangbee.com shangbee.com;

4#重定向shangbee.com到 www.shangbee.com

5# if  ( $host != 'www.shangbee.com'  )  {

6# rewrite ^/(.*)$ https://www.shangbee.com  permanent;

7# }

8rewrite ^https://$http_host$request_uri?permanent;#强制将HTTP重定向到HTTPS   permanent永久重定向

9

10}

1server {

2listen443ssl;

3ssl_certificate /etc/nginx/ssl/nginx.crt;

4ssl_certificate_key /etc/nginx/ssl/nginx.key;

5keepalive_timeout70;

6server_name     www.shangbee.com;

7server_tokens off;

8#add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";

9fastcgi_param   HTTPS               on;

10fastcgi_param   HTTP_SCHEME         https;

11#access_log    /app/logs/nginx/mydomain_access.log;

12#error_log    /app/logs/nginx/mydomain_error.log;

13set        $root    /data/htdocs/ether/public;

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

15{

16root $root;

17}

18location / {

19root    $root;

20indexindex.html index.php;

21if( -f $request_filename) {

22break;

23}

24if( !-e $request_filename) {

25rewrite ^(.*)$ /index.php/$1last;

26break;

27}

28}

29location ~ .+\.php($|/) {

30fastcgi_pass    unix:/run/php/php7.0-fpm.sock;

31fastcgi_split_path_info ^((?U).+.php)(/

?.+)$;

32fastcgi_param PATH_INFO $fastcgi_path_info;

33fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;

34fastcgi_param    SCRIPT_FILENAME    $root$fastcgi_script_name;

35include        fastcgi_params;

36}

37}

永久重定向与临时重定向的区别

临时重定向redirect,永久重定向permanent

301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。

302跳转是暂时的跳转,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。

实施301后,新网址完全继承旧网址,旧网址的排名等完全清零。

实施302后,对旧网址没有影响,但新网址不会有排名。

302每次用户请求都会访问一次服务器,并返回给用户,301用户请求后将永久重定向缓存,再次请求直接在本地重定向不会经过服务器。

三、负载均衡与反向代理

反向代理是负载均衡的一种方式

反向代理可以实现负载均衡  但是负载均衡不一定通过反向代理的方式来实现

反向代理也可以不做负载均衡 可以做客户端与web服务器之间的缓存服务器

squid varnish这些反向代理一般做缓存

nginx反向代理一般做负载均衡

负载均衡也可以通过LVS非反向代理的方式来实现 通过ip和端口实现负载均衡

NGINX反向代理缓存

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

反向代理的作用

①保护网站安全:任何来自Internet的请求都必须先经过代理服务器。

简单来说,就是我们网站的所有的请求都要经过反向代理服务器,对反向代理服务器进行安全加固就能解决很大一部分的安全问题。

②通过配置缓存功能加速Web请求:可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;

可以在反向代理的服务器上缓存某些静态资源,这样的话在反向代理服务器上存在的资源就不用去web服务器上获取,以减轻web服务器的压力。

③实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;

可以通过反向代理服务器把请求分发到不同服务器,减轻服务器的压力,还能防止网站某一台服务器挂掉之后,网站就无法访问的问题,做到网站的高可用,减少事故的发生。

反向代理缓存设置

一、在反向代理服务器的配置文件中加入:

位置:

http段内

1proxy_temp_path /data/nginx-temp;#缓存临时文件路径

2proxy_cache_path /data/nginx-cachelevels=1:2keys_zone=nginx-cache:20m

3max_size=50m inactive=1m;#缓存保存的路径

levels指定该缓存空间有两层hash目录,第一层目录为1个数字或者字母,第二层为2个数字或者字母

keys_zone指的是缓存空间名称。 20m 为内存缓存空间大小

max_size指的是缓存文件可以占用的最大空间。

inactive指的是如果一个缓存文件多长时间不被访问,就会被删除。(天:d、秒:s、分:m)

•配置的demo

//设置动态服务器的代理 【处理PHP任务】

1upstreamtest {

2#ip_hash;    #[ 使用ip_hash分发 ]

3server192.168.1.254:81weight=2;#[ 设置这个服务器的权重为2 ]

4server192.168.1.254:82;

5}

//设置获取静态文件的代理

1upstreamstatic{

2server192.168.1.254:81;#[ 静态服务器 ]

3}

设置缓存目录

1proxy_temp_path /data/nginx-temp;#[temp的目录]

2proxy_cache_path /data/nginx-cachelevels=1:2keys_zone=nginx-cache:20m max_size=50m inactive=1m;

[ 设置缓存的路径为 /data/nginx-cache 层级为2级,第一级为1个字幕第二个为2个字母 缓存的空间名为 nginx-cache,缓存的内存空间为20M 最大空间为50M 1分钟内没有访问删除这个缓存  ]

END

1server{

2listen80;

3server_name_;

4access_loglogs/likang.default.access.log  main;

5error_loglogs/error.logerror;

6root/var/www/html/likang/default;

设置反向代理

1location/{

2proxy_passhttp://test;

3proxy_set_headerHost$host;

4proxy_set_headerX-Real-IP$remote_addr;

5proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;

6}

设置静态图片

1location~.*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {

2#root /data/nginx-cache;  #[ 图片的根目录 ]

3proxy_redirectoff;#[关闭跳转]

4proxy_set_headerHost$host;#[ 设置header ]

5proxy_cachenginx-cache;#[ 缓存的空间 -- 上边定义的  ]

6proxy_cache_valid2003021h;#[ 不同http状态缓存时间不同 ]

7proxy_cache_valid3011d;

8proxy_cache_validany1m;

9proxy_ignore_headersSet-Cookie Cache-Control;

10proxy_hide_headerCache-Control;

11proxy_hide_headerSet-Cookie;

12expires30d;#[告诉浏览器缓存有效期 -- 30天内可以直接访问浏览器缓存 ]

13proxy_passhttp://static;#[文件不存在去那里获取]

14}

15}

解决不缓存的问题:

nginx不缓存原因

默认情况下,nginx是否缓存是由nginx缓存服务器与源服务器共同决定的, 缓存服务器需要严格遵守源服务器响应的header来决定是否缓存以及缓存的时常。header主要有如下:

Cache-control:no-cache、no-store

如果出现这两值,nginx缓存服务器是绝对不会缓存的

Expires:1980-01-01

如果出现日期比当前时间早,也不会缓存。

解决不缓存方案

2.1 方法一:

修改程序或者源服务器web程序响应的header

2.2 方法二:

nginx代理直接加上如下一句:

1proxy_ignore_headers X-Accel-Expires ExpiresCache-ControlSet-Cookie;

或者:

1proxy_ignore_headersSet-CookieCache-Control;

2proxy_hide_headerCache-Control;

3proxy_hide_headerSet-Cookie;

扩展:学习nginx的Proxy Cache指令

1 proxy_cache

语法:proxy_cache zone_name;

默认值:None

使用字段:http, server, location

设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。

在0.7.48后,缓存遵循后端的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”以及其他等。然而,目前nginx会忽略一些缓存控制指令,如:”private”和”no-store”,同样,nginx在缓存过程中不会处理”Vary”头,为了确保一些私有数据不被所有的用户看到,后端必须设置 “no-cache”或者”max-age=0″头,或者proxy_cache_key包含用户指定的数据如

2 proxy_cache_key

语法:proxy_cache_key line;

默认值:httpcookiexxx,在proxycachekey中使用一部分cookie的值可以防止缓存私有数据,所以可以分别指定location以便分开私有数据和公有数据。缓存指令依赖代理缓冲区(buffers),如果proxybuffers设置为off,缓存不会生效。¨K40K语法:¨C2C默认值:schemeproxyostrequest_uri;

使用字段:http, server, location

指令指定了包含在缓存中的缓存关键字。

复制代码 代码如下:

1proxy_cache_key"$host$request_uri$cookie_user";

2

3proxy_cache_key"$scheme$host$request_uri";

3 proxy_cache_path

语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];

默认值:None

使用字段:http

指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中。缓存的文件名和key为代理URL的MD5 码。levels参数指定缓存的子目录数,例如:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

文件名类似于:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

所有活动的key和元数据存储在共享的内存区域中,这个区域用keys_zone参数指定,如果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。

cache manager进程控制磁盘的缓存大小,在max_size参数中定义,超过其大小后最少使用数据将被删除。

区域的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操作系统来定,FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节,当区域满了以后key将按照LRU(最近最少使用算法)进行处理。

proxy_cache_path和proxy_temp_path应该使用在相同的文件系统上。

4 proxy_cache_methods

语法:proxy_cache_methods [GET HEAD POST];

默认值:proxy_cache_methods GET HEAD;

使用字段:http, server, location

GET/HEAD用来装饰语句,即你无法禁用GET/HEAD即使你只使用下列语句设置:

proxy_cache_methods POST;

5 proxy_cache_min_uses

语法:proxy_cache_min_uses the_number;

默认值:proxy_cache_min_uses 1;

使用字段:http, server, location

多少次的查询后应答将被缓存,默认1。

6 proxy_cache_valid

语法:proxy_cache_valid reply_code [reply_code ...] time;

默认值:None

使用字段:http, server, location

为不同的应答设置不同的缓存时间,例如:

复制代码 代码如下:

1proxy_cache_valid20030210m;

2proxy_cache_valid4041m;

3proxy_cache_valid5m;

4proxy_cache_valid20030210m;

5proxy_cache_valid3011h;

6proxy_cache_validany1m;

7 proxy_cache_use_stale

为了防止缓存失效(在多个线程同时更新本地缓存时),你可以指定’updating’参数,它将保证只有一个线程去更新缓存,并且在这个线程更新缓存的过程中其他的线程只会响应当前缓存中的过期版本。

代码及configure配置:

在ngx_http_proxy_module.c里面定义了每个指令的钩子(即callback),它们在读取配置文件时会被调用。在configure的时候只需要把“HTTP_CACHE”设置为YES(可以找到auto/options里面HTTP_CACHE那行)。“proxy_cache_purge”指令需要下载nginx add-ons里面的“Cache Purge”模块,并在configure的时候用"--add-module="来加载代码。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容